الاستيثاق والتفويض هما جزء كبيران من لغز الأمن الذي يجب حلهما من قبل مهندسي السحاب ومهندسي DevOps. في هذه المدونة، سننظر بالتحديد إلى كيفية تحقيق التفويض/التحكم في الوصول؛ أي الإجراءات التي يستطيع الكيان المصادق عليه أن ينفذها في شبكة خدمات Istio. يساعد هذا في تأمين البنية التحتية بمنع الإجراءات التي تحمل مقصد خبيث.
يمكن تحديد التفويض في شبكة الخدمات باستخدام سياسات OPA. OPA هو آلية تساعد فريق DevOps في تحديد وتطبيق سياسات التفويض لحمولات Kubernetes. في هذه القطعة، سنرى:
- ما هو OPA
- السبب في أن يتمدد OPA مع شبكة خدمات Istio
- كيفية تفويض Istio وOPA للطلبات
- الخطوات التي يمكن متابعتها لتمدد OPA مع Istio
ما هو OPA؟
OPA (مختصر لـ “Open Policy Agent”) هو محرك تطبيق السياسات المفتوح المصدر ومنغول، يسمح لمهندسي DevOps بتحديد السياسة ككود باستخدام لغة تعريفية عالية المستوى تسمى Rego. يساعد OPA في التحديد والتطبيق السياسيات المركزية عبر الطاقة بينما يخلف مهندسي التطوير من كتابة سياسات التفويض في شفرة التطبيق. إليك كيفية عمل OPA (يرجع إلى الشكل 1):
- يتلقى التطبيق/الخدمة الطلب.
- يرسل الخدمة الطلب التفويض الى OPA بصيغة JSON.
- يتحقق OPA من الطلب بمقارنة بالسياسات التفويض المحددة.
- يتخذ OPA القرار ويرجع الرد التفويض (ALLOW/DENY) إلى الخدمة بصيغة JSON.
رسم 1: تداول ال solicitud de autorización con OPA
تلاحظ أنه ليس على شكل تطبيق مكتوب من قبل مطور سيقوم بإرسال ال solicitud de autorización: يمكن أن يكون Argo CD أو مورد ال API Gateway Kubernetes أو Terraform أو Prometheus أو أي شيء آخر لأن OPA هو محرك توجيه السياسات العام. (لقد ذكرت ورسمت تطبيقًا في قمة Kubernetes هنا لأغراض الاسهولة والفهم الأفضل.)
لماذا تراكم OPA مع Istio?
Istio له نظام تأمين التأكيد من القوة. ومع ذلك فإن وجود محرك تنظيم السياسات المخصص مثل OPA بجانب شبكة Istio الخاصة له من المزايا:
- نظام إدارة مركزي لتعريف وتنفيذ السياسات: يجعل من السهل للموظفين التنفيذيين إدارة سياسات التأكيد المركزية لكل مجموعة الأعمال. هذا يشمل العمليات المشدودة والغير مشدودة، وأيضًا تأكيد التأكيد (سياسة تمنع التنفيذ في الجمعة، على سبيل المثال).
- المرونة والتحديدة الأكثر في تعريف السياسات: إذا نظرتم إلى الجدول أسفل (رسم 2)، يبين أن قاعدة Istio التأكيد قادرة على عمل كثير وتطابق من خلال تعريف ال solicitud بواسطة مجموعة واسعة من الحقول من مصادر مختلفة. ومع ذلك قاعدة تعريف Istio AuthorizationPolicy CRD قد يكون محدودًا في تكوين ال solicitud HTTP أو البيانات السياسية في الحقول، لذا يمكن استخدام OPA. بخلاف Istio، يمكن أن يستخدم OPA أي بيانات لتقييم السياسات.
- تكوين تأمين التأكيد ال
رسم بياني 2: مقارنة جدولية بين إستيو وتوافر OPA للتصرفات (مصدر)
كيف يتم توفير الطلبات بواسطة إستيو وOPA
يمكن للفريق التطويري الاستخدام من خلال خدمة منفصلة تمامًا أو كمحتوى صغير بجوار المرشّح Envoy والجهاز التطويري في بود. تقنية المحتوى الصغير الأفضل لخفض التأخير.
يتوجب إدماج المحتويات الزائدة في البود التطويري كما يحدث مع مرشّح إستيو Envoy. يمكننا إعداد البوابة التغييرية التي تحمل قواعد التصرفات التي تحتوي على القواعد التقنية; سيتم توفير نفس الإعدادات وقواعد AuthZ المحددة في الConfigMap لكل بود محتوى صغير في الأسماك.
بمجرد إدماج البوابة التغييرية، سيقوم مرشّح Envoy بإرسال طلبات التصرفات الى OPA للقرارات التصرفية حين يتلقى الخدمة طلبًا:
رسم بياني 3: عملية توفير إستيو-OPA للتصرفات
إذا كان لا يريد الموظفون في التطوير التوفير لكل بود محتوى صغير في نفس الأسماك وإتجاه قواعد مختلفة، فسيتوجب عمل أي من المادات التالية:
- إزالة التكoding الصلب الذي يسمح لسياسة الإدماج الحالية باستخدام قواعد معينة
- توجيه واجهة المرور التغييرية وتعطيل الإدماج الصغير على مستوى البود.
- تقدم قواعد السياسات من مزود HTTP بعيد
- تنصيب التطبيق والمكونات الجانبية في مجال مختلف مع مخطط تكوين مختلف
خطوات لتراكم Opa مع Istio: عرض ديمو
الفكرة هنا هي جعل Opa المورد الخارجي بدلاً من مرشدات المرور Envoy في الكواكب — لإجراء قرارات تحكم في الوصول.
سأستخدم التطبيق الكلاسيكي Bookinfo من مستندات Istio للعرض الديمو. سأضبط Opa مع Istio للتحكم في الوصول وسأتأكد من أنه يتم تنفيذه عن طريق إلقاء طلبات إلى bookinfo/productpage:
رسم 4: دراسة تراكم Istio-Opa
تلاحظ أن /productpage هي الواجهة التي تقوم بمكالمات داخلية إلى خدمات أخرى، مثل خدمات المراجعات والتقييمات (تشريح). سأقوم بتحميل Opa في كل بود في مجال bookinfo
؛ جميع containers Opa يربطون نفس المخطط التكويني ولا يمتلكون سياسات تسمية لأنهم يمتلكونها كلها. ستكون سلوك التطبيق الافتراضي Bookinfo
لا يتم توجيه أي تواصل HTTP للتحكم لذا سيفشل المكالمات الداخلية بسبب التحكم.
سنتبع الخطوات المعطاة بالترتيب:
- تكوين تحميل جانبي Opa
- تمكين التواصل بين وصل Istio و OPA
- توزيع 配置 OPA
- تطبيق 配置 Istio
- توزيع التطبيق واختبار إجراء تفويض Istio-OPA
المقدمة للعرض التعليمي هي أن يكون لديك Istio v1.19+ معرفي في مجموعتك. أنا أستخدم Istio v1.21.0 هنا.
يوفر OPA quickstart.yaml للتثبيت السهل. قمت بتقسيم اليامل الى ثلاثة لتسهيل الفهم: IMESH GitHub repo.
خطوة 1: تكوين تحميل المساعد الجانبي ل OPA
تطبيق opa_controller.yaml:
kubectl apply -f opa_controller.yaml
ال opa_controller.yaml
يتم توزيع كل شيء – شهادات TLS، قائمة ConfigMap تحوي سياسة التحميل، تنفيذ مسؤول الاقتراح، وتكوين موقف الاشتراك التغييري التي يستمع إليها المرشد الويب التغييري – في قاعدة اسم opa-istio
(اشارة إلى رسم 6):
- سيستمع مرشد الموقف التغييري (
opa-istio-admission-controller
) بعدها إلى عنصر تعريف معين (opa-istio-injection
) بقيمة تم تعريفها للموافقة. - يتم مناصرة المرشد الويب لل
admission-controller
، الذي يمتلك سياسة التحميل. - توجه السياسة التحميلية لل
admission-controller
كيفية تحميل المجلد الجانبي لـ OPA في الحزب.
رسم 5: تكوين تحميل المجلد الجانبي لـ OPA
الآن ، قبل تنفيذ تطبيق Bookinfo ، سنقوم بإنشاء فارعة bookinfo
ونتبع الخطوات الأخرى:
إنشاء فارعة bookinfo
بتطبيق bookinfo-ns.yaml:
kubectl apply -f bookinfo-ns.yaml
opa-istio-injection: enabled
, to auto-inject OPA sidecars.
الخطوة 2: تمكين التواصل بين مرشد Istio و OPA
تعديل معلومات Istio التنظيمية في فارعة istio-system
وإضافة extensionProviders
(opa-ext-authz-grpc
)، حتى يسمح للشبكة بالتصرفات الخارجية التأكيدية:
- نسخ
extensionProviders
من التعليمات في opa_controller.yaml. - تعديل معلومات Istio التنظيمية وإضافة
extensionProviders
في المجال الشبكي. - تأكد من تقليم التباين بشكل صحيح.
- حفظ التكوينات.
يجعل هذه الخطوة ممكنًا لـ istio-proxy
التحدث إلى حزب المجلد opa-istio
في الحزب ل solicitudes التصرفات التأكيدية.
إذا نظرتم إلى ال extensionProviders
، فهو نوع من التصفيف ExtAuthzGrpc
بفيلتر Istio بواجهة خاصة ومن ثم بنموذج وصف الخدمة والمركز المعين.
...
extensionProviders:
- name: opa-ext-authz-grpc
envoyExtAuthzGrpc:
service: opa-ext-authz-grpc.local
port: "9191"
...
الاسم والعنوان الخدمي والمنفذ لمزودي التمديدات extensionProviders
يجب أن يكونوا نفسهم في opa_authz.yaml و opa_config.yaml.
الخطوة 3: توجيه تكوين OPA
opa_config.yaml يحدد التكوينات ذات الصلة بالسياسات المفتوحة. يحتوي على opa-istio-config
و opa-policy ConfigMaps
— التي تحدد تنفيذ خدمة gRPC (envoy_ext_authz_grpc
) والسياسات التوثيقية الفعلية على التوالي.
يمكن تقسيم السياسات التوثيقية إلى جزءين: الجزء الأول يحدد الشروط التي يتم فيها إذن التوثيق أو رفضه؛ الجزء الثاني يحدد الأدوار للمستخدمين والصلاحيات لكل دور.
قد يستغرق الأمر وقتاً للتعامل مع سياسات التوثيق، لأن Rego لا يستخدم الكثير من الكلمات الرئيسية هنا. قم بتمكين إصدار جديد من Rego للحصول على الكلمات الرئيسية (مثلاً إذن إذا كانت الحالة الكلمة الرئيسية).
قم بتطبيق تكوين OPA في مساحة الاسم bookinfo
، لأنه يتم إرساله مع التطبيق:
kubectl apply -f opa_config.yaml -n bookinfo
الخطوة 4: تطبيق تكوين Istio
يحتوي ملف opa_authz.yaml على configurations ل Istio. وهو يحتوي على AuthorizationPolicy
و ServiceEntry
. تذكر أن المقدم الخاص بالسياسة التأكيدية هو opa-ext-authz-grpc
, وهو ال extensionProvider
الذي قمنا بتكوينه في الConfigMap في الخطوة 2.
بمثل الطريقة، الاسم الموجود في ال ServiceEntry
هو نفسه كما أعطى العنوان الخاص بالخدمة في ال extensionProvider
(opa-ext-authz-grpc.local
). الخدمة ال gRPC ستجري على نقطة 9191 في 127.0.0.1 الموجود على المحلي، والذي تجعل ال ServiceEntry
قابلية للوصول لل opa-istio
sidecars داخل الPod من خلال المجال الخاص بال istio-proxy
container.
قم بتنفيذ التكوين:
kubectl apply -f opa_authz.yaml -n bookinfo
الخطوة 5: تنفيذ التطبيق وفحص تكوين Istio-OPA للتأكيد السياسي.
قم بتنفيذ تطبيق Bookinfo والبورت:
kubectl apply -f /your_Istio_directory/samples/bookinfo/platform/kube/bookinfo.yaml -n bookinfo
kubectl apply -f /your_Istio_directory/samples/bookinfo/networking/bookinfo-gateway.yaml -n bookinfo
تفقد الPods في المجال bookinfo
:
kubectl get pods -n bookinfo
يمكنك رؤية أن لكل مجال 3 محتويات تشغل فيهم: التطبيق، ومعالج التوصل (istio-proxy
)، وOPA (opa-istio
) المحتويات.
حصل على عنوان IP للبورت الأساسي للوصول إلى الخدمة:
kubectl get svc -n istio-system

