部署

授权政策文件部署定义了每个软件定义车辆 (SDV) 服务的特定政策文件的指定存储位置。部署机制因 SDV 核心平台和 SDV IVI 平台而异。

SDV 核心平台

SDV 核心平台使用 APEX 文件来打包服务软件包和服务软件包配置。服务软件包注册表组件检索存储在 APEX 中的 SDV 服务软件包的授权政策。

APEX 是一个已签名的软件包,具有一个称为软件包名称的唯一名称。每个 APEX 可以包含多个服务软件包。每个服务软件包的元数据都在 APEX 的清单文件中声明。

服务软件包元数据具有授权政策文件的路径,该文件应位于同一 APEX 内。

在 SDV 上部署具有身份 {sdv-vm-name}:{package.name}.{ServiceBundle}.{instance-name} 的 SDV 服务的授权政策,如下所示:

  1. 将授权政策文件放在 package.name APEX 中。
  2. 通过将相应的授权政策路径添加到 package.name APEX 中的服务软件包清单文件中的 ServiceBundle 条目,更新该条目。authorization_policy_path
  3. package.name APEX 部署到 sdv-vm-name 虚拟机。

示例

(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"
}

将授权政策文件放在 etc/authz/sample_rpc/permissions.textproto 中,该文件与 sdv_service_bundles_manifest.textproto 位于同一 APEX 中。

SDV IVI 平台

SDV IVI 平台与 SDV 核心实现之间存在一些差异。在 SDV IVI 平台中:

  • 没有服务包注册表。
  • 应用基于 Java,以 APK 形式交付。
  • 代理不在 APEX 中。

由于这些因素,在 SDV 平台上的部署有所不同。

在 SDV IVI 上部署具有身份 {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 虚拟机的授权政策路径中。

代理和测试支持

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

虚拟机级授权政策

将虚拟机级政策放在软件包名称为 com.oem.sdv.authz 的 APEX 中。使用具有相应 <vm_name>.textproto 名称的专用文件。

如果不存在相应的 <vm_name>.textproto,授权框架还会查找同一 APEX 中的 .default.textproto 文件。

理由

引入 .default.textproto 的原因有两个:

  • 简化设置:对于某些 OEM,可能只需为所有 SDV 虚拟机设置 default.textproto,并仅为 IVI 虚拟机提供特殊的 <vm-name>.textproto
  • 可更新性:如果车辆更新后出现新的虚拟机,合理的 default.textproto 可能足以避免更新所有虚拟机。

解决逻辑

在检查来自名为 <vm-name> 的虚拟机的某个正文的权限时,授权框架会按以下顺序查找政策:

  1. <vm-name>.textproto:如果存在,则根据该文件执行检查。如果不存在,则回退到默认文件。
  2. .default.textproto:如果存在,则根据该值执行检查。如果不存在,则拒绝访问。

定义具有虚拟机级权限的 Soong 模块

该模块必须是软件包名称为 com.oem.sdv.authz 的 APEX。

将值添加到 .mk 文件:

SDV_VM_LEVEL_PERMISSIONS_MODULE := {soong.module.name}