Se produce una violación de autorización cuando un servicio intenta realizar una acción que no tiene permiso para ejecutar. En el modo de aplicación permissionsOnly estándar, el framework de Software-Defined Vehicle (SDV) verifica si el sujeto o su máquina virtual (VM) tiene el permiso requerido declarado en su política.
Debes evaluar los mensajes de violación dentro de su contexto de seguridad. No todas las violaciones indican un error o un intento de acceso no autorizado.
Se registran todas las decisiones de autorización. Para verlas, busca mensajes de auditoría en el resultado de logcat:
adb -s $SERIAL logcat | grep 'audit message'
Autorización correcta
Las verificaciones correctas se registran en el nivel debug.
Esto indica que el sujeto tiene el permiso requerido declarado:
D SdvServiceManagerServer: instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance declares permission to access com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc, audit message: ...
Violaciones y permisos faltantes
Las violaciones se producen cuando falta un permiso.
Esto sucede cuando el sujeto no tiene el permiso necesario, como client, server, publisher o subscriber, en su política de autorización, o cuando la VM del sujeto no lo tiene en la política a nivel de la VM.
Esto se registra en el nivel error:
E SdvServiceManagerServer: Authz violation. instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance does not declare permission to access com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc, audit message: Subject lacks 'client' permission...
Corrección
El audit message del registro suele contener una sugerencia útil sobre lo que se debe agregar para resolver una violación.
Por ejemplo, es posible que veas un error de permiso como el siguiente:
Subject 'vm:com.client.Bundle/default' lacks 'client' permission for service 'com.server.TargetType' with channel 'my-unit'. Add 'client { service: "com.server.TargetType" channel: "my-unit" }' to the subject's Authz policy
Para corregirlo, agrega la regla al texto proto de la política de autorización del sujeto:
client {
service: "com.server.TargetType"
channel: "my-unit"
}
Si el mensaje de error indica que falta un permiso en la VM del sujeto, debes agregarlo a la política a nivel de la VM, como <vm_name>.textproto o
.default.textproto en el com.oem.sdv.authz APEX:
allow_server {
service: "com.server.TargetType"
channel: "my-unit"
}
Cómo migrar desde las LCA
Para la retrocompatibilidad y la migración, el framework admite los modos ACLs only, Lenient y Strict que consideran las listas de control de acceso (LCA) anteriores.
Modo ACLs only
En el modo ACLs only, el acceso solo se permite si las LCA lo permiten. Se ignoran los permisos. Si las LCA deniegan el acceso, se registra un error:
E SdvServiceManagerServer: Authz violation. com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc denies access to instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance, audit message: ...
Modo Lenient
En el modo Lenient, el acceso se permite si las LCA o los permisos lo permiten.
Si se otorga acceso con las LCA, pero faltan permisos, se registra como una violación leve en el nivel debug para ayudarte a identificar los permisos faltantes mientras mantienes el sistema en funcionamiento:
D SdvServiceManagerServer: Permissions Authz violation (access granted by ACLs): instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance does not declare permission to access com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc, audit message: ...
Si fallan las LCA y los permisos, se registra como un error para ambos:
E SdvServiceManagerServer: Authz violation. com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc denies access to instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance, audit message: ...
E SdvServiceManagerServer: Authz violation. instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance does not declare permission to access com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc, audit message: ...
Modo Strict
En el modo Strict, las LCA y los permisos deben permitir el acceso. Si fallan las LCA o los permisos, se deniega el acceso y se registra un error.