الآن كل شيء موجه ونحن جاهزون للتجربة لسياسات التأكيد السياسي. السياسات التي قمنا بتعريفها في opa_config.yaml هي التالية:
...
user_roles = {
"alice": ["guest"],
"bob": ["admin"]
}
role_perms = {
"guest": [
{"method": "GET", "path": "/productpage"},
],
"admin": [
{"method": "GET", "path": "/productpage"},
{"method": "GET", "path": "/api/v1/products"},
],
...
Alice مستخدمة زائرة التي يمكن إتصالها بال/productpage
فقط؛ و Bob مشرف يمكن أن تتصل بالمسارات /productpage
و /api/v1/products
. دعونا نتأكد من السياسات.
محاولة الوصول إلى /api/
curl -vvv your_istio_gateway_ip/api/v1/products -u alice:password
plaintext
يمكنكم رؤية رد الـ 403 Forbidden
لأن Alice ليس لديها الوصول إلى المسار. دعونا نحاول نفس المسار مع Bob:
curl -vvv your_istio_gateway_ip/api/v1/products -u bob:password
يظهر حالة HTTP 200 OK
ومحتوى الصفحة في نهاية الرد.
مثال لسياق السيطرة على الوصول باستخدام OPA
يمكنكم استخدام Istio’s AuthorizationPolicy CRD للتأكد من تطبيق السياسة المعروضة في العرض التوضيحي أعلاه. ليس لديكم حاجة إلى OPA. ومع ذلك، هناك حالات تحديد الصلاحيات للإستيديو كما ذكرت في الجدول في البداية. دعوني أعطيكم مثال بسيط.
فرض أن هناك تطبيق BookReviews الذي هو خدمة GraphQL، حيث يقدم المحكمون تقييمات، ويحرر وينشر المحررون تلك التقييمات، ويقرأ المستخدمون التقييمات المنشورة.
عندما يضيف محكم مراجعة كتاب إلى الخدمة، سيتم تضمين الطلب بجواهر JWT للمحكم، والتي تحتوي على المجموعات والأدوار (المحكم أو المحرر) التي ينتمي إليها المحكم. سيتضمن جسم الطلب أيضًا استعلام تغيير GraphQL ببيانات المراجعة المنشأة حديثًا.
لنقل أنك تريد التأكد من الشروط التالية:
- لا يمكن للمحكمين فقط إرسال التقييمات.
- لا يمكن للمحرر تحرير تقييم إلا إذا كان الكاتب المحكم ينتمي إلى نفس المجموعة التي يديرها.
- لا يمكن للمحررين فقط تحديد تقييم ك“جاهز للنشر”.
هنا الرسم البياني الذي يتضمن السياسات أعلاه:
سيصارع Istio’s AuthorizationPolicy في تطبيق الشروط أعلاه. السبب هو أن Istio لا يستطيع استخدام جسم الطلب من GraphQL لفحوصات الصلاحيات، وهو جسم JSON مع الجواهر JWT الضروري لتقييم السياسة.
OPA لا يملك هذه القيود. يمكنه تحميل أي بيانات للمراجعات السياسية، ويمكن للموظفين التطويريين كتابة هذه القوانين بطريقة أكثر ergonomic باستخدام Rego.
فيديو: عرض تمارين
إذا أردت مشاهدة العرض بالفعل، يرجى مراجعة الفيديو أدناه:S
دعم شركات لتكافؤ الاتصال بـ Istio
معظم الشركات تستخدم OPA لتعريف وتنفيذ سياسات التصرف المعتمدة على كل توالدها. ووجود آلية مركزية لل控制 الوصول يحسن الأمانة والقدرة المتناولة لفريقات التكنولوجيا. إلا أن ممارسي التطوير سيضيعون الوقت في تطوير سياسات التصرف في شريحة البرمجيات التي يكتبونها بلغة معينة، وهو يعرقل تنمية الكبريتية وتحريك المبادئ التجارية بسرعة أكبر.
Source:
https://dzone.com/articles/5-steps-to-integrate-istio-with-opa