إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
تشرح هذه المقالة كيفية تمكين هوية مدارة معينة من قبل المستخدم على مجموعة AKS جديدة أو موجودة، والحصول على المعرف الرئيسي للهوية المدارة المعينة من قبل المستخدم، وإضافة تعيين دور للهوية المدارة المعينة من قبل المستخدم.
المتطلبات المسبقه
اقرأ نظرة عامة على الهويات المدارة في خدمة Azure Kubernetes (AKS) لفهم أنواع الهويات المدارة المختلفة المتاحة في AKS وكيفية استخدامها للوصول الآمن إلى الموارد Azure.
اضبط اشتراكك كاشتراك نشط حاليا باستخدام
az account setالأمر.az account set --subscription <subscription-id>
مجموعة موارد موجودة في 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.
- يمكنك تكوين تعريف المورد المخصص ل AzurePodIdentityException (CRD) لتحديد أن الطلبات إلى نقطة نهاية IMDS التي تنشأ من تسميات مطابقة البودات المحددة في CRD يجب أن تكون بروكسي دون أي معالجة في NMI. استبعاد pods النظام مع التسمية
- مناطق 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
ملفات تكوين تيرافورم تحدد البنية التحتية التي ينشئها ويديرها تيرافورم.
أنشئ ملفا باسم
main.tfوأضف الكود التالي لتعريف نسخة Terraform وتحديد مزود Azure:terraform { required_version = ">= 1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} }أضف الكود التالي إلى
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، راجع المقالات التالية: