授权政策文件部署定义了每个软件定义车辆 (SDV) 服务的特定政策文件的指定存储位置。部署机制因 SDV 核心平台和 SDV IVI 平台而异。
SDV 核心平台
SDV 核心平台使用 APEX 文件来打包服务软件包和服务软件包配置。服务软件包注册表组件检索存储在 APEX 中的 SDV 服务软件包的授权政策。
APEX 是一个已签名的软件包,具有一个称为软件包名称的唯一名称。每个 APEX 可以包含多个服务软件包。每个服务软件包的元数据都在 APEX 的清单文件中声明。
服务软件包元数据具有授权政策文件的路径,该文件应位于同一 APEX 内。
在 SDV 上部署具有身份 {sdv-vm-name}:{package.name}.{ServiceBundle}.{instance-name} 的 SDV 服务的授权政策,如下所示:
- 将授权政策文件放在
package.nameAPEX 中。 - 通过将相应的授权政策路径添加到
package.nameAPEX 中的服务软件包清单文件中的ServiceBundle条目,更新该条目。authorization_policy_path - 将
package.nameAPEX 部署到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 服务的授权政策,如下所示:
- 根据
{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是有效的授权政策路径。
- 其中
- 将授权政策放置在
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> 的虚拟机的某个正文的权限时,授权框架会按以下顺序查找政策:
<vm-name>.textproto:如果存在,则根据该文件执行检查。如果不存在,则回退到默认文件。.default.textproto:如果存在,则根据该值执行检查。如果不存在,则拒绝访问。
定义具有虚拟机级权限的 Soong 模块
该模块必须是软件包名称为 com.oem.sdv.authz 的 APEX。
将值添加到 .mk 文件:
SDV_VM_LEVEL_PERMISSIONS_MODULE := {soong.module.name}