استخدام التحكم في الوصول المستند إلى دور Azure لتخويل Kubernetes
تتناول هذه المقالة كيفية استخدام Azure RBAC لتخويل Kubernetes، والذي يسمح بالإدارة الموحدة والتحكم في الوصول عبر موارد Azure وAKS وموارد Kubernetes. لمزيد من المعلومات، راجع Azure RBAC لتخويل Kubernetes.
إشعار
عند استخدام المصادقة المتكاملة بين معرف Microsoft Entra وAKS، يمكنك استخدام مستخدمي Microsoft Entra أو المجموعات أو أساسيات الخدمة كمواضيع في التحكم في الوصول المستند إلى الدور في Kubernetes (Kubernetes RBAC). باستخدام هذه الميزة، لا تحتاج إلى إدارة هويات المستخدم وبيانات الاعتماد الخاصة ب Kubernetes بشكل منفصل. ومع ذلك، لا تزال بحاجة إلى إعداد وإدارة Azure RBAC وKubernetes RBAC بشكل منفصل.
قبل البدء
- تحتاج إلى تثبيت الإصدار 2.24.0 من Azure CLI أو إصدار أحدث وتكوينه. قم بتشغيل
az --version
للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI. - تحتاج إلى
kubectl
، مع إصدار الحد الأدنى من 1.18.3. - تحتاج إلى تمكين تكامل Microsoft Entra المدار على مجموعتك قبل أن تتمكن من إضافة Azure RBAC لتخويل Kubernetes. إذا كنت بحاجة إلى تمكين تكامل Microsoft Entra المدار، فشاهد استخدام معرف Microsoft Entra في AKS.
- إذا كان لديك CRDs وتصنع تعريفات أدوار مخصصة، فإن الطريقة الوحيدة لتغطية CRDs اليوم هي استخدام
Microsoft.ContainerService/managedClusters/*/read
. بالنسبة للعناصر المتبقية، يمكنك استخدام مجموعات واجهة برمجة التطبيقات المحددة، مثلMicrosoft.ContainerService/apps/deployments/read
. - قد تستغرق تعيينات الأدوار الجديدة ما يصل إلى خمس دقائق لنشرها وتحديثها بواسطة خادم التخويل.
- يتطلب Azure RBAC لتخويل Kubernetes أن مستأجر Microsoft Entra الذي تم تكوينه للمصادقة هو نفس المستأجر للاشتراك الذي يحتوي على نظام مجموعة AKS الخاص بك.
إنشاء نظام مجموعة AKS جديد مع تكامل Microsoft Entra المدار وAzure RBAC لتخويل Kubernetes
إنشاء مجموعة موارد Azure باستخدام
az group create
الأمر .export RESOURCE_GROUP=<resource-group-name> export LOCATION=<azure-region> az group create --name $RESOURCE_GROUP --location $LOCATION
إنشاء نظام مجموعة AKS مع تكامل Microsoft Entra المدار وAzure RBAC لتخويل Kubernetes باستخدام
az aks create
الأمر .export CLUSTER_NAME=<cluster-name> az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-aad \ --enable-azure-rbac \ --generate-ssh-keys
يجب أن يبدو الإخراج مشابها لإخراج المثال التالي:
"AADProfile": { "adminGroupObjectIds": null, "clientAppId": null, "enableAzureRbac": true, "managed": true, "serverAppId": null, "serverAppSecret": null, "tenantId": "****-****-****-****-****" }
تمكين Azure RBAC على مجموعة AKS موجودة
تمكين Azure RBAC لتخويل Kubernetes على مجموعة AKS موجودة باستخدام
az aks update
الأمر مع العلامة--enable-azure-rbac
.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
تعطيل Azure RBAC لتخويل Kubernetes من نظام مجموعة AKS
قم بإزالة Azure RBAC لتخويل Kubernetes من مجموعة AKS موجودة باستخدام
az aks update
الأمر مع العلامة--disable-azure-rbac
.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
أدوار AKS المضمنة
توفر AKS الأدوار المضمنة التالية:
الدور | الوصف |
---|---|
قارئ RBAC لخدمة Azure Kubernetes | يسمح بالوصول للقراءة فقط لرؤية معظم العناصر في مساحة الاسم. لا يسمح بعرض الأدوار أو روابط الأدوار. لا يسمح هذا الدور بعرض Secrets ، نظرا لأن قراءة محتويات الأسرار تمكن الوصول إلى بيانات اعتماد ServiceAccount في مساحة الاسم، مما يسمح بالوصول إلى واجهة برمجة التطبيقات كأي ServiceAccount في مساحة الاسم (شكل من أشكال تصعيد الامتيازات). |
كاتب RBAC لخدمة Azure Kubernetes | يسمح بالوصول للقراءة/الكتابة إلى معظم العناصر في مساحة الاسم. لا يسمح هذا الدور بعرض الأدوار أو روابط الأدوار أو تعديلها. ومع ذلك، يسمح هذا الدور بالوصولSecrets إلى القرون وتشغيلها كأي ServiceAccount في مساحة الاسم، بحيث يمكن استخدامه للحصول على مستويات الوصول واجهة برمجة التطبيقات من أي ServiceAccount في مساحة الاسم. |
Azure Kubernetes Service RBAC Admin | يسمح بوصول المسؤول، الذي تم منحه ضمن مساحة الاسم. يسمح بالوصول للقراءة/الكتابة في معظم الموارد في مساحة الاسم (أو نطاق الكتلة)، بما في ذلك القدرة على إنشاء أدوار وربطات الأدوار داخل مساحة الاسم. لا يسمح هذا الدور بالوصول للكتابة إلى الحصة النسبية للمورد أو إلى مساحة الاسم ذاتها. |
Azure Kubernetes Service RBAC Cluster Admin | يسمح للمستخدم الفائق بالوصول إلى تنفيذ أي إجراء على أي مورد. يعطي التحكم الكامل في كل مورد في مجموعة أجهزة الكمبيوتر وفي كافة مساحات الأسماء. |
إنشاء تعيينات الدور للوصول إلى نظام المجموعة
احصل على معرف مورد AKS باستخدام
az aks show
الأمر .AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
إنشاء تعيين دور باستخدام
az role assignment create
الأمر .<AAD-ENTITY-ID>
يمكن أن يكون اسم مستخدم أو معرف العميل لمدير الخدمة. ينشئ المثال التالي تعيين دور لدور مسؤول Azure Kubernetes Service RBAC.az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
إشعار
يمكنك إنشاء تعيينات دور Azure Kubernetes Service RBAC Reader وAzure Kubernetes Service RBAC Writer إلى مساحة اسم معينة داخل نظام المجموعة باستخدام
az role assignment create
الأمر وتعيين النطاق إلى مساحة الاسم المطلوبة.az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
إنشاء تعريفات أدوار مخصصة
يسمح المثال التالي لتعريف الدور المخصص للمستخدم بقراءة عمليات النشر فقط ولا شيء آخر. للحصول على القائمة الكاملة للإجراءات المحتملة، راجع عمليات Microsoft.ContainerService.
لإنشاء تعريفات الأدوار المخصصة الخاصة بك، انسخ الملف التالي، واستبدل
<YOUR SUBSCRIPTION ID>
بمعرف الاشتراك الخاص بك، ثم احفظه كdeploy-view.json
.{ "Name": "AKS Deployment Reader", "Description": "Lets you view all deployments in cluster/namespace.", "Actions": [], "NotActions": [], "DataActions": [ "Microsoft.ContainerService/managedClusters/apps/deployments/read" ], "NotDataActions": [], "assignableScopes": [ "/subscriptions/<YOUR SUBSCRIPTION ID>" ] }
إنشاء تعريف الدور باستخدام
az role definition create
الأمر ، وتعيين--role-definition
إلى الملف الذيdeploy-view.json
قمت بإنشائه في الخطوة السابقة.az role definition create --role-definition @deploy-view.json
تعيين تعريف الدور إلى مستخدم أو هوية أخرى باستخدام
az role assignment create
الأمر .az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
استخدام التحكم في الوصول استنادًا إلى الدور Azure للحصول على تخويل Kuberneteskubectl
تأكد من أن لديك الدور المضمن لمستخدم نظام مجموعة خدمة Azure Kubernetes، ثم احصل على kubeconfig لنظام مجموعة AKS باستخدام
az aks get-credentials
الأمر .az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
يمكنك الآن استخدام
kubectl
لإدارة نظام المجموعة الخاص بك. على سبيل المثال، يمكنك سرد العقد في نظام المجموعة باستخدامkubectl get nodes
.kubectl get nodes
مثال على الإخراج:
NAME STATUS ROLES AGE VERSION aks-nodepool1-93451573-vmss000000 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000001 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000002 Ready agent 3h6m v1.15.11
استخدام التحكم في الوصول استنادًا إلى الدور Azure للحصول على تخويل Kuberneteskubelogin
أنشأت kubelogin
AKS المكون الإضافي للمساعدة في إلغاء حظر السيناريوهات مثل عمليات تسجيل الدخول غير التفاعلية أو الإصدارات القديمة kubectl
أو الاستفادة من تسجيل الدخول الأحادي عبر مجموعات متعددة دون الحاجة إلى تسجيل الدخول إلى مجموعة جديدة.
kubelogin
استخدم المكون الإضافي عن طريق تشغيل الأمر التالي:export KUBECONFIG=/path/to/kubeconfig kubelogin convert-kubeconfig
يمكنك الآن استخدام
kubectl
لإدارة نظام المجموعة الخاص بك. على سبيل المثال، يمكنك سرد العقد في نظام المجموعة باستخدامkubectl get nodes
.kubectl get nodes
مثال على الإخراج:
NAME STATUS ROLES AGE VERSION aks-nodepool1-93451573-vmss000000 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000001 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000002 Ready agent 3h6m v1.15.11
تنظيف الموارد
حذف تعيين الدور
سرد تعيينات الأدوار باستخدام
az role assignment list
الأمر .az role assignment list --scope $AKS_ID --query [].id --output tsv
احذف تعيينات الأدوار باستخدام
az role assignment delete
الأمر .az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
حذف تعريف الدور
احذف تعريف الدور المخصص باستخدام
az role definition delete
الأمر .az role definition delete --name "AKS Deployment Reader"
حذف مجموعة الموارد ومجموعة AKS
احذف مجموعة الموارد ومجموعة AKS باستخدام
az group delete
الأمر .az group delete --name $RESOURCE_GROUP --yes --no-wait
الخطوات التالية
لمعرفة المزيد حول مصادقة AKS والتخويل وKubernetes RBAC وAzure RBAC، راجع:
Azure Kubernetes Service