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

قم باستخدام⁧⁩الهويات المُدارة لموارد Azure⁧⁩ لتشغيل التعليمات البرمجية في مثيلات حاوية Azure التي تتفاعل مع خدمات Azure الأخرى- دون حفظ أية بيانات سرية، أو بيانات اعتماد في التعليمات البرمجية. توفر الميزة نشر مثيلات حاوية Azure بهوية مُدارة تلقائيًا في Microsoft Azure Active Directory.

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

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

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

هام

هذه الميزة قيد المعاينة حالياً. يتم توفير المعاينات لك بشرط أن توافق على شروط الاستخدام التكميلية. قد تتغير بعض جوانب هذه الميزة قبل التوفر العام (GA). حاليًا، الهويات المدارة في مثيلات حاوية Azure، والمدعومة فقط مع حاويات Linux، وليس مع حاويات Windows.

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

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

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

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

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

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

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

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

يمكنك استخدام Azure Cloud Shell أو Azure CLI محلي.

  • تتطلب هذه المقالة الإصدار 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"⁧⁩:

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

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

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

إنشاء هوية

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

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

لاستخدام الهوية في الخطوات التالية، قم باستخدام الأمر⁧⁩"az إظهار الهوية"⁧⁩لتخزين معرف الخدمة الأساسي للهوية، ومعرف المورد في المتغيرات.

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

# Get resource ID of the user-assigned identity
resourceID=$(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 $spID \
    --secret-permissions get

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

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

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

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

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

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

يبدو قسم⁧identity⁩في الإخراج مشابهًا للتالي؛ حيث يوضح أنه تم تعيين الهوية في مجموعة الحاوية. ⁧principalID⁩تحت⁧userAssignedIdentities⁩هو كيان الخدمة من الهوية التي أنشأتها في Microsoft Azure Active Directory:

[...]
"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 Azure Active Directory للمصادقة على المخزن الرئيسي، قم بتشغيل الأمر التالي:

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=2016-10-01 -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»⁧⁩التالي لإنشاء مثيل حاوية مسند إلى صورة Microsoft⁧azure-cli⁩. يوفر هذا المثال مجموعة حاوية واحدة يمكنك استخدامها بشكل تفاعلي لتشغيل Azure CLI؛ للوصول إلى خدمات Azure الأخرى.

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

# Get the resource ID of the resource group
rgID=$(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 $rgID \
  --command-line "tail -f /dev/null"

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

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

identity⁩يبدو المقطع في الإخراج مشابهًا للتالي؛ حيث يُظهر إنشاء الهوية المعينة من قِبل النظام في Microsoft Azure Active Directory:

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

تعيين متغير لقيمة⁧principalId⁩ (معرّف كيان الخدمة) من الهوية، لاستخدامها في الخطوات اللاحقة.

spID=$(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 $spID \
   --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⁩الخاصية المكونة لسيناريوهات مختلفة. انظر⁧⁩مرجع قالب Azure 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": "System Assigned, 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 الرئيسي
  • قم باستخدام الهوية المدارة للوصول إلى المخزن الرئيسي من حاوية قيد التشغيل