مصادقة Azure Container Registry مع أساسيات الخدمة

يمكنك استخدام كيان خدمة Microsoft Entra لتوفير دفع أو سحب أو وصول آخر إلى سجل الحاوية. باستخدام كيان الخدمة، يمكنك توفير الوصول إلى الخدمات والتطبيقات "بلا عنوان".

ما هو كيان الخدمة؟

توفر أساسيات خدمة معرف Microsoft Entra الوصول إلى موارد Azure ضمن اشتراكك. يمكنك التفكير في كيان الخدمة باعتباره هوية مستخدم لخدمة ما، حيث "الخدمة" هي أي تطبيق أو خدمة أو نظام أساسي يحتاج إلى الوصول إلى الموارد. يمكنك تكوين كيان الخدمة مع تحديد نطاق حقوق الوصول فقط لتلك الموارد التي تحددها. ثم قم بتكوين التطبيق أو الخدمة لاستخدام بيانات اعتماد كيان الخدمة للوصول إلى هذه الموارد.

في سياق Azure Container Registry، يمكنك إنشاء كيان خدمة Microsoft Entra مع السحب والدفع والسحب أو أذونات أخرى إلى السجل الخاص بك في Azure. للحصول على قائمة كاملة بالأدوار، راجع أدوار وأذونات Azure Container Registry.

لماذا تستخدم كيان الخدمة؟

باستخدام كيان خدمة Microsoft Entra، يمكنك توفير وصول محدد النطاق إلى سجل الحاوية الخاص بك. قم بإنشاء كيانات خدمة مختلفة لكل تطبيق أو خدمة، ولكل منها حقوق وصول مخصصة إلى السجل الخاص لديك. ولأنه يمكنك تجنب مشاركة بيانات الاعتماد بين الخدمات والتطبيقات، يمكنك تدوير بيانات الاعتماد أو إبطال الوصول إلى كيان الخدمة فقط (وبالتالي التطبيق) الذي تختاره.

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

متى يتم استخدام كيان الخدمة

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

  • السحب: قم بنشر حاويات من السجل إلى نظم التزامن بما في ذلك DC/OS وDocker Swarm. يمكنك أيضا السحب من سجلات الحاويات إلى خدمات Azure ذات الصلة مثل App Service و Batch و Service Fabric وغيرها.

    تلميح

    يوصى باستخدام كيان خدمة في العديد من سيناريوهات Kubernetes لسحب الصور من سجل حاويات Azure. باستخدام خدمة Azure Kubernetes (AKS)، يمكنك أيضًا استخدام آلية تلقائية للمصادقة مع السجل الهدف عن طريق تمكين الهوية المدارة لنظام المجموعة.

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

للوصول الفردي إلى سجل، مثل عند سحب صورة حاوية يدويا إلى محطة عمل التطوير الخاصة بك، نوصي باستخدام هوية Microsoft Entra الخاصة بك بدلا من ذلك للوصول إلى السجل (على سبيل المثال، مع تسجيل الدخول إلى az acr).

إنشاء كيان خدمة

لإنشاء كيان خدمة مع الوصول إلى سجل الحاوية، قم بتشغيل البرنامج النصي التالي في Azure Cloud Shell أو تثبيت محلي لـ Azure CLI. يتم تنسيق البرنامج النصي لـ Bash shell.

قبل تشغيل البرنامج النصي، حدِّث المتغير ACR_NAME باسم سجل حاوية خاص بك. SERVICE_PRINCIPAL_NAME يجب أن تكون القيمة فريدة داخل مستأجر Microsoft Entra. إذا تلقيت خطأ "'http://acr-service-principal' already exists."، فحدد اسماً مختلفاً لكيان الخدمة.

يمكنك تعديل قيمة --role اختيارياً في الأمر az ad sp create-for-rbac إذا كنت تريد منح أذونات مختلفة. للحصول على قائمة كاملة بالأدوار، راجع أدوار وأذونات ACR.

بعد تشغيل البرنامج النصي، لاحظ معرف كيان الخدمة وكلمة المرور. بمجرد حصولك على معلومات تسجيل الدخول الخاصة به، يمكنك تكوين تطبيقاتك وخدماتك للمصادقة على سجل الحاوية الخاص بك باعتباره كيان الخدمة الرئيسي.

#!/bin/bash
# This script requires Azure CLI version 2.25.0 or later. Check version with `az --version`.

# Modify for your environment.
# ACR_NAME: The name of your Azure Container Registry
# SERVICE_PRINCIPAL_NAME: Must be unique within your AD tenant
ACR_NAME=$containerRegistry
SERVICE_PRINCIPAL_NAME=$servicePrincipal

# Obtain the full registry ID
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query "id" --output tsv)
# echo $registryId

# Create the service principal with rights scoped to the registry.
# Default permissions are for docker pull access. Modify the '--role'
# argument value as desired:
# acrpull:     pull only
# acrpush:     push and pull
# owner:       push, pull, and assign roles
PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME --scopes $ACR_REGISTRY_ID --role acrpull --query "password" --output tsv)
USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].appId" --output tsv)

# Output the service principal's credentials; use these in your services and
# applications to authenticate to the container registry.
echo "Service principal ID: $USER_NAME"
echo "Service principal password: $PASSWORD"

استخدم كيان خدمة موجود

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

يستخدم البرنامج النصي التالي الأمر az role assignment create لمنح أذونات pull لكيان الخدمة الذي تحدده في المتغير SERVICE_PRINCIPAL_ID. اضبط --role القيمة إذا كنت ترغب في منح مستوى مختلف من الوصول.

