كيفية استخدام الهويات المُدارة مع Azure Container Instances

استخدم الهويات المدارة لموارد Azure لتشغيل التعليمات البرمجية في مثيلات حاوية Azure التي تتفاعل مع خدمات Azure الأخرى - دون الاحتفاظ بأي أسرار أو بيانات اعتماد في التعليمات البرمجية. توفر الميزة نشر مثيلات حاوية Azure بهوية مدارة تلقائيا في معرف Microsoft Entra.

في هذه المقالة، من الممكن معرفة المزيد حول الهويات المدارة في مثيلات حاوية Azure و:

  • تمكين الهوية المعينة من قِبل المستخدم، أو المعينة من قِبل النظام في مجموعة الحاوية
  • قم بمنح حق الوصول إلى الهوية إلى مخزن Azure الرئيسي
  • قم باستخدام الهوية المدارة للوصول إلى المخزن الرئيسي من حاوية قيد التشغيل

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

لماذا يتم استخدام الهوية المُدارة؟

استخدم هوية مدارة في حاوية قيد التشغيل للمصادقة على أي خدمة تدعم مصادقة Microsoft Entra دون إدارة بيانات الاعتماد في رمز الحاوية. بالنسبة للخدمات التي لا تدعم مصادقة AD، من الممكن تخزين البيانات السرية في مخزن Azure الرئيسي، واستخدام الهوية المدارة للوصول إلى المخزن الرئيسي لاسترداد بيانات الاعتماد. لمزيد من المعلومات حول استخدام هوية مدارة، راجع ما هي الهويات المدارة لموارد Azure؟

تمكين الهوية المدارة

عند إنشاء مجموعة حاويات، قم بتمكين هوية واحدة أو أكثر مدارة عن طريق تعيين خاصية ContainerGroupIdentity . من الممكن أيضًا تمكين الهويات المدارة أو تحديثها بعد تشغيل مجموعة الحاوية- يؤدي أي من الإجراءين إلى إعادة تشغيل مجموعة الحاوية. ليتم تعيين الهويات في مجموعة حاويات جديدة أو موجودة، قم باستخدام Azure CLI، أو قالب إدارة الموارد، أو ملف YAML، أو أداة Azure أخرى.

تدعم مثيلات حاوية Azure كلا النوعين من هويات Azure المدارة: تعيين المستخدم، وتعيين النظام. في مجموعة الحاوية، من الممكن تمكين الهوية المعينة من قِبل نظام واحد أو أكثر من الهويات المعينة من قِبل المستخدم، أو كلا النوعين من الهويات. إذا لم تكن معتادا على الهويات المدارة لموارد Azure، فشاهد نظرة عامة.

استخدام هوية مُدارة

لاستخدام الهوية المدارة، يجب منح الهوية حق الوصول إلى مورد أو أكثر من موارد خدمة Azure (مثل: تطبيق ويب، أو المخزن الرئيسي، أو حساب التخزين) في الاشتراك. استخدام الهوية المدارة في حاوية قيد التشغيل يشبه استخدام هوية في Azure VM. راجع إرشادات الجهاز الظاهري لاستخدام رمز مميز أو Azure PowerShell أو Azure CLI أو Azure SDKs.

المتطلبات الأساسية

  • تتطلب هذه المقالة الإصدار 2.0.49 أو الأحدث من Azure CLI. إذا كنت تستخدم Azure Cloud Shell، يتم تثبيت أحدث إصدار بالفعل.

إنشاء مخزن Azure الرئيسي

تستخدم الأمثلة في هذه المقالة الهوية المدارة في مثيلات حاوية Azure للوصول إلى بيانات سرية مخزن Azure الرئيسي.

أولاً، أنشئ مجموعة موارد باسم myResourceGroup في موقع eastus باستخدام الأمر التالي az group create:

az group create --name myResourceGroup --location eastus

استخدم الأمر az keyvault create لإنشاء خزنة مفاتيح. قم بالتأكد من تحديد اسم المخزن الرئيسي الفريد.

az keyvault create \
  --name mykeyvault \
  --resource-group myResourceGroup \
  --location eastus

تخزين عينة سرية في مخزن المفاتيح باستخدام الأمر az keyvault secret set :

