ไฟล์นโยบายการให้สิทธิ์เป็นแหล่งที่มาเดียวที่เชื่อถือได้สำหรับการกำหนดค่าการให้สิทธิ์สแต็กการสื่อสารของยานยนต์ที่กำหนดโดยซอฟต์แวร์ (SDV) สำหรับแพ็กเกจบริการ SDV
ไฟล์นโยบายการให้สิทธิ์มีรายการสิทธิ์สำหรับแพ็กเกจบริการนี้ ซึ่งระบุสิ่งที่แพ็กเกจทำได้
สคีมา Proto
ไฟล์นโยบายการให้สิทธิ์ใช้รูปแบบ textproto สำหรับการเข้ารหัสข้อมูลที่เกี่ยวข้อง
สคีมา Proto ของนโยบายการให้สิทธิ์มีดังนี้
message AuthzPolicy {
// Optional. List of permissions to publish Data Tunnel publications.
repeated Publisher publisher = 4;
// Optional. List of permissions to discover and subscribe to Data Tunnel
// publications.
repeated Subscriber subscriber = 5;
// Optional. List of permissions to serve an RPC server.
repeated Server server = 6;
// Optional. List of permissions to discover and call methods of an RPC
// server.
repeated Client client = 7;
// Optional. Allow blanket "read" permission.
//
// Gives permission to discover and call all methods of all RPC servers,
// as well as discover and subscribe to all publications.
//
// WARNING: This flag grants elevated permissions and should be used with a
// good reason and for privileged agents only (e.g. Telemetry).
bool allow_read_all = 8;
}
// Defines a permission to publish Data Tunnel publications.
message Publisher {
// Required. Publication's protobuf message name.
string message = 1;
// Topic(s) to which this permission allows to publish to.
//
// Setting this field or setting 'allow_all_topics == true' is required.
repeated string topic = 2;
// Flag indicates that Service Bundle is allowed to register publication
// of the 'message' type with any 'topic'
//
// Should only be set to 'true' if the 'topic' field is not set.
bool allow_all_topics = 3;
}
// Defines a permission to discover and subscribe to Data Tunnel publications.
message Subscriber {
// Required. Publication's protobuf message name.
string message = 1;
// Topic(s) to which this permission allows to subscribe to.
//
// Setting this field or setting 'allow_all_topics == true' is required.
repeated string topic = 2;
// Flag indicates that Service Bundle is allowed to discover and subscribe to
// all publications of the 'message' type.
//
// Should only be set to 'true' if the 'topic' field is not set.
bool allow_all_topics = 3;
}
// Defines a permission to serve an RPC server.
message Server {
// Required. Server's protobuf service name.
string service = 1;
// Channel(s) which this permission allows to register.
//
// Setting this field or setting 'allow_all_channels == true' is required.
repeated string channel = 2;
// Flag indicates that Service Bundle is allowed to register RPC servers
// of the 'service' type with any 'channel'
//
// Should only be set to 'true' if the 'channel' field is not set.
bool allow_all_channels = 3;
}
// Defines a permission to discover and call methods of an RPC server.
message Client {
// Required. Server's protobuf service name.
string service = 1;
// Channel(s) which this permission allows to discover and call methods on.
//
// Setting this field or setting 'allow_all_channels == true' is required.
repeated string channel = 2;
// Flag indicates that Service Bundle is allowed to discover and call all RPC
// servers of the 'service' type.
//
// Should only be set to 'true' if the 'channel' field is not set.
bool allow_all_channels = 3;
}
ตัวอย่าง
# Allows this SB to register publication of TireStatus type with "left_tire" topic only.
publisher {
message: "com.sdv.TireStatus"
topic: "left_tire"
}
# Allows this SB to subscribe to publication of TireStatus type with "left_tire" topic only.
subscriber {
message: "com.sdv.TireStatus"
topic: "left_tire"
}
# Allows this SB to implement and serve UserPreferencesManager service on any channel.
server {
service: "com.sdv.UserPreferencesManager"
allow_all_channels: true
}
# Allows this SB to discover and call UserPreferencesManager service on any channel.
client {
service: "com.sdv.UserPreferencesManager"
allow_all_channels: true
}
ตัวอย่างการอ่านทั้งหมดที่มีสิทธิ์
# Blanket read permission for privileged agents (e.g. Telemetry).
allow_read_all: true
การตัดสินใจให้สิทธิ์
ระบบสามารถตัดสินใจให้สิทธิ์ได้ดังนี้
- อนุญาต
AuthzPolicyของ Subject มีกฎสิทธิ์ที่จำเป็น- ปฏิเสธอย่างชัดแจ้ง
AuthzPolicyของ Subject หรือAuthzPolicyของ VM ไม่มีกฎสิทธิ์ที่จำเป็น ระบบจะแสดงข้อความแสดงข้อผิดพลาดที่ชัดเจนซึ่งระบุสิทธิ์ที่ขาดหายไป- ปฏิเสธโดยนัย
- ข้อผิดพลาดของระบบหรือข้อมูลไม่ถูกต้อง เช่น ไม่มีไฟล์นโยบาย แยกวิเคราะห์ชื่อไม่สำเร็จ หรือไม่มีคำจำกัดความของหน่วย
ตรรกะการตัดสินใจตัวอย่าง
ขั้นตอนต่อไปนี้จะเกิดขึ้นเมื่อแพ็กเกจบริการพยายามเรียก com.sdv.UserPreferencesManager ในแชแนล default
- สแต็กการสื่อสารจะตรวจสอบ
AuthzPolicyของแพ็กเกจบริการเพื่อดูสิทธิ์clientหากไม่มีสิทธิ์ ระบบจะ ปฏิเสธอย่างชัดแจ้ง ซึ่งระบุว่า Subject ไม่มีสิทธิ์ - สำหรับการสื่อสารระหว่าง VM ผ่านเครือข่ายที่ทำงานร่วมกัน ระบบจะตรวจสอบสิทธิ์ของ VM โฮสต์ระหว่างการแลกเปลี่ยนข้อมูล Mesh ของ Service Discovery (SD) ไม่ใช่เฉพาะระหว่างการพยายามเข้าถึง สแต็กการสื่อสารจะตรวจสอบ
VmAuthzPolicyของ VM โฮสต์เพื่อดูว่า VM ได้รับอนุญาตให้โต้ตอบกับบริการหรือไม่ - หากทั้งนโยบายของ Subject และนโยบายระดับ VM อนุญาตให้มีการโต้ตอบ ระบบจะอนุญาต คำขอ มิฉะนั้น ระบบจะปฏิเสธอย่างชัดแจ้ง ซึ่งระบุ ว่า VM ไม่มีสิทธิ์
ดูข้อมูลเพิ่มเติมเกี่ยวกับนโยบายที่บังคับใช้ระหว่าง VM ได้ที่ สิทธิ์ระดับ VM