VM düzeyindeki izinler, Yazılımla Tanımlanan Araç (SDV) bağlantılı ağındaki farklı VM'ler arasındaki iletişim için yetkilendirme politikalarını tanımlar. Bir sanal makinenin güvenliği ihlal edilirse derinlemesine savunma güvenliği sağlarlar.
Sanal makineler arası iletişime izin vermek için hem hizmet düzeyinde hem de sanal makine düzeyinde izinler vermeniz gerekir.
Proto şeması
Sanal makine düzeyindeki izinler, textproto biçiminde tek bir VmAuthzPolicy mesajı kullanılarak tanımlanır.
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;
}
Yetkilendirme kararı
Değerlendirme, aynı ayrıntı düzeyinde Reddetme'nin İzin Ver'i geçersiz kıldığı katı bir öncelik sırasına göre yapılır. Varsayılan olarak, tüm sanal makineler arası iletişim reddedilir.
Öncelik değerlendirme sırası
Karar mantığı, izinleri aşağıdaki sırayla kontrol eder:
- Ayrıntılı Reddetme: Belirli bir örnek (Mesaj+Konu veya Hizmet+Kanal) bir
deny_kuralıyla eşleşirse açıkça reddedilir. - Ayrıntılı İzin: Belirli bir örnek bir
allow_kuralıyla eşleşirse İzin Verilir. - Reddetme Türü: Bir mesaj türünün veya hizmet arayüzünün tamamı bir
deny_kuralıyla (topic: "*"veyachannel: "*") eşleşirse açıkça reddedilir. - İzin ver türü: Bir mesaj türünün veya hizmet arayüzünün tamamı bir
allow_kuralıyla (topic: "*"veyachannel: "*") eşleşirse izin verilir. - Genel Reddetme: Tüm ileti türleri veya hizmetler reddedilirse
(
message: "*"veyaservice: "*") Açıkça reddedildi olarak değerlendirilir. - Genel İzin: Tüm mesaj türlerine veya hizmetlere izin veriliyorsa (
message: "*"veyaservice: "*") İzin Verilir. - Örtülü Varsayılan: Hiçbir kural eşleşmezse örtülü olarak reddedilir. Sistem varsayılan olarak tümünü reddeder.
Örnekler
Aşağıdaki örneklerde, yetkilendirme politikasının nasıl değerlendirildiği gösterilmektedir.
Ayrıntılı izin, geçersiz kılma türü reddetme
# 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"
}
Tür reddetme, genel izin verme kuralını geçersiz kılar
# 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: "*"
}