Naruszenie autoryzacji występuje, gdy usługa próbuje wykonać działanie, do którego nie ma uprawnień. W standardowym trybie egzekwowania permissionsOnly platforma Software-Defined Vehicle (SDV) sprawdza, czy podmiot lub jego maszyna wirtualna ma wymagane uprawnienia zadeklarowane w zasadach.
Komunikaty o naruszeniach należy oceniać w kontekście bezpieczeństwa. Nie każde naruszenie oznacza błąd lub próbę nieautoryzowanego dostępu.
Wszystkie decyzje dotyczące autoryzacji są rejestrowane. Aby je wyświetlić, wyszukaj w danych wyjściowych logcat komunikaty kontrolne:
adb -s $SERIAL logcat | grep 'audit message'
Autoryzacja zakończona powodzeniem
Pomyślne sprawdzenia są rejestrowane na poziomie debug.
Oznacza to, że podmiot ma wymagane uprawnienia zadeklarowane w zasadach:
D SdvServiceManagerServer: instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance declares permission to access com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc, audit message: ...
Naruszenia i brakujące uprawnienia
Naruszenia występują, gdy brakuje uprawnień.
Dzieje się tak, gdy podmiot nie ma w zasadach autoryzacji niezbędnych uprawnień, takich jak client, server, publisher lub subscriber, albo gdy maszyna wirtualna podmiotu nie ma ich w zasadach na poziomie maszyny wirtualnej.
Jest to rejestrowane na poziomie 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...
Działanie naprawcze
Komunikat kontrolny w logu często zawiera przydatną sugestię dotyczącą tego, co należy
dodać, aby rozwiązać problem.audit message
Może na przykład pojawić się taki błąd uprawnień:
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
Aby rozwiązać ten problem, dodaj regułę do pliku textproto zasad autoryzacji podmiotu:
client {
service: "com.server.TargetType"
channel: "my-unit"
}
Jeśli komunikat o błędzie wskazuje na brak uprawnień na maszynie wirtualnej podmiotu, musisz dodać je do zasad na poziomie maszyny wirtualnej, np. <vm_name>.textproto lub
.default.textproto w APEX com.oem.sdv.authz:
allow_server {
service: "com.server.TargetType"
channel: "my-unit"
}
Migracja z list ACL
Aby zapewnić zgodność wsteczną i migrację, platforma obsługuje tryby ACLs only, Lenient i Strict, które uwzględniają wcześniejsze listy kontroli dostępu (ACL).
Tryb ACLs only
W trybie ACLs only dostęp jest dozwolony tylko wtedy, gdy zezwalają na to listy ACL. Uprawnienia są ignorowane. Jeśli listy ACL odmawiają dostępu, rejestrowany jest błąd:
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: ...
Tryb Lenient
W trybie Lenient dostęp jest dozwolony, jeśli zezwalają na to listy ACL lub uprawnienia.
Jeśli dostęp jest przyznawany za pomocą list ACL, ale brakuje uprawnień, jest to rejestrowane jako łagodne naruszenie na poziomie debug, aby pomóc Ci zidentyfikować brakujące uprawnienia przy zachowaniu funkcjonalności systemu:
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: ...
Jeśli listy ACL i uprawnienia nie działają, jest to rejestrowane jako błąd w obu przypadkach:
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: ...
Tryb ścisły
W trybie Strict dostęp musi być dozwolony zarówno przez listy ACL, jak i uprawnienia. Jeśli listy ACL lub uprawnienia nie działają, dostęp jest odmawiany i rejestrowany jest błąd.