Implementación

La implementación del archivo de política de autorización define la ubicación de almacenamiento designada para el archivo de política específico de cada servicio de vehículo definido por software (SDV). El mecanismo de implementación varía entre las plataformas principales de SDV y SDV IVI.

Plataforma principal de SDV

La plataforma principal de SDV usa archivos APEX para empaquetar paquetes de servicios y configurar paquetes de servicios. El componente de registro de paquetes de servicios recupera la política de autorización para los paquetes de servicios de SDV almacenados en APEX.

APEX es un paquete firmado con un nombre único llamado nombre de paquete. Cada APEX puede contener varios paquetes de servicios. Cada paquete de servicios tiene sus metadatos declarados en el archivo de manifiesto en el APEX.

Los metadatos del paquete de servicios tienen una ruta de acceso al archivo de política de autorización, que debe ubicarse dentro del mismo APEX.

Implementa la política de autorización para el servicio de SDV con la identidad {sdv-vm-name}:{package.name}.{ServiceBundle}.{instance-name} en SDV de la siguiente manera:

  1. Coloca el archivo de política de autorización en el APEX package.name.
  2. Actualiza la entrada ServiceBundle en el archivo de manifiesto de los paquetes de servicios en el APEX package.name. Para ello, agrega la ruta de acceso de la política de autorización correspondiente en el campo authorization_policy_path.
  3. Implementa el APEX package.name en la VM sdv-vm-name.

Ejemplo

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

Coloca el archivo de política de autorización en etc/authz/sample_rpc/permissions.textproto dentro del mismo APEX en el que se encuentra sdv_service_bundles_manifest.textproto.

Plataforma de SDV IVI

Existen ciertas diferencias entre la plataforma de SDV IVI y las implementaciones principales de SDV. En la plataforma de SDV IVI, sucede lo siguiente:

  • No hay registro de paquetes de servicios.
  • Las apps se basan en Java y se entregan en APKs.
  • Los agentes no están en APEX.

Debido a estos factores, la implementación en la plataforma de SDV es diferente.

Implementa la política de autorización para el servicio de SDV con la identidad {ivi-vm-name}:{package.name}.{ServiceBundle}/{instance-name} en SDV IVI de la siguiente manera:

  1. Define la ruta de acceso de la política de autorización según el patrón {policy-dir}/{package.name}/{ServiceBundle}.textproto.
    • Donde policy-dir es uno de los siguientes:
      • /product/etc/sdv_authz_policies
      • /system/etc/sdv_authz_policies
      • /system_ext/etc/sdv_authz_policies
      • /vendor/etc/sdv_authz_policies
    • Por ejemplo, /vendor/etc/sdv_authz_policies/com.sdv.pkg/WindowManager.textproto es una ruta de acceso de política de autorización válida.
  2. Coloca la política de autorización en la ruta de acceso de la política de autorización en la VM ivi-vm-name.

Agentes y compatibilidad con pruebas

Los agentes de SDV tienen la misma implementación de política de autorización en SDV principal y SDV IVI. Si un agente no tiene un APEX, su política de autorización correspondiente debe ubicarse en un APEX complementario solo de configuración.

Ejemplo

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

Política de autorización a nivel de VM

Coloca las políticas a nivel de VM en el APEX con el nombre de paquete com.oem.sdv.authz. Usa un archivo dedicado con el nombre <vm_name>.textproto correspondiente.

Si no existe el <vm_name>.textproto correspondiente, el framework de autorización también busca un archivo .default.textproto en el mismo APEX.

Razones

Se introduce .default.textproto por dos motivos:

  • Configuración simplificada: Para algunos OEMs, puede ser suficiente configurar default.textproto para todas las VMs de SDV y solo proporcionar un <vm-name>.textproto especial para la VM de IVI.
  • Capacidad de actualización: Si aparece una VM nueva después de una actualización del vehículo, un default.textproto razonable podría ser suficiente para evitar actualizar todas las VMs.

Lógica de resolución

Cuando se verifican los permisos de un tema desde una VM llamada <vm-name>, el framework de autorización busca políticas en el siguiente orden:

  1. <vm-name>.textproto: Si existe, realiza la verificación en función de él. Si no existe, vuelve al archivo predeterminado.
  2. .default.textproto: Si existe, realiza la verificación en función de él. Si no existe, deniega el acceso.

Define el módulo Soong con permisos a nivel de VM

El módulo debe ser un APEX con el nombre de paquete com.oem.sdv.authz.

Agrega el valor al archivo .mk:

SDV_VM_LEVEL_PERMISSIONS_MODULE := {soong.module.name}