az keyvault secret set \
  --name SampleSecret \
  --value "Hello Container Instances" \
  --description ACIsecret --vault-name mykeyvault

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

المثال 1: قم باستخدام الهوية معينة من قِبل المستخدم للوصول إلى مخزن Azure الرئيسي

إنشاء هوية

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

az identity create \
  --resource-group myResourceGroup \
  --name myACIId

لاستخدام الهوية في الخطوات التالية، استخدم الأمر az identity show لتخزين معرف كيان خدمة الهوية ومعرف المورد في المتغيرات.

# Get service principal ID of the user-assigned identity
SP_ID=$(az identity show \
  --resource-group myResourceGroup \
  --name myACIId \
  --query principalId --output tsv)

# Get resource ID of the user-assigned identity
RESOURCE_ID=$(az identity show \
  --resource-group myResourceGroup \
  --name myACIId \
  --query id --output tsv)

منح حق الوصول إلى الهوية المعينة من قِبل المستخدم إلى المخزن الرئيسي

قم بتشغيل الأمر التالي az keyvault set-policy لتعيين نهج وصول على خزينة المفاتيح. يقوم المثال التالي بالسماح للهوية التي تم تعيينها من قِبل المستخدم بالحصول على بيانات سرية من المخزن الرئيسي:

 az keyvault set-policy \
    --name mykeyvault \
    --resource-group myResourceGroup \
    --object-id $SP_ID \
    --secret-permissions get

قم بتمكين الهوية المعينة من قِبل المستخدم على مجموعة الحاويات

قم بتشغيل الأمر التالي az container create لإنشاء مثيل حاوية استنادا إلى صورة Microsoftazure-cli. يوفر هذا المثال مجموعة حاوية واحدة يمكنك استخدامها بشكل تفاعلي لتشغيل Azure CLI؛ للوصول إلى خدمات Azure الأخرى. في هذا القسم، يُستخدم نظام التشغيل الأساسي فقط. للحصول على مثال لاستخدام Azure CLI في الحاوية، راجع تمكين الهوية المعينة من قبل النظام على مجموعة حاويات.

تمرر --assign-identity المعلمة الهوية المدارة المعينة من قبل المستخدم إلى المجموعة. يحتفظ الأمر طويل الأمد بالحاوية قيد التشغيل. يقوم هذا المثال باستخدام نفس مجموعة الموارد المستخدمة لإنشاء المخزن الرئيسي؛ ولكن يمكنك تحديد مجموعة أخرى.

az container create \
  --resource-group myResourceGroup \
  --name mycontainer \
  --image mcr.microsoft.com/azure-cli \
  --assign-identity $RESOURCE_ID \
  --command-line "tail -f /dev/null"

في غضون ثوانٍ قليلة، يجب أن تحصل على استجابة من Azure CLI تشير إلى اكتمال النشر. تحقق من حالته باستخدام الأمر az container show .

az container show \
  --resource-group myResourceGroup \
  --name mycontainer

identity يبدو القسم في الإخراج مشابها لما يلي، يظهر تعيين الهوية في مجموعة الحاوية. يوجد principalID ضمن userAssignedIdentities كيان الخدمة للهوية التي قمت بإنشائها في معرف Microsoft Entra:

[...]
"identity": {
    "principalId": "null",
    "tenantId": "xxxxxxxx-f292-4e60-9122-xxxxxxxxxxxx",
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/xxxxxxxx-0903-4b79-a55a-xxxxxxxxxxxx/resourcegroups/danlep1018/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {
        "clientId": "xxxxxxxx-5523-45fc-9f49-xxxxxxxxxxxx",
        "principalId": "xxxxxxxx-f25b-4895-b828-xxxxxxxxxxxx"
      }
    }
  },
[...]

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

يمكنك الآن استخدام الهوية المدارة داخل مثيل الحاوية قيد التشغيل للوصول إلى المخزن الرئيسي. إطلاق أول bash shell في الحاوية:

az container exec \
  --resource-group myResourceGroup \
  --name mycontainer \
  --exec-command "/bin/bash"

قم بتشغيل الأوامر التالية في bash shell في الحاوية. للحصول على رمز مميز للوصول لاستخدام معرف Microsoft Entra للمصادقة على key vault، قم بتشغيل الأمر التالي:

