Authorization of Service Mesh through Envoy
Envoy-authz เป็นมิดเดิลแวร์สำหรับ Envoy ที่ทำการอนุญาต RBAC & ABAC ภายนอกผ่าน casbin มิดเดิลแวร์นี้ใช้ Envoy's external authorization API ผ่านเซิร์ฟเวอร์ gRPC พร็อกซีนี้สามารถติดตั้งได้บน Service Mesh ที่ใช้ Envoy ประเภทใดก็ได้ เช่น Istio
ความต้องการ
- Envoy 1.17+
- Istio หรือ Service Mesh ประเภทอื่นๆ
- การพึ่งพา grpc
การจัดการการพึ่งพาใช้ go.mod
การทำงานของมิดเดิลแวร์
- ลูกค้าทำการร้องขอ HTTP
- พร็อกซี Envoy ส่งคำขอไปยังเซิร์ฟเวอร์ gRPC
- เซิร์ฟเวอร์ gRPC ทำการอนุญาตคำขอตามนโยบาย casbin
- หากได้รับอนุญาต คำขอจะถูกส่งต่อ; มิฉะนั้นจะถูกปฏิเสธ
เซิร์ฟเวอร์ gRPC นั้นพัฒนาบน protocol buffer จาก external_auth.proto ใน Envoy
// A generic interface for performing authorization checks on incoming
// requests to a networked service.
service Authorization {
// Performs an authorization check based on the attributes associated with the
// incoming request and returns a status of `OK` or not `OK`.
rpc Check(v2.CheckRequest) returns (v2.CheckResponse);
}
จากไฟล์ proto ข้างต้น เราต้องใช้บริการ Check()
ในเซิร์ฟเวอร์การอนุญาต
การใช้งาน
- กำหนดนโยบาย Casbin ในไฟล์คอนฟิกตาม คู่มือนี้
คุณสามารถตรวจสอบ/ทดสอบนโยบายของคุณโดยใช้ casbin-editor ออนไลน์
- เริ่มเซิร์ฟเวอร์การตรวจสอบโดยการรัน:
go build .
./authz
- โหลดการตั้งค่า Envoy:
envoy -c authz.yaml -l info
เมื่อ Envoy เริ่มทำงาน มันจะแทรกการร้องขอสำหรับกระบวนการอนุญาต
การรวมกับ Istio
เพื่อให้มิดเดิลแวร์นี้ทำงาน คุณต้องส่งส่วนหัวที่กำหนดเองที่มีชื่อผู้ใช้ในโทเค็น JWT หรือส่วนหัว คุณสามารถอ้างอิงไปยัง เอกสาร Istio อย่างเป็นทางการ เพื่อข้อมูลเพิ่มเติมเกี่ยวกับการแก้ไข Request Headers