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 間の通信はすべて拒否されます。
優先順位の評価順序
決定ロジックは、次の順序で権限を確認します。
- きめ細かい拒否: 特定のインスタンス(Message+Topic または Service+Channel)が
deny_ルールと一致する場合、そのインスタンスは明示的に拒否されます。 - きめ細かい許可: 特定のインスタンスが
allow_ルールに一致する場合、そのインスタンスは許可されます。 - タイプ Deny: メッセージ タイプまたはサービス インターフェース全体が
deny_ルール(topic: "*"またはchannel: "*")と一致する場合、明示的に拒否されます。 - タイプ Allow: メッセージ タイプまたはサービス インターフェース全体が
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: "*"
}