ข้ามไปยังเนื้อหาหลัก

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-editor ออนไลน์

  • เริ่มเซิร์ฟเวอร์การตรวจสอบโดยการรัน:
go build .
./authz
  • โหลดการตั้งค่า Envoy:
envoy -c authz.yaml -l info

เมื่อ Envoy เริ่มทำงาน มันจะแทรกการร้องขอสำหรับกระบวนการอนุญาต

การรวมกับ Istio

เพื่อให้มิดเดิลแวร์นี้ทำงาน คุณต้องส่งส่วนหัวที่กำหนดเองที่มีชื่อผู้ใช้ในโทเค็น JWT หรือส่วนหัว คุณสามารถอ้างอิงไปยัง เอกสาร Istio อย่างเป็นทางการ เพื่อข้อมูลเพิ่มเติมเกี่ยวกับการแก้ไข Request Headers