הפרת הרשאה מתרחשת כששירות מנסה לבצע פעולה שהוא לא מורשה לבצע. בpermissionsOnlyמצב האכיפה הרגיל, מסגרת Software-Defined Vehicle (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
כדי לפתור את הבעיה, מוסיפים את הכלל ל-textproto של מדיניות ההרשאה של הנושא:
client {
service: "com.server.TargetType"
channel: "my-unit"
}
אם בהודעת השגיאה מצוינת הרשאה חסרה במכונה הווירטואלית של הנושא, צריך להוסיף אותה למדיניות ברמת המכונה הווירטואלית, כמו <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).
מצב 'רשימות 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 או ההרשאות נכשלות, הגישה נדחית ושגיאה נרשמת ביומן.