배포

승인 정책 파일 배포는 각 소프트웨어 정의 차량 (SDV) 서비스에 고유한 정책 파일의 지정된 저장 위치를 정의합니다. 배포 메커니즘은 SDV 코어와 SDV IVI 플랫폼 간에 다릅니다.

SDV 코어 플랫폼

SDV 코어 플랫폼은 APEX 파일을 사용하여 서비스 번들 및 서비스 번들 구성을 패키징합니다. 서비스 번들 레지스트리 구성요소는 APEX에 저장된 SDV 서비스 번들의 승인 정책을 가져옵니다.

APEX는 패키지 이름 이라는 고유한 이름이 있는 서명된 패키지입니다. 각 APEX에는 여러 서비스 번들이 포함될 수 있습니다. 각 서비스 번들의 메타데이터는 APEX의 매니페스트 파일에 선언되어 있습니다.

서비스 번들 메타데이터에는 승인 정책 파일의 경로가 있으며, 이 경로는 동일한 APEX 내에 있어야 합니다.

다음과 같이 SDV에서 ID가 {sdv-vm-name}:{package.name}.{ServiceBundle}.{instance-name}인 SDV 서비스의 승인 정책을 배포합니다.

  1. 승인 정책 파일을 package.name APEX에 넣습니다.
  2. 해당 승인 정책 경로를 authorization_policy_path 필드에 추가하여 package.name APEX의 서비스 번들 매니페스트 파일에서 ServiceBundle 항목을 업데이트합니다.
  3. package.name APEX를 sdv-vm-name VM에 배포합니다.

(apex_root) sdv_service_bundles_manifest.textproto

sdv_service_bundle_metadata {
  name: "SampleRpcServer"
  version_number: 0
  version_name: "0.1 Alpha"
  native_library_path: "lib64/libsdv_sample_rpc.so"
  # Path to the authorization policy file.
  # Warning: Must be a relative path to the APEX root directory.
  authorization_policy_path: "etc/authz/sample_rpc/permissions.textproto"
}

sdv_service_bundles_manifest.textproto가 있는 동일한 APEX 내의 etc/authz/sample_rpc/permissions.textproto에 승인 정책 파일을 배치합니다.

SDV IVI 플랫폼

SDV IVI 플랫폼과 SDV 코어 구현 간에는 몇 가지 차이점이 있습니다. SDV IVI 플랫폼에서:

  • 서비스 번들 레지스트리가 없습니다.
  • 앱은 자바 기반이며 APK로 제공됩니다.
  • 에이전트는 APEX에 없습니다.

이러한 요인으로 인해 SDV 플랫폼의 배포가 다릅니다.

다음과 같이 SDV IVI에서 ID가 {ivi-vm-name}:{package.name}.{ServiceBundle}/{instance-name}인 SDV 서비스의 승인 정책을 배포합니다.

  1. {policy-dir}/{package.name}/{ServiceBundle}.textproto 패턴에 따라 승인 정책 경로를 정의합니다.
    • 여기서 policy-dir은 다음 중 하나입니다.
      • /product/etc/sdv_authz_policies
      • /system/etc/sdv_authz_policies
      • /system_ext/etc/sdv_authz_policies
      • /vendor/etc/sdv_authz_policies
    • 예를 들어 /vendor/etc/sdv_authz_policies/com.sdv.pkg/WindowManager.textproto는 유효한 승인 정책 경로입니다.
  2. ivi-vm-name VM의 승인 정책 경로에 승인 정책을 배치합니다.

에이전트 및 테스트 지원

SDV 에이전트는 SDV 코어와 SDV IVI 모두에서 동일한 승인 정책 배포를 사용합니다. 에이전트에 APEX가 없는 경우 해당 승인 정책은 컴패니언 구성 전용 APEX에 있어야 합니다.

(apex_root) sdv_service_bundles_manifest.textproto

sdv_service_bundle_metadata {
   # Should match the bundle name in the FQIN registered by the SOME/IP broker agent
   name: "SomeIpBroker"
   # Version number of the config APEX
   version_number: 1
   # Version name of the config APEX
   version_name: "1"

   # Reference the manifest itself to mark the metadata as a config-only
   # declaration.
   native_library_path: "etc/sdv_service_bundles_manifest.textproto"

   # Path to the authorization policy file for SOME/IP broker.
   authorization_policy_path: "etc/config/access_control/someip_authz_policy.textproto"
}

VM 수준 승인 정책

패키지 이름이 com.oem.sdv.authz인 APEX에 VM 수준 정책을 배치합니다. 해당 <vm_name>.textproto 이름이 있는 전용 파일을 사용합니다.

해당 <vm_name>.textproto가 없으면 승인 프레임워크는 동일한 APEX에서 .default.textproto 파일도 찾습니다.

근거

.default.textproto는 다음과 같은 두 가지 이유로 도입되었습니다.

  • 간소화된 설정: 일부 OEM의 경우 모든 SDV VM에 default.textproto를 설정하고 IVI VM에만 특수 <vm-name>.textproto를 제공하는 것으로 충분할 수 있습니다.
  • 업데이트 가능성: 차량 업데이트 후 새 VM이 표시되면 적절한 default.textproto로 모든 VM을 업데이트하지 않아도 될 수 있습니다.

해결 로직

<vm-name>이라는 VM에서 주체의 권한을 확인할 때 승인 프레임워크는 다음 순서로 정책을 찾습니다.

  1. <vm-name>.textproto: 있는 경우 이를 기반으로 확인을 실행합니다. 없는 경우 기본 파일로 대체합니다.
  2. .default.textproto: 있는 경우 이를 기반으로 확인을 실행합니다. 없는 경우 액세스를 거부합니다.

VM 수준 권한으로 Soong 모듈 정의

모듈은 패키지 이름이 com.oem.sdv.authz인 APEX여야 합니다.

.mk 파일에 값을 추가합니다.

SDV_VM_LEVEL_PERMISSIONS_MODULE := {soong.module.name}