استخدام هوية مدارة معينة من قبل المستخدم في خدمة Azure Kubernetes ‏(AKS)

تشرح هذه المقالة كيفية تمكين هوية مدارة معينة من قبل المستخدم على مجموعة AKS جديدة أو موجودة، والحصول على المعرف الرئيسي للهوية المدارة المعينة من قبل المستخدم، وإضافة تعيين دور للهوية المدارة المعينة من قبل المستخدم.

المتطلبات المسبقه

  • مجموعة موارد موجودة في Azure. إذا لم يكن لديك واحد، يمكنك إنشاء واحد باستخدام az group create الأمر.

    az group create \
        --name <resource-group-name> \
        --location <location>
    
  • تم تثبيت Azure CLI الإصدار 2.23.0 أو أحدث. قم بتشغيل az --version للعثور على الإصدار. إذا كنت بحاجة إلى تثبيت أو ترقية، راجع تثبيت Azure CLI.
  • لتحديث عنقود موجود لاستخدام هوية مدارة المعينة من قبل المستخدم، تحتاج إلى تثبيت Azure CLI الإصدار 2.49.0 أو أحدث.
  • تم تثبيت Terraform محليا. للحصول على تعليمات التثبيت، راجع تثبيت Terraform.

القيود

  • بمجرد إنشاء عنقود بهوية مدارة، لا يمكنك العودة لاستخدام مدير الخدمة.
  • لا يتم دعم نقل نظام مجموعة مدارة ممكنة للهوية أو ترحيلها إلى مستأجر مختلف.
  • إذا كان لدى العنقود هوية مدارة بواسطة الوحدات (aad-pod-identity) مفعلة Microsoft Entra، تقوم وحدات الهوية (NMI) Node-Managed بتعديل جداول الهوية (NMI) للعقد لاعتراض المكالمات إلى نقطة نهاية بيانات النسخة الوصفية (IMDS) Azure. يعني هذا التكوين أن أي طلب يتم إجراؤه على نقطة نهاية IMDS يتم اعتراضه بواسطة NMI، حتى إذا لم يستخدم aad-pod-identityجراب معين .
    • يمكنك تكوين تعريف المورد المخصص ل AzurePodIdentityException (CRD) لتحديد أن الطلبات إلى نقطة نهاية IMDS التي تنشأ من تسميات مطابقة البودات المحددة في CRD يجب أن تكون بروكسي دون أي معالجة في NMI. استبعاد pods النظام مع التسمية kubernetes.azure.com/managedby: aks في مساحة اسم نظام kube عن aad-pod-identity طريق تكوين CRD AzurePodIdentityException. لمزيد من المعلومات، راجع استخدم Microsoft Entra الهويات المدارة بواسطة البودات في خدمة Azure Kubernetes ‏(AKS).
    • لتكوين استثناء، قم بتثبيت mic-exception YAML.
  • مناطق USDOD Central وUSDOD East وUSGov Iowa في سحابة Azure حكومة الولايات المتحدة لا تدعم إنشاء مجموعة بهوية مدارة مخصصة للمستخدم.

اعتبارات تحديث العنقود

عند تحديث تجمع، ضع في اعتبارك المعلومات التالية:

  • يعمل التحديث فقط إذا كان هناك تحديث VHD للاستهلاك. إذا كنت تقوم بتشغيل أحدث VHD، فستحتاج إلى الانتظار حتى يتوفر VHD التالي من أجل إجراء التحديث.
  • يضمن Azure CLI تعيين إذن الإضافة بشكل صحيح بعد الترحيل. إذا لم تكن تستخدم Azure CLI لتنفيذ عملية الترحيل، فعليك التعامل مع إذن هوية الإضافة بنفسك. على سبيل المثال باستخدام قالب Azure Resource Manager (ARM)، انظر تعيين أدوار Azure باستخدام قوالب ARM.
  • إذا كان عنقودك يستخدم --attach-acr لسحب الصور من Azure Container Registry (ACR)، تحتاج إلى تشغيل أمر az aks update --resource-group <resource-group-name> --name <aks-cluster-name> --attach-acr <acr-resource-id> بعد تحديث العنقود للسماح للكوبليت الجديد المستخدم للهوية المدارة بالحصول على إذن السحب من ACR. وإلا، فلن تتمكن من السحب من ACR بعد التحديث.

إنشاء هوية مُدارة يعينها المستخدم

