権限違反をデバッグする

認可違反は、サービスが実行を許可されていないアクションを実行しようとしたときに発生します。標準の permissionsOnly 適用モードでは、ソフトウェア定義車両(SDV)フレームワークは、サブジェクトまたはその仮想マシン(VM)がポリシーで宣言された必要な権限を持っているかどうかを確認します。

違反メッセージは、セキュリティ コンテキスト内で評価する必要があります。すべての違反がエラーや不正アクセス試行を示すわけではありません。

すべての認可の決定がログに記録されます。監査メッセージを表示するには、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: ...

違反と権限の欠落

権限がない場合に違反が発生します。

これは、サブジェクトの認可ポリシーに必要な権限(clientserverpublishersubscriber など)がない場合、またはサブジェクトの VM に VM レベルのポリシーがない場合に発生します。

これは 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

この問題を解決するには、サブジェクトの認可ポリシーの textproto にルールを追加します。

client {
    service: "com.server.TargetType"
    channel: "my-unit"
}

エラー メッセージに、サブジェクトの VM に権限がないことが示されている場合は、com.oem.sdv.authz APEX の <vm_name>.textproto.default.textproto などの VM レベルのポリシーに追加する必要があります。

allow_server {
    service: "com.server.TargetType"
    channel: "my-unit"
}

ACL から移行する

下位互換性と移行のため、フレームワークは以前のアクセス制御リスト(ACL)を考慮する ACLs onlyLenientStrict モードをサポートしています。

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 または権限のいずれかが失敗すると、アクセスは拒否され、エラーがログに記録されます。