แก้ไขข้อบกพร่องการละเมิดสิทธิ์

การละเมิดการให้สิทธิ์เกิดขึ้นเมื่อบริการพยายามดำเนินการที่ไม่มีสิทธิ์ ในโหมดการบังคับใช้ permissionsOnly มาตรฐาน เฟรมเวิร์กยานพาหนะที่กำหนดโดยซอฟต์แวร์ (SDV) จะตรวจสอบว่า Subject หรือเครื่องเสมือน (VM) มีสิทธิ์ที่จำเป็นซึ่งประกาศไว้ในนโยบายหรือไม่

คุณต้องประเมินข้อความการละเมิดภายในบริบทด้านความปลอดภัย การละเมิดบางอย่างไม่ได้บ่งบอกถึงข้อผิดพลาดหรือความพยายามในการเข้าถึงโดยไม่ได้รับอนุญาต

ระบบจะบันทึกการตัดสินใจเกี่ยวกับการให้สิทธิ์ทั้งหมด หากต้องการดู ให้ค้นหาข้อความการตรวจสอบในเอาต์พุต logcat

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

การให้สิทธิ์สำเร็จ

ระบบจะบันทึกการตรวจสอบที่สำเร็จที่ระดับ debug

ซึ่งบ่งบอกว่า Subject มีสิทธิ์ที่จำเป็นซึ่งประกาศไว้

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

การละเมิดและสิทธิ์ที่ขาดหายไป

การละเมิดเกิดขึ้นเมื่อไม่มีสิทธิ์

เหตุการณ์นี้เกิดขึ้นเมื่อ Subject ไม่มีสิทธิ์ที่จำเป็น เช่น client, server, publisher หรือ subscriber ในนโยบายการให้สิทธิ์ หรือ VM ของ Subject ไม่มีสิทธิ์ดังกล่าวในนโยบายระดับ 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

แก้ไขข้อผิดพลาดนี้โดยเพิ่มกฎลงในข้อความโปรโตคอลของนโยบายการให้สิทธิ์ของ Subject

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

หากข้อความแสดงข้อผิดพลาดระบุว่าไม่มีสิทธิ์ใน VM ของ Subject คุณ ต้องเพิ่มสิทธิ์ดังกล่าวลงในนโยบายระดับ VM เช่น <vm_name>.textproto หรือ .default.textproto ใน com.oem.sdv.authz APEX

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

ย้ายข้อมูลจาก ACL

เฟรมเวิร์กรองรับโหมด ACLs only, Lenient และ Strict ที่พิจารณารายการควบคุมการเข้าถึง (ACL) ก่อนหน้า เพื่อให้สามารถใช้งานร่วมกับเวอร์ชันก่อนหน้าและการย้ายข้อมูลได้

โหมด ACLs only

ในโหมด 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

ในโหมด 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 และสิทธิ์ล้มเหลว ระบบจะบันทึกเป็นข้อผิดพลาดสำหรับทั้ง 2 อย่าง

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 หรือสิทธิ์ล้มเหลว ระบบจะปฏิเสธการเข้าถึงและบันทึกข้อผิดพลาด