مجوزهای سطح ماشین مجازی، سیاستهای مجوزدهی برای ارتباط بین ماشینهای مجازی مختلف در شبکه مش SDV (Software-Defined Vehicle) را تعریف میکنند. آنها در صورت به خطر افتادن یکی از ماشینهای مجازی، امنیت عمیقی را فراهم میکنند.
برای برقراری ارتباط بین ماشینهای مجازی، باید مجوزهای سطح سرویس و سطح ماشین مجازی را اعطا کنید.
طرحواره اولیه
مجوزهای سطح ماشین مجازی با استفاده از یک پیام VmAuthzPolicy واحد در قالب textproto تعریف میشوند.
message VmAuthzPolicy {
repeated Publisher allow_publisher = 1;
repeated Publisher deny_publisher = 2;
repeated Subscriber allow_subscriber = 3;
repeated Subscriber deny_subscriber = 4;
repeated Server allow_server = 5;
repeated Server deny_server = 6;
repeated Client allow_client = 7;
repeated Client deny_client = 8;
}
// Reuses the same Publisher message from AuthzPolicy, but uses "*" for
// wildcards.
message Publisher {
string message = 1;
repeated string topic = 2;
}
// Reuses the same Subscriber message from AuthzPolicy, but uses "*" for
// wildcards.
message Subscriber {
string message = 1;
repeated string topic = 2;
}
// Reuses the same Server message from AuthzPolicy, but uses "*" for
// wildcards.
message Server {
string service = 1;
repeated string channel = 2;
}
// Reuses the same Client message from AuthzPolicy, but uses "*" for
// wildcards.
message Client {
string service = 1;
repeated string channel = 2;
}
تصمیم گیری در مورد مجوز
ارزیابی از یک ترتیب اولویت سختگیرانه پیروی میکند، که در آن Deny با همان جزئیات، Allow را لغو میکند. به طور پیشفرض، تمام ارتباطات بین ماشینهای مجازی Deny میشود.
ترتیب ارزیابی اولویت
منطق تصمیمگیری، مجوزها را به ترتیب زیر بررسی میکند:
- انکار جزئی : اگر یک نمونه خاص (پیام+موضوع یا سرویس+کانال) با یک قانون
deny_مطابقت داشته باشد، به طور صریح رد میشود. - اجازه جزئی : اگر یک نمونه خاص با یک قانون
allow_داشته باشد، مجاز است. - نوع رد کردن : اگر کل یک نوع پیام یا رابط سرویس با یک قانون
deny_(topic: "*"یاchannel: "*") مطابقت داشته باشد، به طور صریح رد میشود. - نوع مجاز : اگر کل یک نوع پیام یا رابط سرویس با یک قانون
allow_(topic: "*"یاchannel: "*") مطابقت داشته باشد، مجاز است. - انکار کلی : اگر همه انواع پیام یا خدمات رد شوند (
message: "*"یاservice: "*")، به طور صریح رد میشود. - مجوز کلی : اگر همه انواع پیام یا خدمات مجاز باشند (
message: "*"یاservice: "*")، مجاز است. - پیشفرض ضمنی : اگر هیچ قانونی مطابقت نداشته باشد، به صورت ضمنی رد میشود . پیشفرض سیستم این است که همه را رد کند.
مثالها
مثالهای زیر نحوه ارزیابی سیاست مجوزدهی را نشان میدهند.
اجازه دادن به صورت جزئی، نوع انکار را لغو میکند.
# Deny door unlock publications by default...
deny_publisher {
message: "com.sdv.security.UnlockDoors"
topic: "*"
}
# ...but allow it for the driver door.
allow_publisher {
message: "com.sdv.security.UnlockDoors"
topic: "driver_door"
}
نوع انکار، کل اجازه را لغو میکند
# Allow all client calls globally (blanket allow)...
allow_client {
service: "*"
channel: "*"
}
# ...except for the firmware update service (system-wide deny).
deny_client {
service: "com.sdv.diagnostic.FirmwareUpdate"
channel: "*"
}