استخدام التحكم في الوصول المستند إلى دور 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

  1. إنشاء مجموعة موارد Azure باستخدام az group create الأمر .

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=<azure-region>
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. إنشاء نظام مجموعة 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 يسمح للمستخدم الفائق بالوصول إلى تنفيذ أي إجراء على أي مورد. يعطي التحكم الكامل في كل مورد في مجموعة أجهزة الكمبيوتر وفي كافة مساحات الأسماء.

إنشاء تعيينات الدور للوصول إلى نظام المجموعة

  1. احصل على معرف مورد AKS باستخدام az aks show الأمر .

    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
  2. إنشاء تعيين دور باستخدام 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.

  1. لإنشاء تعريفات الأدوار المخصصة الخاصة بك، انسخ الملف التالي، واستبدل <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>"
        ]
    }
    
  2. إنشاء تعريف الدور باستخدام az role definition create الأمر ، وتعيين --role-definition إلى الملف الذي deploy-view.json قمت بإنشائه في الخطوة السابقة.

    az role definition create --role-definition @deploy-view.json 
    
  3. تعيين تعريف الدور إلى مستخدم أو هوية أخرى باستخدام az role assignment create الأمر .

    az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

استخدام التحكم في الوصول استنادًا إلى الدور Azure للحصول على تخويل Kuberneteskubectl

  1. تأكد من أن لديك الدور المضمن لمستخدم نظام مجموعة خدمة Azure Kubernetes، ثم احصل على kubeconfig لنظام مجموعة AKS باستخدام az aks get-credentials الأمر .

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  2. يمكنك الآن استخدام 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 أو الاستفادة من تسجيل الدخول الأحادي عبر مجموعات متعددة دون الحاجة إلى تسجيل الدخول إلى مجموعة جديدة.

  1. kubelogin استخدم المكون الإضافي عن طريق تشغيل الأمر التالي:

    export KUBECONFIG=/path/to/kubeconfig
    kubelogin convert-kubeconfig
    
  2. يمكنك الآن استخدام 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
    

تنظيف الموارد

حذف تعيين الدور

  1. سرد تعيينات الأدوار باستخدام az role assignment list الأمر .

    az role assignment list --scope $AKS_ID --query [].id --output tsv
    
  2. احذف تعيينات الأدوار باستخدام 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، راجع: