VM 수준 승인 정책

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 통신은 거부됩니다.

우선순위 평가 순서

결정 논리는 다음 순서로 권한을 확인합니다.

  1. 세부 거부: 특정 인스턴스 (메시지+주제 또는 서비스+채널)가 deny_ 규칙과 일치하면 명시적으로 거부됩니다.
  2. 세부 허용: 특정 인스턴스가 allow_ 규칙과 일치하면 허용됩니다.
  3. 거부 유형: 전체 메시지 유형 또는 서비스 인터페이스가 deny_ 규칙 (topic: "*" 또는 channel: "*")과 일치하면 명시적으로 거부됩니다.
  4. 허용 유형: 전체 메시지 유형 또는 서비스 인터페이스가 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: "*"
}