VM 수준 권한은 소프트웨어 정의 차량 (SDV) 메시 네트워크의 서로 다른 VM 간 통신에 대한 승인 정책을 정의합니다. 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 통신은 거부됩니다.
우선순위 평가 순서
결정 논리는 다음 순서로 권한을 확인합니다.
- 세부 거부: 특정 인스턴스 (메시지+주제 또는 서비스+채널)가
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: "*"
}