client_id="xxxxxxxx-5523-45fc-9f49-xxxxxxxxxxxx"
curl "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net&client_id=$client_id" -H Metadata:true -s

إخراج:

{"access_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSIsImtpZCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSJ9......xxxxxxxxxxxxxxxxx","refresh_token":"","expires_in":"28799","expires_on":"1539927532","not_before":"1539898432","resource":"https://vault.azure.net/","token_type":"Bearer"}

لتخزين رمز الوصول المميز في المتغير لاستخدامه في الأوامر اللاحقة للمصادقة، قم بتشغيل الأمر الآتي:

TOKEN=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true | jq -r '.access_token')

استخدم الآن رمز الوصول المميز؛ للمصادقة على المخزن الرئيسي، وقراءة البيانات السرية. تأكد من استبدال اسم مخزن مفاتيحك في عنوان URL (https://mykeyvault.vault.azure.net/...):

curl https://mykeyvault.vault.azure.net/secrets/SampleSecret/?api-version=7.4 -H "Authorization: Bearer $TOKEN"

يبدو الرد مشابهًا للتالي، مع إظهار البيانات السرية. في التعليمات البرمجية الخاصة بك، من الممكن تحليل هذا الإخراج للحصول على البيانات السرية. بعد ذلك قم باستخدام البيانات السرية في عملية لاحقة للوصول إلى مورد Azure آخر.

{"value":"Hello Container Instances","contentType":"ACIsecret","id":"https://mykeyvault.vault.azure.net/secrets/SampleSecret/xxxxxxxxxxxxxxxxxxxx","attributes":{"enabled":true,"created":1539965967,"updated":1539965967,"recoveryLevel":"Purgeable"},"tags":{"file-encoding":"utf-8"}}

المثال 2: قم باستخدام الهوية المعينة من قِبل النظام؛ للوصول إلى مخزن Azure الرئيسي

قم بتمكين الهوية المعينة من قِبل النظام في مجموعة حاويات

قم بتشغيل الأمر التالي az container create لإنشاء مثيل حاوية استنادا إلى صورة Microsoftazure-cli. يوفر هذا المثال مجموعة حاوية واحدة يمكنك استخدامها بشكل تفاعلي لتشغيل Azure CLI؛ للوصول إلى خدمات Azure الأخرى.

--assign-identity تمكن المعلمة التي لا تحتوي على قيمة إضافية هوية مدارة معينة من قبل النظام على المجموعة. تُحدد نطاق هوية مجموعة الموارد لمجموعة الحاوية. يحتفظ الأمر طويل الأمد بالحاوية قيد التشغيل. يستخدم هذا المثال نفس مجموعة الموارد المستخدمة لإنشاء مخزن رئيسي، الذي يقع في نطاق الهوية.

# Get the resource ID of the resource group
RG_ID=$(az group show --name myResourceGroup --query id --output tsv)

# Create container group with system-managed identity
az container create \
  --resource-group myResourceGroup \
  --name mycontainer \
  --image mcr.microsoft.com/azure-cli \
  --assign-identity --scope $RG_ID \
  --command-line "tail -f /dev/null"

في غضون ثوانٍ قليلة، يجب أن تحصل على استجابة من Azure CLI تشير إلى اكتمال النشر. تحقق من حالته باستخدام الأمر az container show .

az container show \
  --resource-group myResourceGroup \
  --name mycontainer

identity يبدو القسم في الإخراج مشابها لما يلي، يوضح أنه يتم إنشاء هوية معينة من قبل النظام في معرف Microsoft Entra:

[...]
"identity": {
    "principalId": "xxxxxxxx-528d-7083-b74c-xxxxxxxxxxxx",
    "tenantId": "xxxxxxxx-f292-4e60-9122-xxxxxxxxxxxx",
    "type": "SystemAssigned",
    "userAssignedIdentities": null
},
[...]

تعيين متغير إلى قيمة principalId (معرف الخدمة الأساسي) للهوية، لاستخدامها في الخطوات اللاحقة.

SP_ID=$(az container show \
  --resource-group myResourceGroup \
  --name mycontainer \
  --query identity.principalId --out tsv)

قم بمنح مجموعة الحاويات حق الوصول إلى المخزن الرئيسي

قم بتشغيل الأمر التالي az keyvault set-policy لتعيين نهج وصول على خزينة المفاتيح. يسمح المثال التالي للهوية المُعينة من قِبل المستخدم بالحصول على بيانات سرية من المخزن الرئيسي:

 az keyvault set-policy \
   --name mykeyvault \
   --resource-group myResourceGroup \
   --object-id $SP_ID \
   --secret-permissions get

قم باستخدام هوية مجموعة الحاويات؛ للحصول على البيانات السرية من المخزن الرئيسي

يمكنك الآن استخدام الهوية المدارة للوصول إلى المخزن الرئيسي داخل مثيل الحاوية قيد التشغيل. إطلاق أول bash shell في الحاوية:

az container exec \
  --resource-group myResourceGroup \
  --name mycontainer \
  --exec-command "/bin/bash"

قم بتشغيل الأوامر التالية في bash shell في الحاوية. أولا، سجل الدخول إلى Azure CLI باستخدام الهوية المدارة:

az login --identity

من الحاوية قيد التشغيل، استرداد البيانات السرية من المخزن الرئيسي:

az keyvault secret show \
  --name SampleSecret \
  --vault-name mykeyvault --query value

يتم استرداد قيمة البيانات السرية:

"Hello Container Instances"

يتم تمكين الهوية المدارة باستخدام قالب Resource Manager

لتمكين هوية مدارة في مجموعة حاويات باستخدام قالب Resource Manager، قم بتعيين identity خاصية العنصر Microsoft.ContainerInstance/containerGroups مع كائنContainerGroupIdentity. تظهر القصاصات البرمجية التالية الخاصية المكونة identity لسيناريوهات مختلفة. راجع مرجع قالب Resource Manager. حدد حدا أدنى apiVersion من 2018-10-01.

الهوية التي تم تعينها من قِبل المستخدم

الهوية المعينة من قِبل المستخدم هو معرف مورد النموذج:

"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}"

من الممكن تمكين هوية واحدة، أو أكثر من الهويات التي تم تعيينها من قِبل المستخدم.

"identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "myResourceID1": {
            }
        }
    }

