استخدام عنصر تحكم الوصول المستند إلى دور Azure لتعريف الوصول إلى ملف تكوين Kubernetes في خدمة Azure Kubernetes (AKS)

يمكنك التفاعل مع نظام مجموعة Kubernetes باستخدام kubectl الأداة. يوفر Azure CLI طريقة سهلة للحصول على بيانات اعتماد الوصول وملف تكوين kubeconfig للاتصال بمجموعات AKS باستخدام kubectl. يمكنك استخدام التحكم في الوصول المستند إلى دور Azure (Azure RBAC) للحد من الأشخاص الذين يمكنهم الوصول إلى ملف kubeconfig والأذونات التي لديهم.

توضح هذه المقالة كيفية تعيين أدوار Azure التي تحد ممن يمكنهم الحصول على معلومات التكوين لنظام مجموعة AKS.

قبل البدء

  • تفترض هذه المقالة أن لديك تجمع AKS قائمًا. إذا كنت بحاجة إلى نظام مجموعة AKS، قم بإنشاء مجموعة باستخدام Azure CLI أو Azure PowerShell أو مدخل Microsoft Azure.
  • تتطلب هذه المقالة أيضا تشغيل الإصدار 2.0.65 من Azure CLI أو أحدث. قم بتشغيل az --version للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.

الأذونات المتوفرة لأدوار نظام المجموعة

عند التفاعل مع نظام مجموعة AKS باستخدام kubectl الأداة، يحدد ملف التكوين، يسمى kubeconfig، معلومات اتصال نظام المجموعة. يتم تخزين ملف التكوين هذا عادة في ~/.kube/config. يمكن تعريف مجموعات متعددة في هذا الملف kubeconfig. يمكنك التبديل بين المجموعات باستخدام kubectl config use-context الأمر .

az aks get-credentials يتيح لك الأمر الحصول على بيانات اعتماد الوصول لمجموعة AKS ودمج بيانات الاعتماد هذه في ملف kubeconfig. يمكنك استخدام Azure RBAC للتحكم في الوصول إلى بيانات الاعتماد هذه. تتيح لك أدوار Azure هذه تحديد من يمكنه استرداد ملف kubeconfig والأذونات التي لديهم داخل نظام المجموعة.

هناك دوران ل Azure يمكنك تطبيقهما على مستخدم أو مجموعة Microsoft Entra:

  • دور مسؤول نظام مجموعة خدمة Azure Kubernetes

    • يسمح بالوصول إلى Microsoft.ContainerService/managedClusters/listClusterAdminCredential/action استدعاء واجهة برمجة التطبيقات. يسرد هذا الاستدعاء API بيانات اعتماد مسؤول نظام المجموعة.
    • تنزيل kubeconfig لدور clusterAdmin.
  • دور مستخدم نظام مجموعة خدمة Azure Kubernetes

إشعار

على المجموعات التي تستخدم معرف Microsoft Entra، يكون لدى المستخدمين الذين لديهم دور clusterUser ملف kubeconfig فارغ يطالب بتسجيل الدخول. بمجرد تسجيل الدخول، يمكن للمستخدمين الوصول استنادا إلى إعدادات المستخدم أو المجموعة الخاصة بهم في Microsoft Entra. المستخدمون الذين لديهم دور clusterAdmin لديهم حق الوصول إلى المسؤول.

على المجموعات التي لا تستخدم معرف Microsoft Entra، يكون لدور clusterUser نفس تأثير دور نظام المجموعة مسؤول.

تعيين أذونات الأدوار لمستخدم أو مجموعة

لتعيين أحد الأدوار المتوفرة، تحتاج إلى الحصول على معرف المورد لمجموعة AKS ومعرف حساب مستخدم Microsoft Entra أو المجموعة باستخدام الخطوات التالية:

  1. احصل على معرف مورد نظام المجموعة باستخدام az aks show الأمر لنظام المجموعة المسمى myAKSCluster في مجموعة موارد myResourceGroup . توفير اسم مجموعة الموارد ونظام المجموعة الخاصة بك حسب الحاجة.
  2. az account show استخدم الأمرين و az ad user show للحصول على معرف المستخدم.
  3. تعيين دور باستخدام az role assignment create الأمر .

