تأمين مجموعات Azure Kubernetes Service (AKS) باستخدام نهج Azure
يمكنك تطبيق نهج الأمان المضمنة وفرضها على مجموعات Azure Kubernetes Service (AKS) باستخدام نهج Azure. يساعد نهج Azure على فرض المعايير التنظيمية وتقييم التوافق على نطاق واسع. بعد تثبيت الوظيفة الإضافية لنهج Azure ل AKS، يمكنك تطبيق تعريفات نهج فردية أو مجموعات من تعريفات النهج تسمى المبادرات (تسمى أحيانا مجموعات النهج) على مجموعتك. راجع التعريفات المضمنة لنهج Azure ل AKS للحصول على قائمة كاملة بتعريفات نهج مبادرة AKS.
توضح هذه المقالة كيفية تطبيق تعريفات النهج على نظام المجموعة الخاصة بك والتحقق من أن يتم فرض هذه التعيينات.
المتطلبات الأساسية
- تفترض هذه المقالة أن لديك مجموعة AKS موجودة. إذا كنت بحاجة إلى نظام مجموعة AKS، يمكنك إنشاء مجموعة باستخدام Azure CLI أو Azure PowerShell أو مدخل Azure.
- تحتاج إلى وظيفة Azure Policy الإضافية ل AKS المثبتة على نظام مجموعة AKS.
تعيين التعريف أو المبادرة لخدمة النهج المضمَّن
يمكنك تطبيق تعريف نهج أو مبادرة في مدخل Microsoft Azure باستخدام الخطوات التالية:
- انتقل إلى خدمة Azure Policy في مدخل Microsoft Azure تسمى Policy.
- في الجزء الأيسر من صفحة خدمة نهج Azure، حدد Definitions.
- ضمن الفئات، حدد
Kubernetes
. - اختر تعريف الخدمة أو المبادرة التي تريد تطبيقها. على سبيل المثال، حدد مبادرة معايير أساس أمان نظام مجموعة Kubernetes لأحمال العمل المستندة إلى Linux.
- حدد تعيين.
- قم بتعيين Scope إلى مجموعة الموارد لمجموعة AKS مع تمكين الوظيفة الإضافية Azure Policy.
- حدد صفحة المعلمات وقم بتحديثالتأثير من
audit
إلى حظر توزيعات النشر الجديدة التي تنتهكdeny
مبادرة الخط الأساسي. يمكنك أيضا إضافة مساحات أسماء إضافية لاستبعادها من التقييم. على سبيل المثال، احتفظ بالقيم الافتراضية. - حدد Review + create>Create لإرسال تعيين النهج.
قم بإنشاء وتعيين تعريف النهج المخصص
يسمح لك النهج المخصص بتعريف قواعد استخدام Azure. على سبيل المثال، يمكنك فرض الأنواع التالية من القواعد:
- الممارسات الأمنية
- إدارة التكلفة
- قواعد خاصة بالمؤسسة (مثل التسمية أو المواقع)
قبل إنشاء النهج المخصص، تحقق من قائمة الأنماط والعينات الشائعة لمعرفة ما إذا كانت حالتك مغطاة بالفعل.
تعريفات النهج المخصصة مكتوبة في JSON. لمعرفة المزيد حول إنشاء النهج المخصص، راجع بنية تعريف نهج خدمة Azureوإنشاء تعريف النهج المخصص.
إشعار
يستخدم نهج Azure الآن خاصية جديدة تعرف باسم templateInfo تسمح لك بتعريف نوع المصدر لقالب القيد. عند تعريف templateInfo في تعريفات النهج، لا يتعين عليك تعريف constraintTemplate أو خصائص القيد. لا تزال بحاجة إلى تعريف apiGroups والأنواع. لمزيد من المعلومات حول هذا الموضوع، راجع فهم تأثيرات نهج Azure.
بمجرد إنشاء تعريف النهج المخصص، راجع تعيين تعريف نهج لمعاينة خطوة بخطوة لتعيين النهج إلى مجموعة Kubernetes الخاصة بك.
التحقق من صحة تشغيل نهج Azure
تأكد من تطبيق تعيينات النهج على نظام المجموعة باستخدام الأمر التالي
kubectl get
.kubectl get constrainttemplates
إشعار
قد تستغرق تعيينات النهج ما يصل إلى 20 دقيقة للمزامنة في كل نظام مجموعة.
يجب أن يكون الإخراج مشابها لإخراج المثال التالي:
NAME AGE k8sazureallowedcapabilities 23m k8sazureallowedusersgroups 23m k8sazureblockhostnamespace 23m k8sazurecontainerallowedimages 23m k8sazurecontainerallowedports 23m k8sazurecontainerlimits 23m k8sazurecontainernoprivilege 23m k8sazurecontainernoprivilegeescalation 23m k8sazureenforceapparmor 23m k8sazurehostfilesystem 23m k8sazurehostnetworkingports 23m k8sazurereadonlyrootfilesystem 23m k8sazureserviceallowedports 23m
التحقق من الرفض المميز
دعونا ننظر إلى اختبار أول ما يحدث عند جدولة سياق الأمان من privileged: true
. من هذا السياق الأمني تصعد الامتيازات. لا تسمح المبادرة بالقرون المميزة، لذلك يتم رفض الطلب، ما يؤدي إلى رفض النشر.
أنشئ ملفا باسم
nginx-privileged.yaml
والصقه في بيان YAML التالي.apiVersion: v1 kind: Pod metadata: name: nginx-privileged spec: containers: - name: nginx-privileged image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine securityContext: privileged: true
إنشاء الجراب باستخدام
kubectl apply
الأمر وتحديد اسم بيان YAML الخاص بك.kubectl apply -f nginx-privileged.yaml
كما هو متوقع، فشل جدولة الجراب، كما هو موضح في إخراج المثال التالي:
Error from server ([denied by azurepolicy-container-no-privilege-00edd87bf80f443fa51d10910255adbc4013d590bec3d290b4f48725d4dfbdf9] Privileged container is not allowed: nginx-privileged, securityContext: {"privileged": true}): error when creating "privileged.yaml": admission webhook "validation.gatekeeper.sh" denied the request: [denied by azurepolicy-container-no-privilege-00edd87bf80f443fa51d10910255adbc4013d590bec3d290b4f48725d4dfbdf9] Privileged container is not allowed: nginx-privileged, securityContext: {"privileged": true}
لا تصل القرن إلى مرحلة الجدولة، لذلك لا توجد موارد لحذفها قبل الانتقال.
اختبار إنشاء قرن غير مبرمج
في المثال السابق، حاولت صورة الحاوية تلقائيًا استخدام الجذر لربط NGINX إلى المنفذ 80. ترفض مبادرة النهج هذا الطلب، لذلك يفشل بدء تشغيل الحاوية. الآن، دعونا نحاول تشغيل نفس جراب NGINX دون وصول متميز.
أنشئ ملفا باسم
nginx-unprivileged.yaml
والصقه في بيان YAML التالي.apiVersion: v1 kind: Pod metadata: name: nginx-unprivileged spec: containers: - name: nginx-unprivileged image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
إنشاء الجراب باستخدام
kubectl apply
الأمر وتحديد اسم بيان YAML الخاص بك.kubectl apply -f nginx-unprivileged.yaml
تحقق من حالة الجراب باستخدام
kubectl get pods
الأمر .kubectl get pods
يجب أن يكون الإخراج مشابها للإخراج المثال التالي، والذي يظهر أن الجراب تمت جدولته بنجاح ولديه حالة تشغيل:
NAME READY STATUS RESTARTS AGE nginx-unprivileged 1/1 Running 0 18s
يوضح هذا المثال مبادرة الأساس التي تؤثر فقط على عمليات التوزيع التي تنتهك النهج في المجموعة. تستمر عمليات التوزيع المسموح بها في الوظيفة.
احذف حاوية NGINX غير المميزة
kubectl delete
باستخدام الأمر وحدد اسم بيان YAML الخاص بك.kubectl delete -f nginx-unprivileged.yaml
تعطيل النهج أو مبادرة
يمكنك إزالة مبادرة الأساس في مدخل Microsoft Azure باستخدام الخطوات التالية:
- انتقل إلى جزء النهج على مدخل Microsoft Azure.
- حدد الواجبات.
- حدد الزر ... بجوار معايير أساس أمان مجموعة Kubernetes لمبادرة حمل العمل المستندة إلى Linux.
- حدد حذف التعيين.
الخطوات التالية
لمزيد من المعلومات حول كيفية عمل Azure Policy، راجع المقالات التالية:
- نظرة عامة على Azure Policy
- مبادرات وسياسات نهج Azure ل AKS
- إزالة الوظيفة الإضافية لنهج Azure.
Azure Kubernetes Service