Understand Azure Policy for Kubernetes clusters
تعمل سياسة Azure على توسيع Gatekeeper v3، وهو خطاف ويب لوحدة تحكم القبوللوكيل السياسة المفتوحة (OPA)، لتطبيق عمليات التنفيذ والضمانات على نطاق واسع على مجموعاتك بطريقة مركزية ومتسقة. يتيح Azure Policy إدارة حالة توافق مجموعات Kubernetes والإبلاغ عنها من مكان واحد. تسن الوظيفة الإضافية الوظائف التالية:
- يتحقق باستخدام خدمة نهج Azure من تعيينات النهج إلى المجموعة.
- ينشر تعريفات النهج في المجموعة كقالب قيدوموارد مخصصة للقيود .
- تقارير تفاصيل التدقيق والتوافق مرة أخرى إلى خدمة نهج Azure.
يدعم Azure Policy for Kubernetes بيئات المجموعات التالية:
هام
الوظائف الإضافية ل AKS Engine و Arc تمكين Kubernetes قيد المعاينة. يدعم Azure Policy for Kubernetes تجمعات عقدة Linux وتعريفات النهج المضمنة فقط (تعريفات النهج المخصصة هي ميزة معاينة عامة ). توجد تعريفات السياسة المضمنة في فئة Kubernetes . يتم إهمال تعريفات نهج المعاينة المحدودة مع تأثير EnforceOPAConstraint و EnforceRegoPolicy وفئة خدمة Kubernetes ذات الصلة.
بدلا من ذلك، استخدم تدقيق التأثيرات ورفضها باستخدام وضع Microsoft.Kubernetes.Dataموفر الموارد.
نظرة عامة
لتمكين نهج Azure واستخدامه مع مجموعة Kubernetes، اتخذ الإجراءات التالية:
قم بتكوين مجموعة Kubernetes الخاصة بك وقم بتثبيت الوظيفة الإضافية:
ملاحظة
لمعرفة المشكلات الشائعة المتعلقة بالتثبيت، راجع استكشاف الأخطاء وإصلاحها - الوظيفة الإضافية لسياسة Azure.
التقييدات
تنطبق القيود العامة التالية على الوظيفة الإضافية لنهج Azure لمجموعات Kubernetes:
- يتم دعم الوظيفة الإضافية لسياسة Azure ل Kubernetes على Kubernetes الإصدار 1.14 أو أعلى.
- لا يمكن نشر الوظيفة الإضافية لسياسة Azure ل Kubernetes إلا في تجمعات عقدة Linux.
- يتم دعم تعريفات السياسة المضمنة فقط. تعد تعريفات النهج المخصص ميزة معاينة عامة .
- الحد الأقصى لعدد القرون التي تدعمها الوظيفة الإضافية Azure Policy: 10,000
- الحد الأقصى لعدد السجلات غير المتوافقة لكل بوليصة لكل مجموعة: 500
- الحد الأقصى لعدد السجلات غير المتوافقة لكل اشتراك: 1 مليون
- لا يتم دعم عمليات تثبيت Gatekeeper خارج الوظيفة الإضافية "نهج Azure". قم بإزالة تثبيت أي مكونات مثبتة بواسطة تثبيت Gatekeeper سابق قبل تمكين الوظيفة الإضافية Azure Policy.
- لا تتوفر أسباب عدم الامتثال لوضع
Microsoft.Kubernetes.Dataموفر الموارد. استخدم تفاصيل المكون. - لا يتم دعم الإعفاءات على مستوى المكونات لأوضاع موفر الموارد.
تنطبق القيود التالية فقط على الوظيفة الإضافية لنهج Azure ل AKS:
- لا يمكن تمكين كل من نهج أمان AKS Pod والوظيفة الإضافية نهج Azure ل AKS. لمزيد من المعلومات، راجع قيود أمان AKS pod.
- يتم استبعاد مساحات الأسماء تلقائيا بواسطة الوظيفة الإضافية لسياسة Azure للتقييم: kube-systemوgatekeeper-systemوaks-periscope.
التوصيات
فيما يلي توصيات عامة لاستخدام الوظيفة الإضافية نهج Azure:
تتطلب الوظيفة الإضافية لنهج Azure تشغيل ثلاثة مكونات Gatekeeper: جراب تدقيق واحد ونسختان متماثلتان من جراب webhook. تستهلك هذه المكونات المزيد من الموارد مع زيادة عدد موارد Kubernetes وتعيينات السياسة في المجموعة ، الأمر الذي يتطلب عمليات تدقيق وإنفاذ.
- لأقل من 500 جراب في مجموعة واحدة بحد أقصى 20 قيدا : وحدتا vCPU وذاكرة 350 ميغابايت لكل مكون.
- لأكثر من 500 جراب في مجموعة واحدة بحد أقصى 40 قيدا : ثلاث وحدات vCPU وذاكرة 600 ميجابايت لكل مكون.
لا تدعم Windows القرون سياقات الأمان. وبالتالي ، لا يمكن تصعيد بعض تعريفات Azure Policy ، مثل عدم السماح بامتيازات الجذر ، في Windows pods وتنطبق فقط على قرون Linux.
تنطبق التوصية التالية فقط على AKS والوظيفة الإضافية لنهج Azure:
- استخدم تجمع عقدة النظام مع
CriticalAddonsOnlyتلوث لجدولة قرون Gatekeeper. لمزيد من المعلومات، راجع استخدام تجمعات عقدة النظام. - تأمين حركة المرور الصادرة من مجموعات AKS الخاصة بك. لمزيد من المعلومات، راجع التحكم في حركة مرور الخروج لعقد نظام المجموعة.
- إذا تم تمكين المجموعة، تقوم
aad-pod-identityقرون الهوية المدارة للعقدة (NMI) بتعديل عناوين IP الخاصة بالعقد لاعتراض المكالمات إلى نقطة نهاية بيانات تعريف مثيل Azure. يعني هذا التكوين أن أي طلب يتم إجراؤه إلى نقطة نهاية بيانات التعريف يتم اعتراضه بواسطة NMI حتى إذا لم يتم استخدام الكبسولةaad-pod-identity. يمكن تكوين AzurePodIdentityException CRD لإعلامaad-pod-identityأن أي طلبات إلى نقطة نهاية بيانات التعريف التي تنشأ من جراب يطابق التسميات المعرفة في CRD يجب أن تكون قريبة دون أي معالجة في NMI. يجب استبعاد وحدات pod ذات تسميةkubernetes.azure.com/managedby: aksفي مساحة اسم kube-system فيaad-pod-identityمن خلال تكوين AzurePodIdentityException CRD. لمزيد من المعلومات، راجع تعطيل aad-pod-identity لـ pod أو تطبيق معين. لتكوين استثناء، قم بتثبيت YAML استثناء هيئة التصنيع العسكري.
تثبيت الوظيفة الإضافية لنهج Azure ل AKS
قبل تثبيت الوظيفة الإضافية نهج Azure أو تمكين أي من ميزات الخدمة، يجب أن يقوم اشتراكك بتمكين موفري موارد Microsoft.PolicyInsights .
تحتاج إلى الإصدار 2.12.0 من Azure CLI أو تثبيتها وتكوينها لاحقًا. قم بتشغيل
az --versionللعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع Install the Azure CLI.قم بتسجيل موفري الموارد وميزات الإصدار الأولي.
مدخل Azure:
سجل موفري موارد Microsoft.PolicyInsights . لمعرفة الخطوات، راجع موفري الموارد وأنواعها.
Azure CLI:
# Log in first with az login if you're not using Cloud Shell # Provider register: Register the Azure Policy provider az provider register --namespace Microsoft.PolicyInsights
إذا تم تثبيت تعريفات نهج المعاينة المحدودة، فقم بإزالة الوظيفة الإضافية باستخدام الزر تعطيل في مجموعة AKS ضمن صفحة النهج .
يجب أن تكون مجموعة AKS الإصدار 1.14 أو أعلى. استخدم البرنامج النصي التالي للتحقق من صحة إصدار نظام مجموعة AKS الخاص بك:
# Log in first with az login if you're not using Cloud Shell # Look for the value in kubernetesVersion az aks listقم بتثبيت الإصدار 2.12.0 أو إصدار أحدث من Azure CLI. لمزيد من المعلومات، راجع تثبيت Azure CLI.
بمجرد اكتمال خطوات المتطلبات الأساسية المذكورة أعلاه، قم بتثبيت الوظيفة الإضافية نهج Azure في مجموعة AKS التي تريد إدارتها.
مدخل Azure
قم بتشغيل خدمة AKS في مدخل Azure عن طريق تحديد كافة الخدمات، ثم البحث عن خدمات Kubernetes وتحديدها.
حدد إحدى مجموعات AKS الخاصة بك.
حدد السياسات على الجانب الأيمن من صفحة خدمة Kubernetes.
في الصفحة الرئيسية، حدد الزر تمكين الوظيفة الإضافية .
Azure CLI
# Log in first with az login if you're not using Cloud Shell az aks enable-addons --addons azure-policy --name MyAKSCluster --resource-group MyResourceGroup
للتحقق من نجاح تثبيت الوظيفة الإضافية وتشغيل pods azure-policy و gatekeeper ، قم بتشغيل الأمر التالي:
# azure-policy pod is installed in kube-system namespace
kubectl get pods -n kube-system
# gatekeeper pod is installed in gatekeeper-system namespace
kubectl get pods -n gatekeeper-system
أخيرا ، تحقق من تثبيت أحدث وظيفة إضافية عن طريق تشغيل أمر Azure CLI هذا ، واستبداله <rg> باسم مجموعة الموارد الخاصة بك وباسم <cluster-name> مجموعة AKS الخاصة بك: az aks show --query addonProfiles.azurepolicy -g <rg> -n <cluster-name>. يجب أن تبدو النتيجة مشابهة للمخرجات التالية:
{
"config": null,
"enabled": true,
"identity": null
}
Install Azure Policy Extension for Azure Arc enabled Kubernetes (preview)
يتيح نهج Azure ل Kubernetes إدارة حالة الامتثال لمجموعات Kubernetes والإبلاغ عنها من مكان واحد.
توضح هذه المقالة كيفية إنشاءملحق وإظهار حالة الملحقوحذف نهج Azure ل Kubernetes.
للحصول على نظرة عامة حول النظام الأساسي للملحقات، راجع ملحقات مجموعة Azure Arc.
المتطلبات الأساسية
ملاحظة: إذا كنت قد قمت بالفعل بنشر Azure Policy for Kubernetes على مجموعة Azure Arc باستخدام Helm مباشرة بدون ملحقات، فاتبع الإرشادات المدرجة لحذف مخطط Helm. بمجرد الانتهاء من الحذف ، يمكنك المتابعة بعد ذلك.
تأكد من أن مجموعة Kubernetes الخاصة بك هي توزيع مدعوم.
ملاحظة: يتم دعم نهج Azure لملحق Arc على توزيعات Kubernetes التالية.
تأكد من استيفاء جميع المتطلبات الأساسية الشائعة لملحقات Kubernetes المدرجة هنا بما في ذلك توصيل مجموعتك ب Azure Arc.
ملاحظة: يتم دعم ملحق نهج Azure لمجموعات Kubernetes التي تم تمكين Arc لها في هذه المناطق.
افتح منافذ لملحق Azure Policy. يستخدم ملحق نهج Azure هذه المجالات والمنافذ لجلب تعريفات النهج وتعييناته والإبلاغ عن توافق المجموعة مرة أخرى إلى نهج Azure.
المجال منفذ data.policy.core.windows.net443store.policy.core.windows.net443login.windows.net443dc.services.visualstudio.com443قبل تثبيت ملحق نهج Azure أو تمكين أي من ميزات الخدمة، يجب أن يقوم اشتراكك بتمكين موفري موارد Microsoft.PolicyInsights .
ملاحظة: لتمكين موفر الموارد، اتبع الخطوات الواردة في موفري الموارد وأنواعها أو قم بتشغيل الأمر Azure CLI أو Azure PowerShell:
Azure CLI
# Log in first with az login if you're not using Cloud Shell # Provider register: Register the Azure Policy provider az provider register --namespace 'Microsoft.PolicyInsights'Azure PowerShell
# Log in first with Connect-AzAccount if you're not using Cloud Shell # Provider register: Register the Azure Policy provider Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
Create Azure Policy extension
لاحظ ما يلي لإنشاء ملحق نهج Azure:
- يتم تمكين الترقية التلقائية بشكل افتراضي مما سيؤدي إلى تحديث الإصدار الثانوي من ملحق Azure Policy في حالة نشر أي تغييرات جديدة.
- سيتم نشر أي متغيرات وكيل تم تمريرها كمعلمات إلى
connectedk8sملحق نهج Azure لدعم الوكيل الصادر.
لإنشاء مثيل ملحق، بالنسبة إلى الكتلة التي تم تمكين Arc فيها، قم بتشغيل الأمر التالي الذي يحل محل <> قيمك:
az k8s-extension create --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --extension-type Microsoft.PolicyInsights --name <EXTENSION_INSTANCE_NAME>
مثال:
az k8s-extension create --cluster-type connectedClusters --cluster-name my-test-cluster --resource-group my-test-rg --extension-type Microsoft.PolicyInsights --name azurepolicy
مثال على الإخراج:
{
"aksAssignedIdentity": null,
"autoUpgradeMinorVersion": true,
"configurationProtectedSettings": {},
"configurationSettings": {},
"customLocationSettings": null,
"errorInfo": null,
"extensionType": "microsoft.policyinsights",
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-test-rg/providers/Microsoft.Kubernetes/connectedClusters/my-test-cluster/providers/Microsoft.KubernetesConfiguration/extensions/azurepolicy",
"identity": {
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": null,
"type": "SystemAssigned"
},
"location": null,
"name": "azurepolicy",
"packageUri": null,
"provisioningState": "Succeeded",
"releaseTrain": "Stable",
"resourceGroup": "my-test-rg",
"scope": {
"cluster": {
"releaseNamespace": "kube-system"
},
"namespace": null
},
"statuses": [],
"systemData": {
"createdAt": "2021-10-27T01:20:06.834236+00:00",
"createdBy": null,
"createdByType": null,
"lastModifiedAt": "2021-10-27T01:20:06.834236+00:00",
"lastModifiedBy": null,
"lastModifiedByType": null
},
"type": "Microsoft.KubernetesConfiguration/extensions",
"version": "1.1.0"
}
إظهار ملحق سياسة Azure
للتحقق من نجاح إنشاء مثيل الملحق، وفحص بيانات تعريف الملحق، قم بتشغيل الأمر التالي الذي يستبدل <> بقيمك:
az k8s-extension show --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --name <EXTENSION_INSTANCE_NAME>
مثال:
az k8s-extension show --cluster-type connectedClusters --cluster-name my-test-cluster --resource-group my-test-rg --name azurepolicy
للتحقق من نجاح تثبيت الملحق وتشغيل pods azure-policy و gatekeeper، قم بتشغيل الأمر التالي:
# azure-policy pod is installed in kube-system namespace
kubectl get pods -n kube-system
# gatekeeper pod is installed in gatekeeper-system namespace
kubectl get pods -n gatekeeper-system
حذف ملحق سياسة Azure
لحذف مثيل الملحق، قم بتشغيل الأمر التالي الذي يحل محل <> قيمك:
az k8s-extension delete --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --name <EXTENSION_INSTANCE_NAME>
Install Azure Policy Add-on Using Helm for Azure Arc enabled Kubernetes (preview)
ملاحظة
سيبدأ نموذج "رأس الوظيفة الإضافية لسياسة Azure" قريبا في الإهمال. يرجى اختيار ملحق سياسة Azure ل Azure Arc تمكين Kubernetes بدلا من ذلك.
قبل تثبيت الوظيفة الإضافية نهج Azure أو تمكين أي من ميزات الخدمة، يجب تمكين اشتراكك موفر موارد Microsoft.PolicyInsights وإنشاء تعيين دور لمبدأ خدمة نظام المجموعة.
تحتاج إلى الإصدار 2.12.0 من Azure CLI أو تثبيتها وتكوينها لاحقًا. قم بتشغيل
az --versionللعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع Install the Azure CLI.لتمكين موفر الموارد، اتبع الخطوات الواردة في موفري الموارد وأنواعها أو قم بتشغيل الأمر Azure CLI أو Azure PowerShell:
Azure CLI
# Log in first with az login if you're not using Cloud Shell # Provider register: Register the Azure Policy provider az provider register --namespace 'Microsoft.PolicyInsights'Azure PowerShell
# Log in first with Connect-AzAccount if you're not using Cloud Shell # Provider register: Register the Azure Policy provider Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
يجب أن تكون مجموعة Kubernetes الإصدار 1.14 أو أعلى.
قم بتثبيت Helm 3.
تم تمكين مجموعة Kubernetes الخاصة بك ل Azure Arc. لمزيد من المعلومات، راجع إعداد مجموعة Kubernetes إلى Azure Arc.
احصل على معرف مورد Azure المؤهل بالكامل لمجموعة Kubernetes الممكنة من Azure Arc.
افتح منافذ الوظيفة الإضافية. تستخدم الوظيفة الإضافية نهج Azure هذه المجالات والمنافذ لجلب تعريفات النهج وتعييناته والإبلاغ عن توافق المجموعة مرة أخرى إلى نهج Azure.
المجال منفذ data.policy.core.windows.net443store.policy.core.windows.net443login.windows.net443dc.services.visualstudio.com443قم بتعيين دور "Policy Insights Data Writer (Preview)" إلى مجموعة Kubernetes التي تم تمكين Azure Arc. استبدل
<subscriptionId>بمعرف الاشتراك الخاص بك، مع تمكين Azure Arc لمجموعة موارد مجموعة Kubernetes،<rg>وباسم<clusterName>مجموعة Kubernetes التي تم تمكين Azure Arc. تتبع القيم التي تم إرجاعها ل appIDوكلمة المروروالمستأجر لخطوات التثبيت.Azure CLI
az ad sp create-for-rbac --role "Policy Insights Data Writer (Preview)" --scopes "/subscriptions/<subscriptionId>/resourceGroups/<rg>/providers/Microsoft.Kubernetes/connectedClusters/<clusterName>"Azure PowerShell
$sp = New-AzADServicePrincipal -Role "Policy Insights Data Writer (Preview)" -Scope "/subscriptions/<subscriptionId>/resourceGroups/<rg>/providers/Microsoft.Kubernetes/connectedClusters/<clusterName>" @{ appId=$sp.ApplicationId;password=[System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sp.Secret));tenant=(Get-AzContext).Tenant.Id } | ConvertTo-Json
نموذج إخراج الأوامر أعلاه:
{ "appId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "password": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", "tenant": "cccccccc-cccc-cccc-cccc-cccccccccccc" }
بمجرد اكتمال خطوات المتطلبات الأساسية المذكورة أعلاه، قم بتثبيت الوظيفة الإضافية لسياسة Azure في مجموعة Kubernetes التي تم تمكين Azure Arc عليها:
إضافة الريبو الإضافي لسياسة Azure إلى Helm:
helm repo add azure-policy https://raw.githubusercontent.com/Azure/azure-policy/master/extensions/policy-addon-kubernetes/helm-chartsقم بتثبيت الوظيفة الإضافية لنهج Azure باستخدام مخطط Helm:
# In below command, replace the following values with those gathered above. # <AzureArcClusterResourceId> with your Azure Arc enabled Kubernetes cluster resource Id. For example: /subscriptions/<subscriptionId>/resourceGroups/<rg>/providers/Microsoft.Kubernetes/connectedClusters/<clusterName> # <ServicePrincipalAppId> with app Id of the service principal created during prerequisites. # <ServicePrincipalPassword> with password of the service principal created during prerequisites. # <ServicePrincipalTenantId> with tenant of the service principal created during prerequisites. helm install azure-policy-addon azure-policy/azure-policy-addon-arc-clusters \ --set azurepolicy.env.resourceid=<AzureArcClusterResourceId> \ --set azurepolicy.env.clientid=<ServicePrincipalAppId> \ --set azurepolicy.env.clientsecret=<ServicePrincipalPassword> \ --set azurepolicy.env.tenantid=<ServicePrincipalTenantId>لمزيد من المعلومات حول ما يقوم المخطط الدائم بتثبيته المكون الإضافي Helm Chart، راجع تعريف مخطط Helm الإضافي لنهج Azure على GitHub.
للتحقق من نجاح تثبيت الوظيفة الإضافية وتشغيل pods azure-policy و gatekeeper ، قم بتشغيل الأمر التالي:
# azure-policy pod is installed in kube-system namespace
kubectl get pods -n kube-system
# gatekeeper pod is installed in gatekeeper-system namespace
kubectl get pods -n gatekeeper-system
تثبيت الوظيفة الإضافية لنهج Azure لمحرك AKS (معاينة)
- تأكد من أن مجموعة Kubernetes الخاصة بك هي توزيع مدعوم.
قبل تثبيت الوظيفة الإضافية نهج Azure أو تمكين أي من ميزات الخدمة، يجب تمكين اشتراكك موفر موارد Microsoft.PolicyInsights وإنشاء تعيين دور لمبدأ خدمة نظام المجموعة.
تحتاج إلى تثبيت الإصدار 2.0.62 من Azure CLI أو إصدار أحدث وتكوينه. قم بتشغيل
az --versionللعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع Install the Azure CLI.لتمكين موفر الموارد، اتبع الخطوات الواردة في موفري الموارد وأنواعها أو قم بتشغيل الأمر Azure CLI أو Azure PowerShell:
Azure CLI
# Log in first with az login if you're not using Cloud Shell # Provider register: Register the Azure Policy provider az provider register --namespace 'Microsoft.PolicyInsights'Azure PowerShell
# Log in first with Connect-AzAccount if you're not using Cloud Shell # Provider register: Register the Azure Policy provider Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
إنشاء تعيين دور لأصل خدمة نظام المجموعة.
إذا كنت لا تعرف معرف التطبيق الأساسي لخدمة نظام المجموعة، فابحث عنه باستخدام الأمر التالي.
# Get the kube-apiserver pod name kubectl get pods -n kube-system # Find the aadClientID value kubectl exec <kube-apiserver pod name> -n kube-system cat /etc/kubernetes/azure.jsonقم بتعيين دور "Insights لكاتب بيانات النهج (معاينة)" إلى معرف التطبيق الأساسي لخدمة نظام المجموعة (القيمة aadClientID من الخطوة السابقة) باستخدام Azure CLI. استبدل
<subscriptionId>بمعرف الاشتراك الخاص بك وبمجموعة<aks engine cluster resource group>الموارد الموجودة في مجموعة Kubernetes المدارة ذاتيا في AKS Engine.az role assignment create --assignee <cluster service principal app ID> --scope "/subscriptions/<subscriptionId>/resourceGroups/<aks engine cluster resource group>" --role "Policy Insights Data Writer (Preview)"
بمجرد اكتمال خطوات المتطلبات الأساسية المذكورة أعلاه، قم بتثبيت الوظيفة الإضافية Azure Policy. يمكن أن يكون التثبيت أثناء دورة إنشاء أو تحديث محرك AKS أو كإجراء مستقل على مجموعة موجودة.
التثبيت أثناء دورة الإنشاء أو التحديث
لتمكين الوظيفة الإضافية لنهج Azure أثناء إنشاء مجموعة جديدة مدارة ذاتيا أو كتحديث لمجموعة موجودة، قم بتضمين تعريف مجموعة خصائص الإضافات لمحرك AKS.
"addons": [{ "name": "azure-policy", "enabled": true }]لمزيد من المعلومات حول، راجع الدليل الخارجي تعريف مجموعة محرك AKS.
التثبيت في مجموعة موجودة باستخدام مخططات Helm
اتبع الخطوات التالية لإعداد نظام المجموعة وتثبيت الوظيفة الإضافية:
قم بتثبيت Helm 3.
أضف ريبو سياسة Azure إلى Helm.
helm repo add azure-policy https://raw.githubusercontent.com/Azure/azure-policy/master/extensions/policy-addon-kubernetes/helm-chartsلمزيد من المعلومات، راجع مخطط Helm - دليل التشغيل السريع.
قم بتثبيت الوظيفة الإضافية باستخدام مخطط Helm. استبدل
<subscriptionId>بمعرف الاشتراك الخاص بك وبمجموعة<aks engine cluster resource group>الموارد الموجودة في مجموعة Kubernetes المدارة ذاتيا في AKS Engine.helm install azure-policy-addon azure-policy/azure-policy-addon-aks-engine --set azurepolicy.env.resourceid="/subscriptions/<subscriptionId>/resourceGroups/<aks engine cluster resource group>"لمزيد من المعلومات حول ما يقوم المخطط الدائم بتثبيته المكون الإضافي Helm Chart، راجع تعريف مخطط Helm الإضافي لنهج Azure على GitHub.
ملاحظة
نظرا للعلاقة بين الوظيفة الإضافية لنهج Azure ومعرف مجموعة الموارد، يدعم Azure Policy مجموعة AKS Engine واحدة فقط لكل مجموعة موارد.
للتحقق من نجاح تثبيت الوظيفة الإضافية وتشغيل pods azure-policy و gatekeeper ، قم بتشغيل الأمر التالي:
# azure-policy pod is installed in kube-system namespace
kubectl get pods -n kube-system
# gatekeeper pod is installed in gatekeeper-system namespace
kubectl get pods -n gatekeeper-system
لغة السياسة
يتبع هيكل لغة نهج Azure لإدارة Kubernetes بنية تعريفات النهج الموجودة. باستخدام وضع Microsoft.Kubernetes.Data"موفر الموارد" ، يتم استخدام تدقيق التأثيرات ورفضها لإدارة مجموعات Kubernetes الخاصة بك. يجب أن يوفر التدقيقوالرفض خصائص تفاصيل خاصة بالعمل مع OPA Constraint Framework و Gatekeeper v3.
كجزء من خصائص details.templateInfo أو details.constraint أو details.constraintTemplate في تعريف النهج، يقوم Azure Policy بتمرير قيمة URI أو Base64Encoded لهذه التعريفات CustomResourceDefinitions (CRD) إلى الوظيفة الإضافية. Rego هي اللغة التي تدعمها OPA و Gatekeeper للتحقق من صحة طلب إلى مجموعة Kubernetes. من خلال دعم معيار موجود لإدارة Kubernetes، يتيح Azure Policy إعادة استخدام القواعد الحالية وإقرانها ب Azure Policy للحصول على تجربة موحدة لإعداد تقارير الامتثال للسحابة. لمزيد من المعلومات، راجع ما هو Rego؟.
تعيين تعريف نهج
لتعيين تعريف نهج إلى مجموعة Kubernetes الخاصة بك، يجب تعيين عمليات تعيين نهج التحكم في الوصول المستندة إلى دور Azure (Azure RBAC) المناسبة. تحتوي أدوار Azure المضمنة " مساهم نهج الموارد " و" المالك" على هذه العمليات. لمعرفة المزيد، راجع أذونات Azure RBAC في سياسة Azure.
ملاحظة
تعريفات النهج المخصص هي ميزة معاينة عامة .
ابحث عن تعريفات النهج المضمنة لإدارة نظام المجموعة باستخدام مدخل Azure بالخطوات التالية. في حالة استخدام تعريف نهج مخصص، ابحث عنه بالاسم أو الفئة التي أنشأتها باستخدامه.
بدء تشغيل خدمة نهج Azure في مدخل Azure. حدد كافة الخدمات في الجزء الأيمن، ثم ابحث عن النهج وحدده.
في الجزء الأيسر من صفحة خدمة نهج Azure، حدد Definitions.
من مربع القائمة المنسدلة الفئة، استخدم تحديد الكل لمسح عامل التصفية ثم حدد Kubernetes.
حدد تعريف السياسة، ثم حدد الزر تعيين .
قم بتعيين النطاق إلى مجموعة الإدارة أو الاشتراك أو مجموعة الموارد الخاصة بمجموعة Kubernetes حيث سيتم تطبيق تعيين النهج.
ملاحظة
عند تعيين تعريف Azure Policy for Kubernetes، يجب أن يتضمن النطاق مورد نظام المجموعة. بالنسبة لمجموعة AKS Engine ، يجب أن يكون النطاق هو مجموعة الموارد الخاصة بالكتلة.
امنح تعيين النهج اسماووصفا يمكنك استخدامهما لتحديده بسهولة.
قم بتعيين فرض السياسة إلى إحدى القيم أدناه.
ممكن - فرض السياسة على المجموعة. يتم رفض طلبات القبول Kubernetes مع الانتهاكات.
معطل - لا تفرض السياسة على المجموعة. لا يتم رفض طلبات قبول Kubernetes مع الانتهاكات. ولا تزال نتائج تقييم الامتثال متاحة. عند طرح تعريفات نهج جديدة لتشغيل المجموعات، يكون الخيار معطل مفيدا لاختبار تعريف السياسة حيث لا يتم رفض طلبات القبول التي تحتوي على انتهاكات.
حدد "Next".
تعيين قيم المعلمات
- لاستبعاد مساحات أسماء Kubernetes من تقييم النهج، حدد قائمة مساحات الأسماء في استثناءات مساحة اسم المعلمة. يوصى باستبعاد: نظام kube، ونظامحارس البوابة، والقوس اللازوردي.
حدد Review + create.
بدلا من ذلك، استخدم البداية السريعة تعيين نهج - البوابة الإلكترونية للعثور على نهج Kubernetes وتعيينه. ابحث عن تعريف سياسة Kubernetes بدلا من نموذج "تدقيق vms".
هام
تتوفر تعريفات النهج المضمنة لمجموعات Kubernetes في الفئة Kubernetes. للحصول على قائمة بتعريفات النهج المضمنة، راجع عينات Kubernetes.
تقييم النهج
تقوم الوظيفة الإضافية بتسجيل الوصول باستخدام خدمة Azure Policy بحثا عن تغييرات في تعيينات النهج كل 15 دقيقة. أثناء دورة التحديث هذه، تتحقق الوظيفة الإضافية من وجود تغييرات. تؤدي هذه التغييرات إلى إنشاء قوالب القيود والقيود أو تحديثها أو حذفها.
في مجموعة Kubernetes، إذا كانت مساحة الاسم تحتوي على التسمية المناسبة للمجموعة، فلن يتم رفض طلبات القبول التي تحتوي على انتهاكات. ولا تزال نتائج تقييم الامتثال متاحة.
- Azure Arc-enabled Kubernetes cluster:
admission.policy.azure.com/ignore - Azure Kubernetes Service cluster:
control-plane
ملاحظة
على الرغم من أن مسؤول نظام المجموعة قد يكون لديه إذن لإنشاء وتحديث قوالب القيود وموارد القيود التي تم تثبيتها بواسطة الوظيفة الإضافية Azure Policy، إلا أن هذه السيناريوهات غير مدعومة حيث تتم الكتابة فوق التحديثات اليدوية. يستمر Gatekeeper في تقييم النهج التي كانت موجودة قبل تثبيت الوظيفة الإضافية وتعيين تعريفات نهج نهج Azure.
كل 15 دقيقة ، تستدعي الوظيفة الإضافية إجراء مسح كامل للمجموعة. بعد جمع تفاصيل الفحص الكامل وأي تقييمات في الوقت الفعلي من قبل Gatekeeper لمحاولة إجراء تغييرات على المجموعة، تقوم الوظيفة الإضافية بالإبلاغ عن النتائج مرة أخرى إلى نهج Azure لتضمينها في تفاصيل التوافق مثل أي تعيين نهج Azure. يتم إرجاع نتائج تعيينات النهج النشطة فقط خلال دورة التدقيق. يمكن أيضا اعتبار نتائج التدقيق انتهاكات مدرجة في حقل الحالة الخاص بالقيد الفاشل. للحصول على تفاصيل حول الموارد غير المتوافقة ، راجع تفاصيل المكونات لأوضاع موفر الموارد.
ملاحظة
يتضمن كل تقرير امتثال في سياسة Azure لمجموعات Kubernetes الخاصة بك جميع الانتهاكات خلال آخر 45 دقيقة. يشير الطابع الزمني إلى وقت حدوث انتهاك.
بعض الاعتبارات الأخرى:
إذا تم تسجيل اشتراك المجموعة مع Microsoft Defender for Cloud، تطبيق نهج Microsoft Defender for Cloud Kubernetes على المجموعة تلقائيا.
عند تطبيق نهج رفض على نظام مجموعة مع موارد Kubernetes الموجودة، يستمر تشغيل أي مورد موجود مسبقا غير متوافق مع النهج الجديد. عندما تتم إعادة جدولة المورد غير المتوافق على عقدة مختلفة، يقوم Gatekeeper بحظر إنشاء المورد.
عندما يكون لدى نظام مجموعة نهج رفض يتحقق من صحة الموارد، لن يرى المستخدم رسالة رفض عند إنشاء عملية نشر. على سبيل المثال، ضع في اعتبارك نشر Kubernetes الذي يحتوي على نسخ متماثلة وقرون. عندما ينفذ
kubectl describe deployment $MY_DEPLOYMENTالمستخدم ، فإنه لا يعرض رسالة رفض كجزء من الأحداث. ومع ذلك،kubectl describe replicasets.apps $MY_DEPLOYMENTترجع هذه الدالة الأحداث المقترنة بالرفض.
ملاحظة
يمكن تضمين حاويات Init أثناء تقييم السياسة. لمعرفة ما إذا كانت حاويات init مضمنة ، راجع CRD للحصول على الإعلان التالي أو إعلان مماثل:
input_containers[c] {
c := input.review.object.spec.initContainers[_]
}
تعارضات قالب القيد
إذا كانت قوالب القيود لها نفس اسم بيانات تعريف المورد، ولكن تعريف النهج يشير إلى المصدر في مواقع مختلفة، فإن تعريفات النهج تعتبر متعارضة. مثال: يشير تعريفان للنهج إلى نفس template.yaml الملف المخزن في مواقع مصادر مختلفة مثل مخزن قوالب نهج Azure (store.policy.core.windows.net) و GitHub.
عندما يتم تعيين تعريفات النهج وقوالب القيود الخاصة بها ولكن لم يتم تثبيتها بالفعل على المجموعة وتكون في حالة تعارض، يتم الإبلاغ عنها على أنها تعارض ولن يتم تثبيتها في المجموعة حتى يتم حل التعارض. وبالمثل، فإن أي تعاريف حالية للسياسات ونماذج القيود الخاصة بها موجودة بالفعل في المجموعة والتي تتعارض مع تعاريف السياسات المعينة حديثا لا تزال تعمل بشكل طبيعي. إذا تم تحديث مهمة موجودة وكان هناك فشل في مزامنة قالب القيد، أيضا وضع علامة على الكتلة كتعارض. للاطلاع على جميع رسائل التعارض، راجع أسباب الامتثال لوضع موفر موارد AKS
تسجيل الدخول
كوحدة تحكم / حاوية Kubernetes ، تحتفظ كل من pods azure-policy و gatekeeper بسجلات في مجموعة Kubernetes. يمكن الكشف عن السجلات في صفحة Insights من مجموعة Kubernetes. لمزيد من المعلومات، راجع مراقبة أداء مجموعة Kubernetes باستخدام Azure Monitor للحاويات.
لعرض سجلات الوظائف الإضافية، استخدم kubectl:
# Get the azure-policy pod name installed in kube-system namespace
kubectl logs <azure-policy pod name> -n kube-system
# Get the gatekeeper pod name installed in gatekeeper-system namespace
kubectl logs <gatekeeper pod name> -n gatekeeper-system
لمزيد من المعلومات، راجع تصحيح أخطاء حارس البوابة في وثائق حارس البوابة.
عرض القطع الأثرية ل Gatekeeper
بعد أن تقوم الوظيفة الإضافية بتنزيل تعيينات النهج وتثبيت قوالب القيود والقيود على المجموعة، فإنها تقوم بالتعليق التوضيحي على كل من معلومات نهج Azure مثل معرف تعيين النهج ومعرف تعريف النهج. لتكوين العميل لعرض القطع الأثرية ذات الصلة بالوظيفة الإضافية، اتبع الخطوات التالية:
إعداد
kubeconfigالمجموعة.بالنسبة إلى Azure Kubernetes Service cluster، استخدم Azure CLI التالية:
# Set context to the subscription az account set --subscription <YOUR-SUBSCRIPTION> # Save credentials for kubeconfig into .kube in your home folder az aks get-credentials --resource-group <RESOURCE-GROUP> --name <CLUSTER-NAME>اختبار اتصال نظام المجموعة.
قم بتشغيل الأمر
kubectl cluster-info. يؤدي التشغيل الناجح إلى استجابة كل خدمة باستخدام عنوان URL لمكان تشغيلها.
عرض قوالب قيود الوظائف الإضافية
لعرض قوالب القيود التي تم تنزيلها بواسطة الوظيفة الإضافية، قم بتشغيل kubectl get constrainttemplates.
قوالب القيود التي تبدأ ب k8sazure هي تلك المثبتة بواسطة الوظيفة الإضافية.
الحصول على تعيينات نهج Azure
لتحديد التعيين بين قالب قيد تم تنزيله إلى المجموعة وتعريف النهج، استخدم kubectl get constrainttemplates <TEMPLATE> -o yaml. تبدو النتائج مشابهة للمخرجات التالية:
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
annotations:
azure-policy-definition-id: /subscriptions/<SUBID>/providers/Microsoft.Authorization/policyDefinitions/<GUID>
constraint-template-installed-by: azure-policy-addon
constraint-template: <URL-OF-YAML>
creationTimestamp: "2021-09-01T13:20:55Z"
generation: 1
managedFields:
- apiVersion: templates.gatekeeper.sh/v1beta1
fieldsType: FieldsV1
...
<SUBID> هو معرف الاشتراك وهو معرف <GUID> تعريف السياسة المعين.
<URL-OF-YAML> هو موقع المصدر لقالب القيد الذي تم تنزيل الوظيفة الإضافية لتثبيته على المجموعة.
عرض القيود المتعلقة بقالب قيد
بمجرد حصولك على أسماء قوالب القيود التي تم تنزيلها من الوظيفة الإضافية، يمكنك استخدام الاسم للاطلاع على القيود ذات الصلة. استخدم kubectl get <constraintTemplateName> للحصول على القائمة.
تبدأ القيود المثبتة بواسطة الوظيفة الإضافية ب azurepolicy-.
عرض تفاصيل القيد
يحتوي القيد على تفاصيل حول الانتهاكات والتعيينات لتعريف السياسة وتعيينها. للاطلاع على التفاصيل، استخدم kubectl get <CONSTRAINT-TEMPLATE> <CONSTRAINT> -o yaml. تبدو النتائج مشابهة للمخرجات التالية:
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sAzureContainerAllowedImages
metadata:
annotations:
azure-policy-assignment-id: /subscriptions/<SUB-ID>/resourceGroups/<RG-NAME>/providers/Microsoft.Authorization/policyAssignments/<ASSIGNMENT-GUID>
azure-policy-definition-id: /providers/Microsoft.Authorization/policyDefinitions/<DEFINITION-GUID>
azure-policy-definition-reference-id: ""
azure-policy-setdefinition-id: ""
constraint-installed-by: azure-policy-addon
constraint-url: <URL-OF-YAML>
creationTimestamp: "2021-09-01T13:20:55Z"
spec:
enforcementAction: deny
match:
excludedNamespaces:
- kube-system
- gatekeeper-system
- azure-arc
parameters:
imageRegex: ^.+azurecr.io/.+$
status:
auditTimestamp: "2021-09-01T13:48:16Z"
totalViolations: 32
violations:
- enforcementAction: deny
kind: Pod
message: Container image nginx for container hello-world has not been allowed.
name: hello-world-78f7bfd5b8-lmc5b
namespace: default
- enforcementAction: deny
kind: Pod
message: Container image nginx for container hello-world has not been allowed.
name: hellow-world-89f8bfd6b9-zkggg
استكشاف أخطاء الوظيفة الإضافية وإصلاحها
لمزيد من المعلومات حول استكشاف أخطاء الوظيفة الإضافية Kubernetes وإصلاحها، راجع قسم Kubernetes من مقالة استكشاف أخطاء نهج Azure وإصلاحها.
للحصول على ملحق نهج Azure للمشكلات المتعلقة بملحق Arc، يرجى الاطلاع على:
للاطلاع على المشكلات المتعلقة بنهج Azure، يرجى الاطلاع على:
إزالة الوظيفة الإضافية
إزالة الوظيفة الإضافية من AKS
لإزالة الوظيفة الإضافية لسياسة Azure من مجموعة AKS الخاصة بك، استخدم إما مدخل Azure أو Azure CLI:
مدخل Azure
قم بتشغيل خدمة AKS في مدخل Azure عن طريق تحديد كافة الخدمات، ثم البحث عن خدمات Kubernetes وتحديدها.
حدد مجموعة AKS الخاصة بك حيث تريد تعطيل الوظيفة الإضافية Azure Policy.
حدد السياسات على الجانب الأيمن من صفحة خدمة Kubernetes.
في الصفحة الرئيسية، حدد الزر تعطيل الوظيفة الإضافية .
Azure CLI
# Log in first with az login if you're not using Cloud Shell az aks disable-addons --addons azure-policy --name MyAKSCluster --resource-group MyResourceGroup
إزالة الوظيفة الإضافية من Kubernetes تمكين Azure Arc
لإزالة الوظيفة الإضافية لسياسة Azure وGatekeeper من مجموعة Kubernetes التي تم تمكين Azure Arc عليها، قم بتشغيل الأمر Helm التالي:
helm uninstall azure-policy-addon
إزالة الوظيفة الإضافية من محرك AKS
لإزالة الوظيفة الإضافية لنهج Azure و Gatekeeper من مجموعة AKS Engine الخاصة بك، استخدم الطريقة التي تتوافق مع كيفية تثبيت الوظيفة الإضافية:
إذا تم تثبيته عن طريق تعيين خاصية الإضافات في تعريف نظام المجموعة لمحرك AKS:
إعادة نشر تعريف نظام المجموعة إلى AKS Engine بعد تغيير خاصية الإضافاتلسياسة azure إلى false:
"addons": [{ "name": "azure-policy", "enabled": false }]لمزيد من المعلومات، راجع محرك AKS - تعطيل الوظيفة الإضافية لنهج Azure.
إذا تم تثبيته باستخدام مخططات Helm، فقم بتشغيل الأمر Helm التالي:
helm uninstall azure-policy-addon
البيانات التشخيصية التي تم جمعها بواسطة الوظيفة الإضافية لسياسة Azure
تقوم الوظيفة الإضافية لنهج Azure ل Kubernetes بتجميع بيانات تشخيص الكتلة المحدودة. هذه البيانات التشخيصية هي بيانات تقنية حيوية تتعلق بالبرامج والأداء. يتم استخدامه بالطرق التالية:
- الحفاظ على تحديث الوظيفة الإضافية لسياسة Azure
- حافظ على الوظيفة الإضافية لسياسة Azure آمنة وموثوقة وذات أداء
- تحسين الوظيفة الإضافية لنهج Azure - من خلال التحليل المجمع لاستخدام الوظيفة الإضافية
المعلومات التي يتم جمعها بواسطة الوظيفة الإضافية ليست بيانات شخصية. يتم حاليا جمع التفاصيل التالية:
- Azure Policy Add-on agent version
- نوع شبكة نظام المجموعة
- منطقة المجموعة
- مجموعة موارد المجموعة
- معرف مورد نظام المجموعة
- معرف اشتراك المجموعة
- نظام التشغيل العنقودي (على سبيل المثال: Linux)
- المدينة العنقودية (مثال: سياتل)
- الولاية أو المقاطعة العنقودية (مثال: واشنطن)
- بلد المجموعة أو المنطقة (مثال: الولايات المتحدة)
- الاستثناءات/الأخطاء التي تواجهها الوظيفة الإضافية لنهج Azure أثناء تثبيت العامل على تقييم النهج
- عدد تعريفات نهج Gatekeeper غير المثبتة بواسطة الوظيفة الإضافية لنهج Azure
الخطوات التالية
- راجع الأمثلة في عينات نهج Azure.
- راجع هيكل تعريف السياسة.
- اطلع على فهم تأثيرات النهج.
- فهم كيفية إنشاء السياسات برمجيا.
- تعرف على كيفية الحصول على بيانات الامتثال.
- تعرّف على كيفية معالجة الموارد غير الممتثلة.
- راجع ماهية مجموعة الإدارة باستخدام تنظيم مواردك باستخدام مجموعات إدارة Azure.