إذا لم يكن لديك مورد هوية مدار معين من قبل المستخدم، فبادر بإنشاء مورد باستخدام az identity create الأمر .

az identity create \
    --name <identity-name> \
    --resource-group <resource-group-name>

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

{                                  
    "clientId": "<client-id>",
    "clientSecretUrl": "<clientSecretUrl>",
    "id": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>",
    "location": "<location>",
    "name": "<identity-name>",
    "principalId": "<principal-id>",
    "resourceGroup": "<resource-group-name>",
    "tags": {},
    "tenantId": "<tenant-id>",
    "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
}

الحصول على المعرف الأساسي للهوية المدارة المعينة من قبل المستخدم

احصل على المعرف الأساسي للهوية المدارة المعينة من قبل المستخدم باستخدام الأمر az identity show .

CLIENT_ID=$(az identity show \
    --name <identity-name> \
    --resource-group <resource-group-name> \
    --query principalId \
    --output tsv)

الحصول على معرف المورد للهوية المدارة المعينة من قبل المستخدم

احصل على معرف المورد للهوية المدارة المعينة من قبل المستخدم باستخدام الأمر az identity show .

RESOURCE_ID=$(az identity show \
    --name <identity-name> \
    --resource-group <resource-group-name> \
    --query id \
    --output tsv)

تمكين هوية مدارة معينة من قبل المستخدم على نظام مجموعة AKS جديد

أنشئ عنقود AKS بهوية مدارة معينة من قبل المستخدم باستخدام az aks create الأمر وتعيين --assign-identity المعلمات إلى معرف المورد للهوية المدارة المعينة من قبل المستخدم.

az aks create \
    --resource-group <resource-group-name> \
    --name <cluster-name> \
    --network-plugin azure \
    --vnet-subnet-id <vnet-subnet-id> \
    --dns-service-ip 10.2.0.10 \
    --service-cidr 10.2.0.0/24 \
    --assign-identity $RESOURCE_ID \
    --generate-ssh-keys

تحديث نظام مجموعة موجود لاستخدام هوية مدارة يعينها المستخدم

تحديث مجموعة موجودة لاستخدام هوية مدارة معينة من قبل المستخدم باستخدام az aks update الأمر وتعيين --assign-identity المعلمات إلى معرف الموارد للهوية المدارة المعينة من قبل المستخدم.

az aks update \
    --resource-group <resource-group-name> \
    --name <cluster-name> \
    --enable-managed-identity \
    --assign-identity $RESOURCE_ID

يجب أن يشبه إخراج تحديث نظام المجموعة الناجح لاستخدام هوية مدارة معينة من قبل المستخدم إخراج المثال التالي:

...
    "identity": {
    "principalId": null,
    "tenantId": null,
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>": {
        "clientId": "<client-id>",
        "principalId": "<principal-id>"
        }
    }
    },
...

بعد تحديث العنقود ليستخدم هوية مدارة معينة من قبل المستخدم بدلا من مدير الخدمة، تستخدم طائرة التحكم والوحدات الهوية المدارة المعينة من قبل المستخدم للتفويض عند الوصول إلى خدمات أخرى في Azure. يستمر Kubelet في استخدام مبدأ الخدمة حتى تقوم أيضا بترقية مجموعة العقد الخاصة بك. تتسبب ترقية تجمع العقدة في تعطل نظام مجموعة AKS الخاص بك حيث يتم تطويق العقد في تجمعات العقد واستنزافها وإعادة تصويرها. يمكنك استخدام الأمر على عقدك لتحديث هوية مدارة معينة من قبل المستخدم.

az aks nodepool upgrade \
  --resource-group <resource-group-name> \
  --cluster-name <aks-cluster-name> \
  --name <node-pool-name> \
  --node-image-only

ملحوظة

لا يؤدي ترحيل هوية مدارة لمستوى التحكم من النظام المعين إلى تعيين المستخدم إلى أي وقت تعطل لمستوى التحكم وتجمعات الوكلاء. تستمر مكونات مستوى التحكم في الهوية القديمة المخصصة للنظام لعدة ساعات حتى تحديث الرمز التالي.

تعيين دور Azure RBAC للهوية المدارة المعينة من قبل المستخدم

أضف تعيين دور للهوية المدارة المعينة من قبل المستخدم باستخدام az role assignment create الأمر. المثال التالي يخصص دور Key Vault Secrets User للهوية المدارة المعينة من قبل المستخدم لمنحه صلاحيات الوصول إلى الأسرار في key vault. يتم تحديد نطاق تعيين الأدوار إلى مورد خزنة المفاتيح.