يعين المثال التالي دور مسؤول نظام مجموعة خدمة Azure Kubernetes إلى حساب مستخدم فردي:

# Get the resource ID of your AKS cluster
AKS_CLUSTER=$(az aks show --resource-group myResourceGroup --name myAKSCluster --query id -o tsv)

# Get the account credentials for the logged in user
ACCOUNT_UPN=$(az account show --query user.name -o tsv)
ACCOUNT_ID=$(az ad user show --id $ACCOUNT_UPN --query objectId -o tsv)

# Assign the 'Cluster Admin' role to the user
az role assignment create \
    --assignee $ACCOUNT_ID \
    --scope $AKS_CLUSTER \
    --role "Azure Kubernetes Service Cluster Admin Role"

إذا كنت تريد تعيين أذونات لمجموعة Microsoft Entra، فقم بتحديث المعلمة الموضحة --assignee في المثال السابق باستخدام معرف الكائن للمجموعة بدلا من المستخدم.

للحصول على معرف الكائن لمجموعة، استخدم az ad group show الأمر . يحصل الأمر التالي على معرف الكائن لمجموعة Microsoft Entra المسماة appdev:

az ad group show --group appdev --query objectId -o tsv

هام

في بعض الحالات، مثل مستخدمي Microsoft Entra الضيوف، يختلف user.name في الحساب عن userPrincipalName.

$ az account show --query user.name -o tsv
user@contoso.com

$ az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv
user_contoso.com#EXT#@contoso.onmicrosoft.com

في هذه الحالة، قم بتعيين قيمة ACCOUNT_UPN إلى userPrincipalName من مستخدم Microsoft Entra. على سبيل المثال، إذا كان حسابك user.name هو user@contoso.com، فسيبدو هذا الإجراء مثل المثال التالي:

ACCOUNT_UPN=$(az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv)

الحصول على معلومات التكوين والتحقق منها

بمجرد تعيين الأدوار، استخدم az aks get-credentials الأمر للحصول على تعريف kubeconfig لنظام مجموعة AKS. يحصل المثال التالي على بيانات اعتماد --admin، والتي تعمل بشكل صحيح إذا تم منح المستخدم دور مسؤول نظام المجموعة:

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --admin

يمكنك بعد ذلك استخدام kubectl config view الأمر للتحقق من أن سياق نظام المجموعة يظهر أنه تم تطبيق معلومات تكوين المسؤول.

$ kubectl config view

يجب أن يبدو الإخراج مشابها لإخراج المثال التالي:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://myaksclust-myresourcegroup-19da35-4839be06.hcp.eastus.azmk8s.io:443
  name: myAKSCluster
contexts:
- context:
    cluster: myAKSCluster
    user: clusterAdmin_myResourceGroup_myAKSCluster
  name: myAKSCluster-admin
current-context: myAKSCluster-admin
kind: Config
preferences: {}
users:
- name: clusterAdmin_myResourceGroup_myAKSCluster
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    token: e9f2f819a4496538b02cefff94e61d35

إزالة أذونات وصول الدور

لإزالة تعيينات الأدوار، استخدم az role assignment delete الأمر . حدد معرف الحساب ومعرف مورد نظام المجموعة الذي حصلت عليه في الخطوات السابقة. إذا قمت بتعيين الدور إلى مجموعة بدلا من مستخدم، فحدد معرف كائن المجموعة المناسب بدلا من معرف كائن الحساب للمعلمة --assignee .

az role assignment delete --assignee $ACCOUNT_ID --scope $AKS_CLUSTER

الخطوات التالية

لتحسين الأمان في الوصول إلى مجموعات AKS، قم بدمج مصادقة Microsoft Entra.