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