az role assignment create \
    --assignee <client-id> \
    --role "Key Vault Secrets User" \
    --scope "<key-vault-resource-id>"

ملحوظة

قد يستغرق نشر الأذونات الممنوحة للهوية المدارة لنظام المجموعة الخاصة بك ما يصل إلى 60 دقيقة.

إنشاء ملف تكوين Terraform

ملفات تكوين تيرافورم تحدد البنية التحتية التي ينشئها ويديرها تيرافورم.

  1. أنشئ ملفا باسم main.tf وأضف الكود التالي لتعريف نسخة Terraform وتحديد مزود Azure:

    terraform {
    required_version = ">= 1.0"
    required_providers {
      azurerm = {
        source  = "hashicorp/azurerm"
        version = "~> 4.0"
      }
     }
    }
    provider "azurerm" {
     features {}
    }
    
  2. أضف الكود التالي إلى main.tf لإنشاء مجموعة موارد Azure. لا تتردد في تغيير اسم وموقع مجموعة الموارد حسب الحاجة.

    resource "azurerm_resource_group" "example" {
     name     = "aks-rg"
     location = "East US"
    }
    

إنشاء عنقود AKS بهوية مدارة معينة من قبل المستخدم باستخدام Terraform

أضف الكود التالي إلى main.tf لإنشاء هوية مدارة معينة من قبل المستخدم ومجموعة AKS تستخدم الهوية:

resource "azurerm_user_assigned_identity" "uai" {
 name                = "aks-user-identity"
 resource_group_name = azurerm_resource_group.example.name
 location            = azurerm_resource_group.example.location
}
resource "azurerm_kubernetes_cluster" "user_assigned" {
 name                = "aks-user"
 location            = azurerm_resource_group.example.location
 resource_group_name = azurerm_resource_group.example.name
 dns_prefix          = "aksuser"
 identity {
   type         = "UserAssigned"
   identity_ids = [azurerm_user_assigned_identity.uai.id]
 }
 default_node_pool {
   name       = "system"
   node_count = 1
   vm_size    = "Standard_DS2_v2"
 }
}

إضافة تعيين دور لهوية مدارة معينة من قبل المستخدم باستخدام Terraform

أضف الكود التالي لإنشاء main.tf تعيين دور للهوية المدارة المعينة من قبل المستخدم. هذا المثال يعين دور المستخدم Key Vault الأسرار للهوية المدارة المعينة من قبل المستخدم لمنحها صلاحيات الوصول إلى الأسرار في key vault. يتم تحديد نطاق تعيين الأدوار إلى مورد خزنة المفاتيح.

resource "azurerm_role_assignment" "user_assigned_key_vault_secrets_user" {
 scope                = azurerm_resource_group.example.id
 role_definition_name = "Key Vault Secrets User"
 principal_id         = azurerm_user_assigned_identity.uai.principal_id
}

تهيئة Terraform

قم بتهيئة Terraform في الدليل الذي يحتوي على ملفك main.tf باستخدام الأمر.terraform init يقوم هذا الأمر بتنزيل مزود Azure المطلوب لإدارة موارد Azure باستخدام Terraform.

terraform init

إنشاء خطة تنفيذ Terraform

إنشاء خطة تنفيذ Terraform باستخدام terraform plan الأمر . هذا الأمر يعرض لك الموارد التي سيخلقها Terraform أو يعدلها في اشتراكك في Azure.

terraform plan

تطبيق تكوين Terraform

بعد مراجعة وتأكيد خطة التنفيذ، طبق تكوين Terraform باستخدام terraform apply الأمر. يقوم هذا الأمر بإنشاء أو تعديل الموارد المعرفة في ملف main.tf الخاص بك في اشتراك Azure الخاص بك.

terraform apply

تحقق من نشر Terraform

بعد تطبيق تكوين Terraform، يمكنك التحقق من النشر باستخدام أمر [az aks show][az-aks-show] باستخدام المعلمة --query لتصفية المخرج وعرض معلومات الهوية. على سبيل المثال:

az aks show \
 --name <cluster-name> \
 --resource-group <resource-group> \
 --query identity.type \
 --output tsv

لمعرفة المزيد عن الهويات المدارة في AKS، راجع المقالات التالية: