Нарушение авторизации происходит, когда служба пытается выполнить действие, которое ей не разрешено выполнять. В стандартном режиме принудительного применения permissionsOnly ) платформа программно-определяемого транспортного средства (SDV) проверяет, имеет ли субъект или его виртуальная машина (ВМ) необходимые разрешения, указанные в его политике.
Необходимо оценивать сообщения о нарушениях в контексте безопасности. Не каждое нарушение указывает на ошибку или попытку несанкционированного доступа.
Все решения об авторизации регистрируются в журнале. Чтобы просмотреть их, найдите в выводе logcat сообщения аудита:
adb -s $SERIAL logcat | grep 'audit message'
Успешная авторизация
Успешные проверки регистрируются на уровне debug .
Это означает, что субъект имеет заявленное необходимое разрешение:
D SdvServiceManagerServer: instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance declares permission to access com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc, audit message: ...
Отсутствуют нарушения и разрешения.
Нарушения происходят, когда отсутствует разрешение.
Это происходит, когда у субъекта отсутствуют необходимые разрешения, такие как client , server , publisher или subscriber , в его политике авторизации, или когда у виртуальной машины субъекта отсутствуют такие разрешения в политике на уровне виртуальной машины.
Это регистрируется на уровне 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...
Очистка
audit message часто содержится полезное предложение о том, что необходимо добавить для устранения нарушения.
Например, вы можете увидеть ошибку доступа следующего вида:
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
Для устранения этой проблемы добавьте правило в текстовый протокол политики авторизации субъекта:
client {
service: "com.server.TargetType"
channel: "my-unit"
}
Если сообщение об ошибке указывает на отсутствие разрешения в виртуальной машине субъекта, необходимо добавить его в политику уровня виртуальной машины, например, <vm_name>.textproto или .default.textproto в файле APEX com.oem.sdv.authz :
allow_server {
service: "com.server.TargetType"
channel: "my-unit"
}
Переход с ACL
Для обеспечения обратной совместимости и миграции платформа поддерживает режимы ACLs only ), Lenient и Strict , которые учитывают более ранние списки контроля доступа (ACL).
режим только ACL
В режиме ACLs only доступ разрешается только в том случае, если это разрешено списками ACL. Права доступа игнорируются. Если списки ACL запрещают доступ, в журнал записывается ошибка:
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: ...
Мягкий режим
В режиме Lenient доступ разрешен, если это позволяют списки контроля доступа (ACL) или разрешения. Если доступ предоставлен с помощью ACL, но отсутствуют необходимые разрешения, это регистрируется как мягкое нарушение на уровне debug , чтобы помочь вам выявить отсутствующие разрешения, сохраняя при этом работоспособность системы.
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: ...
Если и списки контроля доступа (ACL), и разрешения не работают, это регистрируется как ошибка для обоих случаев:
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: ...
Строгий режим
В Strict режиме доступ должен быть разрешен как списками контроля доступа (ACL), так и правами доступа. Если хотя бы один из списков ACL или прав доступа не выполняется, доступ запрещается, и в журнал регистрируется ошибка.