Kebijakan otorisasi tingkat VM

Izin tingkat VM menentukan kebijakan otorisasi untuk komunikasi antar-VM yang berbeda dalam jaringan mesh Software-Defined Vehicle (SDV). VM ini memberikan keamanan pertahanan mendalam jika salah satu VM disusupi.

Anda harus memberikan izin tingkat layanan dan tingkat VM untuk mengizinkan komunikasi antar-VM.

Skema proto

Izin tingkat VM ditentukan menggunakan satu pesan VmAuthzPolicy dalam format 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;
}

Keputusan otorisasi

Evaluasi mengikuti urutan prioritas yang ketat, dengan Tolak menggantikan Izinkan pada granularitas yang sama. Secara default, semua komunikasi lintas-VM ditolak.

Urutan evaluasi prioritas

Logika keputusan memeriksa izin dalam urutan berikut:

  1. Penolakan Terperinci: Jika instance tertentu (Message+Topic atau Service+Channel) cocok dengan aturan deny_, instance tersebut akan Ditolak secara eksplisit.
  2. Izinkan Terperinci: Jika instance tertentu cocok dengan aturan allow_, instance tersebut Diizinkan.
  3. Jenis Tolak: Jika seluruh jenis Pesan atau antarmuka Layanan cocok dengan aturan deny_ (topic: "*" atau channel: "*"), maka Ditolak secara eksplisit.
  4. Jenis Izinkan: Jika seluruh Jenis pesan atau Antarmuka layanan cocok dengan aturan allow_ (topic: "*" atau channel: "*"), maka Diizinkan.
  5. Penolakan Menyeluruh: Jika semua jenis pesan atau layanan ditolak (message: "*" atau service: "*"), maka akan Ditolak secara eksplisit.
  6. Izinkan Secara Umum: Jika semua jenis pesan atau layanan diizinkan (message: "*" atau service: "*"), maka Diizinkan.
  7. Default Implisit: Jika tidak ada aturan yang cocok, maka ditolak secara implisit. Default sistem adalah menolak semua.

Contoh

Contoh berikut menunjukkan cara kebijakan otorisasi dievaluasi.

Izin terperinci menggantikan penolakan

# 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"
}

Jenis penolakan menggantikan izin menyeluruh

# 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: "*"
}