الهوية التي عيَّنها النظام

"identity": {
    "type": "SystemAssigned"
    }

الهويات المعينة للنظام والمستخدم

في مجموعة الحاوية، يمكن تمكين الهوية المعينة من قِبل نظام واحد، أو أكثر من الهويات المعينة من قِبل المستخدم، أو كلا النوعين من الهويات.

"identity": {
    "type": "SystemAssigned, UserAssigned",
    "userAssignedIdentities": {
        "myResourceID1": {
            }
        }
    }
...

قم بتمكين الهوية المدارة باستخدام ملف YAML

لتمكين هوية مدارة في مجموعة حاويات تم نشرها باستخدام ملف YAML، قم بتضمين YAML التالي. حدد حدا أدنى apiVersion من 2018-10-01.

الهوية التي تم تعينها من قِبل المستخدم

الهوية المعينة من قِبل المستخدم هي معرف مورد النموذج

'/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'

من الممكن تمكين هوية واحدة، أو أكثر من الهويات التي تم تعيينها من قِبل المستخدم.

identity:
  type: UserAssigned
  userAssignedIdentities:
    {'myResourceID1':{}}

الهوية التي عيَّنها النظام

identity:
  type: SystemAssigned

الهويات المعينة للنظام والمستخدم

في مجموعة الحاوية، يمكن تمكين الهوية المعينة من قِبل نظام واحد، أو أكثر من الهويات المعينة من قِبل المستخدم، أو كلا النوعين من الهويات.

identity:
  type: SystemAssigned, UserAssigned
  userAssignedIdentities:
   {'myResourceID1':{}}

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

في هذه المقالة، من الممكن معرفة المزيد بشأن الهويات المدارة في مثيلات حاوية Azure وكيفية:

  • تمكين الهوية المعينة من قِبل المستخدم، أو المعينة من قِبل النظام في مجموعة الحاوية
  • قم بمنح حق الوصول إلى الهوية إلى مخزن Azure الرئيسي
  • قم باستخدام الهوية المدارة للوصول إلى المخزن الرئيسي من حاوية قيد التشغيل