Men-debug pelanggaran izin

Pelanggaran otorisasi terjadi saat layanan mencoba melakukan tindakan yang tidak diizinkan untuk dijalankan. Dalam mode penerapan permissionsOnly standar, framework Software-Defined Vehicle (SDV) memeriksa apakah subjek atau virtual machine (VM)-nya memiliki izin yang diperlukan yang dideklarasikan dalam kebijakannya.

Anda harus mengevaluasi pesan pelanggaran dalam konteks keamanannya. Tidak setiap pelanggaran menunjukkan error atau upaya akses tidak sah.

Semua keputusan otorisasi dicatat. Untuk melihatnya, telusuri output logcat untuk pesan audit:

adb -s $SERIAL logcat | grep 'audit message'

Otorisasi berhasil

Pemeriksaan yang berhasil dicatat di tingkat debug.

Hal ini menunjukkan bahwa subjek memiliki izin yang diperlukan yang dideklarasikan:

D SdvServiceManagerServer: instance2:com.sdv.google.sample.bar.ServiceBundleBar/instance declares permission to access com.sdv.google.sample.foo.ServiceBundleFoo#foo-rpc, audit message: ...

Pelanggaran dan izin tidak ada

Pelanggaran terjadi jika izin tidak ada.

Hal ini terjadi saat subjek tidak memiliki izin yang diperlukan, seperti client, server, publisher, atau subscriber, dalam kebijakan otorisasinya, atau VM subjek tidak memilikinya dalam kebijakan tingkat VM.

Hal ini dicatat di tingkat 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...

Perbaikan

audit message log sering kali berisi saran yang berguna tentang apa yang perlu ditambahkan untuk mengatasi pelanggaran.

Misalnya, Anda mungkin melihat error izin seperti ini:

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

Perbaiki hal ini dengan menambahkan aturan ke textproto kebijakan otorisasi subjek:

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

Jika pesan error menunjukkan izin yang tidak ada di VM subjek, Anda harus menambahkannya ke kebijakan tingkat VM, seperti <vm_name>.textproto atau .default.textproto di APEX com.oem.sdv.authz:

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

Bermigrasi dari ACL

Untuk kompatibilitas mundur dan migrasi, framework mendukung mode ACLs only, Lenient, dan Strict yang mempertimbangkan daftar kontrol akses (ACL) sebelumnya.

Mode hanya ACL

Dalam mode ACLs only, akses hanya diizinkan jika ACL mengizinkannya. Izin diabaikan. Jika ACL menolak akses, error akan dicatat dalam log:

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: ...

Mode longgar

Dalam mode Lenient, akses diizinkan jika ACL atau izin mengizinkannya. Jika akses diberikan menggunakan ACL, tetapi izin tidak ada, hal ini dicatat sebagai pelanggaran ringan di tingkat debug untuk membantu Anda mengidentifikasi izin yang tidak ada sekaligus menjaga agar sistem tetap berfungsi:

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: ...

Jika ACL dan izin gagal, hal ini dicatat sebagai error untuk keduanya:

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: ...

Mode ketat

Dalam mode Strict, ACL dan izin harus mengizinkan akses. Jika ACL atau izin gagal, akses akan ditolak dan error akan dicatat.