Una violazione dell'autorizzazione si verifica quando un servizio tenta di eseguire un'azione
che non è autorizzato a eseguire. Nella modalità di applicazione standard permissionsOnly, il framework Software-Defined Vehicle (SDV) verifica se il soggetto o la relativa macchina virtuale (VM) dispone dell'autorizzazione richiesta dichiarata nella relativa policy.
Devi valutare i messaggi di violazione nel loro contesto di sicurezza. Non tutte le violazioni indicano un errore o un tentativo di accesso non autorizzato.
Tutte le decisioni di autorizzazione vengono registrate. Per visualizzarli, cerca nell'output di logcat i messaggi di controllo:
adb -s $SERIAL logcat | grep 'audit message'
Autorizzazione riuscita
I controlli riusciti vengono registrati a livello di debug.
Ciò indica che il soggetto dispone dell'autorizzazione richiesta dichiarata:
D SdvServiceManagerServer: instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance declares permission to access com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc, audit message: ...
Violazioni e autorizzazioni mancanti
Le violazioni si verificano quando manca un'autorizzazione.
Ciò si verifica quando il soggetto non dispone dell'autorizzazione necessaria, ad esempio
client, server, publisher o subscriber, nella sua policy di autorizzazione
oppure la VM del soggetto non la dispone nella policy a livello di VM.
Questo viene registrato a livello 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...
Risoluzione
Il campo audit message del log spesso contiene un suggerimento utile su cosa deve essere aggiunto per risolvere una violazione.
Ad esempio, potresti visualizzare un errore di autorizzazione come questo:
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
Rimedia aggiungendo la regola al testo della policy di autorizzazione del soggetto textproto:
client {
service: "com.server.TargetType"
channel: "my-unit"
}
Se il messaggio di errore indica un'autorizzazione mancante nella VM del soggetto, devi aggiungerla alla policy a livello di VM, ad esempio <vm_name>.textproto o .default.textproto in com.oem.sdv.authz APEX:
allow_server {
service: "com.server.TargetType"
channel: "my-unit"
}
Eseguire la migrazione dagli ACL
Per la compatibilità con le versioni precedenti e la migrazione, il framework supporta le modalità ACLs only,
Lenient e Strict che prendono in considerazione gli elenchi di controllo dell'accesso
(ACL) precedenti.
modalità Solo ACL
Nella modalità ACLs only, l'accesso è consentito solo se le ACL lo consentono. Le autorizzazioni vengono
ignorate. Se gli ACL negano l'accesso, viene registrato un errore:
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: ...
Modalità permissiva
Nella modalità Lenient, l'accesso è consentito se lo consentono gli elenchi di controllo dell'accesso o le autorizzazioni.
Se l'accesso viene concesso utilizzando le ACL, ma mancano le autorizzazioni, viene registrata una violazione temporanea a livello debug per aiutarti a identificare le autorizzazioni mancanti mantenendo il sistema funzionante:
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: ...
Se sia gli ACL che le autorizzazioni non vanno a buon fine, viene registrato un errore per entrambi:
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: ...
Modalità più restrittiva
In modalità Strict, sia le ACL che le autorizzazioni devono consentire l'accesso. Se gli ACL o le autorizzazioni non vanno a buon fine, l'accesso viene negato e viene registrato un errore.