VM レベルの認可ポリシー

VM レベルの権限は、ソフトウェア定義車両(SDV)メッシュ ネットワーク内の異なる VM 間の通信の認可ポリシーを定義します。これにより、1 つの VM が侵害された場合に多層防御セキュリティが提供されます。

VM 間の通信を許可するには、サービスレベルと VM レベルの両方の権限を付与する必要があります。

Proto スキーマ

VM レベルの権限は、textproto 形式の単一の VmAuthzPolicy メッセージを使用して定義されます。

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;
}

承認の決定

評価は厳密な優先順位に従って行われ、同じ粒度では拒否が許可よりも優先されます。デフォルトでは、VM 間の通信はすべて拒否されます。

優先順位の評価順序

決定ロジックは、次の順序で権限を確認します。

  1. きめ細かい拒否: 特定のインスタンス(Message+Topic または Service+Channel)が deny_ ルールと一致する場合、そのインスタンスは明示的に拒否されます。
  2. きめ細かい許可: 特定のインスタンスが allow_ ルールに一致する場合、そのインスタンスは許可されます。
  3. タイプ Deny: メッセージ タイプまたはサービス インターフェース全体が deny_ ルール(topic: "*" または channel: "*")と一致する場合、明示的に拒否されます。
  4. タイプ Allow: メッセージ タイプまたはサービス インターフェース全体が allow_ ルール(topic: "*" または channel: "*")と一致する場合、許可されます。
  5. 包括的な拒否: すべてのメッセージ タイプまたはサービスが拒否されている場合(message: "*" または service: "*")、明示的に拒否されます。
  6. 一括許可: すべてのメッセージ タイプまたはサービスが許可されている場合(message: "*" または service: "*")、許可されます。
  7. 暗黙的なデフォルト: 一致するルールがない場合、暗黙的に拒否されます。システムのデフォルトはすべて拒否です。

次の例は、認可ポリシーがどのように評価されるかを示しています。

きめ細かい許可オーバーライド タイプを拒否

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