#!/bin/bash
# Modify for your environment. The ACR_NAME is the name of your Azure Container
# Registry, and the SERVICE_PRINCIPAL_ID is the service principal's 'appId' or
# one of its 'servicePrincipalNames' values.
ACR_NAME=$containerRegistry
SERVICE_PRINCIPAL_ID=$servicePrincipal

# Populate value required for subsequent command args
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv)

# Assign the desired role to the service principal. Modify the '--role' argument
# value as desired:
# acrpull:     pull only
# acrpush:     push and pull
# owner:       push, pull, and assign roles
az role assignment create --assignee $SERVICE_PRINCIPAL_ID --scope $ACR_REGISTRY_ID --role acrpull

نماذج البرامج النصية

يمكنك العثور على نماذج البرامج النصية السابقة لـ Azure CLI على GitHub، بالإضافة إلى إصدارات Azure PowerShell:

المصادقة باستخدام كيان الخدمة

بمجرد أن يكون لديك كيان خدمة منحته حق الوصول إلى سجل الحاويات الخاص بك، يمكنك تكوين بيانات الاعتماد الخاصة به للوصول إلى الخدمات والتطبيقات "بلا عنوان"، أو إدخالها باستخدام الأمر docker login. استخدم القيم التالية:

  • اسم المستخدم - معرف تطبيق (العميل) الخاص بكيان الخدمة
  • كلمة المرور - كلمة مرور (سر العميل) الخاصة بكيان الخدمة

تحتوي قيمة اسم المستخدم على التنسيق xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.

تلميح

يمكنك إعادة إنشاء كلمة المرور (سر العميل) من كيان الخدمة عن طريق تشغيل الأمر إعادة تعيين بيانات الاعتماد az ad sp

استخدام بيانات الاعتماد مع خدمات Azure

يمكنك استخدام بيانات اعتماد كيان الخدمة من أي خدمة من خدمات Azure تصادق مع سجل حاوية Azure. استخدم بيانات اعتماد كيان الخدمة بدلاً من بيانات اعتماد مسؤول تسجيل لمجموعة متنوعة من السيناريوهات.

استخدام مع تسجيل دخول docker

يمكنك التشغيل docker loginباستخدام كيان الخدمة. في المثال التالي، يتم تمرير معرف تطبيق كيان الخدمة في متغير البيئة $SP_APP_ID وكلمة المرور في المتغير $SP_PASSWD. للحصول على الممارسات الموصى بها لإدارة بيانات اعتماد Docker، راجع مرجع الأمر تسجيل دخول docker.

# Log in to Docker with service principal credentials
docker login myregistry.azurecr.io --username $SP_APP_ID --password $SP_PASSWD

بمجرد تسجيل الدخول، يقوم Docker بتخزين بيانات الاعتماد.

استخدام مع الشهادة

إذا قمت بإضافة شهادة إلى كيان الخدمة، يمكنك تسجيل الدخول إلى Azure CLI باستخدام المصادقة المستندة إلى الشهادة، ثم استخدام الأمر az acr login للوصول إلى سجل. يوفر استخدام شهادة كسر بدلاً من كلمة مرور أمانًا إضافيًا عند استخدام CLI

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

لاستخدام كيان الخدمة مع الشهادة لتسجيل الدخول إلى Azure CLI، يجب أن تكون الشهادة بتنسيق PEM وأن تتضمن المفتاح الخاص. إذا لم تكن الشهادة بالتنسيق المطلوب، فاستخدم أداة مثل openssl تحويلها. عند تشغيل تسجيل الدخول az لتسجيل الدخول إلى CLI باستخدام كيان الخدمة، قم أيضًا بتوفير معرف تطبيق مدير الخدمة ومعرف مستأجر Active Directory. يوضح المثال التالي هذه القيم كمتغيرات البيئة:

az login --service-principal --username $SP_APP_ID --tenant $SP_TENANT_ID  --password /path/to/cert/pem/file

بعد ذلك قم بتشغيل تسجيل الدخول az acr للمصادقة مع السجل.

az acr login --name myregistry

يستخدم CLI الرمز المميز الذي تم إنشاؤه عند تشغل az login لمصادقة جلستك مع السجل.

إنشاء كيان الخدمة لسيناريوهات المستأجرين

يمكن أيضا استخدام كيان الخدمة في سيناريوهات Azure التي تتطلب سحب الصور من سجل حاوية في معرف Microsoft Entra (مستأجر) واحد إلى خدمة أو تطبيق في آخر. على سبيل المثال، قد تقوم إحدى المؤسسات بتشغيل تطبيق في المستأجر أ الذي يحتاج إلى سحب صورة من سجل حاوية مشترك في المستأجر ب.

لإنشاء كيان خدمة يمكنه المصادقة مع سجل حاوية في سيناريو عبر المستأجرين:

  • أنشئ تطبيقًا جديدًا متعدد المستأجرين (كيان الخدمة) في المستأجر أ.
  • توفير التطبيق في المستأجر ب
  • امنح أذونات كيان الخدمة للسحب من السجل في المستأجر ب
  • قم بتحديث الخدمة أو التطبيق في المستأجر أ للمصادقة باستخدام كيان الخدمة الجديد

على سبيل المثال الخطوات، راجع سحب الصور من سجل حاوية إلى نظام مجموعة AKS في مستأجر AD مختلف.

تجديد أصل الخدمة

يتم إنشاء أصل الخدمة بصلاحية سنة واحدة. لديك خيارات لتمديد الصلاحية لأكثر من عام واحد، أو يمكنك تقديم تاريخ انتهاء الصلاحية الذي تختاره باستخدام الأمر az ad sp credential reset.

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