Azure Container Instances'tan Azure Container Registry ile kimlik doğrulaması

Azure Container Registry'de özel kapsayıcı kayıt defterlerinize erişim sağlamak için bir Microsoft Entra hizmet sorumlusu kullanabilirsiniz.

Bu makalede, kayıt defterinizde çekme izinleri olan bir Microsoft Entra hizmet sorumlusu oluşturmayı ve yapılandırmayı öğreneceksiniz. Ardından Azure Container Instances'ta (ACI) kimlik doğrulaması için hizmet sorumlusunu kullanarak görüntüsünü özel kayıt defterinizden çeken bir kapsayıcı başlatırsınız.

Hizmet sorumlusu ne zaman kullanılır?

Otomatik veya katılımsız bir şekilde kapsayıcı örnekleri oluşturan uygulamalar veya hizmetler gibi başsız senaryolarda ACI'den kimlik doğrulaması için bir hizmet sorumlusu kullanmanız gerekir.

Örneğin, her gece çalışan ve bazı verileri işlemek için görev tabanlı bir kapsayıcı örneği oluşturan otomatik bir betiğiniz varsa, kayıt defterinde kimlik doğrulaması yapmak için yalnızca çekme izinlerine sahip bir hizmet sorumlusu kullanabilir. Daha sonra hizmet sorumlusunun kimlik bilgilerini döndürebilir veya diğer hizmetleri ve uygulamaları etkilemeden erişimini tamamen iptal edebilirsiniz.

Hizmet sorumluları, kayıt defteri yöneticisi kullanıcı devre dışı bırakıldığında da kullanılmalıdır.

Hizmet sorumlusu oluşturma

Kapsayıcı kayıt defterinize erişimi olan bir hizmet sorumlusu oluşturmak için Azure Cloud Shell'de aşağıdaki betiği veya Azure CLI'nın yerel yüklemesini çalıştırın. Betik Bash kabuğu için biçimlendirilir.

Betiği çalıştırmadan önce değişkeni kapsayıcı kayıt defterinizin adıyla güncelleştirin ACR_NAME . Değer SERVICE_PRINCIPAL_NAME , Microsoft Entra kiracınızda benzersiz olmalıdır. "'http://acr-service-principal' already exists." hatası alırsanız hizmet sorumlusu için farklı bir ad belirtin.

Farklı izinler vermek istiyorsanız, isteğe bağlı olarak az ad sp create-for-rbac komutundaki değeri değiştirebilirsiniz--role. Rollerin tam listesi için bkz . ACR rolleri ve izinleri.

Betiği çalıştırdıktan sonra hizmet sorumlusunun kimliğini ve parolasını not alın. Kimlik bilgilerine sahip olduktan sonra, uygulama ve hizmetlerinizi hizmet sorumlusu olarak kapsayıcı kayıt defterinizde kimlik doğrulaması yapmak üzere yapılandırabilirsiniz.

#!/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"

Mevcut hizmet sorumlusunu kullanma

Mevcut hizmet sorumlusuna kayıt defteri erişimi vermek için hizmet sorumlusuna yeni bir rol atamanız gerekir. Yeni bir hizmet sorumlusu oluştururken olduğu gibi çekme, gönderme ve çekme ve sahip erişimi de ve diğerleri arasında yer alabilirsiniz.

Aşağıdaki betik, değişkende SERVICE_PRINCIPAL_ID belirttiğiniz bir hizmet sorumlusuna çekme izinleri vermek için az role assignment create komutunu kullanır. --role Farklı bir erişim düzeyi vermek istiyorsanız değeri ayarlayın.

#!/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

Hizmet sorumlusunu kullanarak kimlik doğrulaması

Azure Container Instances'ta hizmet sorumlusu kullanarak bir kapsayıcı başlatmak için --registry-usernamekimliğini ve parolasını --registry-passwordbelirtin.

az container create \
    --resource-group myResourceGroup \
    --name mycontainer \
    --image mycontainerregistry.azurecr.io/myimage:v1 \
    --registry-login-server mycontainerregistry.azurecr.io \
    --registry-username <service-principal-ID> \
    --registry-password <service-principal-password>

Not

Komutları Azure Cloud Shell'in en son sürümünde çalıştırmanızı öneririz. Perm üzerinde bash ortamını çalıştırmak için ayarlayın export MSYS_NO_PATHCONV=1 .

Örnek betikler

GitHub'da Azure CLI için önceki örnek betiklerin yanı sıra Azure PowerShell sürümlerini bulabilirsiniz:

Sonraki adımlar

Aşağıdaki makaleler hizmet sorumluları ve ACR ile çalışma hakkında ek ayrıntılar içerir: