Authorization of Service Mesh through Envoy
Envoy-authz هو برنامج وسيط لـ Envoy يقوم بتنفيذ التفويض الخارجي RBAC & ABAC من خلال casbin. يستخدم هذا البرنامج الوسيط واجهة برمجة التطبيقات الخارجية للتفويض في Envoy عبر خادم gRPC. يمكن نشر هذا الوكيل على أي نوع من أنواع شبكات الخدمة المبنية على Envoy، مثل Istio.
المتطلبات
- Envoy 1.17+
- Istio أو أي نوع آخر من شبكات الخدمة
- اعتماديات grpc
يتم إدارة الاعتماديات باستخدام go.mod
.
كيفية عمل البرنامج الوسيط
- يقوم العميل بإجراء طلب HTTP.
- يقوم وكيل Envoy بإرسال الطلب إلى خادم gRPC.
- يقوم خادم gRPC بتفويض الطلب بناءً على سياسات casbin.
- إذا تم التفويض، يتم تمرير الطلب؛ وإلا، يتم رفضه.
يعتمد خادم gRPC على بروتوكول البافر من 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);
}
من الملف البروتو السابق، نحتاج إلى استخدام خدمة Check()
في خادم التفويض.
الاستخدام
- تحديد سياسات Casbin في ملفات التكوين باتباع هذا الدليل.
يمكنك التحقق/اختبار سياساتك باستخدام casbin-editor عبر الإنترنت.
- ابدأ خادم المصادقة بتشغيل:
go build .
./authz
- تحميل تكوين Envoy:
envoy -c authz.yaml -l info
بمجرد بدء Envoy، سيقوم بتعترض الطلبات لعملية التفويض.
التكامل مع Istio
لكي يعمل هذا البرنامج الوسيط، تحتاج إلى إرسال رؤوس مخصصة تحتوي على أسماء المستخدمين في رمز JWT أو الرؤوس. يمكنك الرجوع إلى وثائق Istio الرسمية لمزيد من المعلومات حول تعديل Request Headers
.