Azure Container Instances의 Azure Container Registry를 사용하여 인증
Microsoft Entra 서비스 주체를 사용하여 Azure Container Registry의 프라이빗 컨테이너 레지스트리에 대한 액세스를 제공할 수 있습니다.
이 문서에서는 레지스트리에 대한 끌어오기 권한을 사용하여 Microsoft Entra 서비스 주체를 만들고 구성하는 방법을 알아봅니다. 그런 다음, 인증을 위해 서비스 주체를 사용하여 프라이빗 레지스트리에서 이미지를 풀하는 ACI(Azure Container Instances)에서 컨테이너를 시작합니다.
서비스 주체를 사용하는 경우
자동 또는 무인 방식으로 컨테이너 인스턴스를 만드는 애플리케이션이나 서비스에서처럼 헤드리스 시나리오에서는 ACI의 인증에 서비스 주체를 사용해야 합니다.
예를 들어 야간에 실행되는 자동화된 스크립트가 있고 데이터를 처리하기 위해 작업 기반 컨테이너 인스턴스를 만드는 경우, 풀 전용 권한이 있는 서비스 주체를 사용하여 레지스트리에 인증할 수 있습니다. 그런 다음, 서비스 주체의 자격 증명을 순환시키거나 다른 서비스와 애플리케이션에 영향을 주지 않으면서 액세스를 완전히 철회할 수 있습니다.
레지스트리 관리 사용자가 비활성화된 경우에도 서비스 주체를 사용해야 합니다.
서비스 주체 만들기
컨테이너 레지스트리에 대한 액세스 권한을 사용하여 서비스 주체를 만들려면 Azure Cloud Shell에서 다음 스크립트를 실행하거나 Azure CLI를 로컬로 설치합니다. 스크립트는 Bash 셸에 대해 서식이 지정됩니다.
스크립트를 실행하기 전에 ACR_NAME
변수를 컨테이너 레지스트리 이름으로 업데이트합니다. SERVICE_PRINCIPAL_NAME
값은 Microsoft Entra 테넌트 내에서 고유해야 합니다. "'http://acr-service-principal' already exists.
" 오류를 수신하는 경우 서비스 주체에 다른 이름을 지정합니다.
다른 사용 권한을 부여하려는 경우 필요에 따라 az ad sp create-for-rbac 명령에서 --role
값을 수정할 수 있습니다. 역할의 전체 목록은 ACR 역할 및 권한을 참조하세요.
스크립트를 실행한 후 서비스 주체의 ID와 암호를 기록해 둡니다. 자격 증명이 있으면 컨테이너 레지스트리를 서비스 주체로 인증하도록 애플리케이션과 서비스를 구성할 수 있습니다.
#!/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"
기존 서비스 주체 사용
기존 서비스 주체에 레지스트리 액세스 권한을 부여하려면 서비스 주체에 새 역할을 할당해야 합니다. 새 서비스 주체를 만들 때처럼 풀, 푸시 및 풀, 소유자 액세스 권한을 부여할 수 있습니다.
다음 스크립트는 SERVICE_PRINCIPAL_ID
변수에 지정한 서비스 주체에게 az role assignment create 명령을 사용하여 풀 권한을 부여합니다. 다른 수준의 액세스 권한을 부여하려면 --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 Container Instances에서 컨테이너를 시작하려면 --registry-username
에 대한 ID와 --registry-password
에 대한 암호를 지정합니다.
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>
참고 항목
최신 버전의 Azure Cloud Shell에서 명령을 실행하는 것이 좋습니다. on-perm bash 환경을 실행하기 위해 export MSYS_NO_PATHCONV=1
을 설정합니다.
샘플 스크립트
GitHub에서 Azure CLI에 대한 이전 샘플 스크립트 및 Azure PowerShell에 대한 버전을 찾을 수 있습니다.
다음 단계
다음 문서에는 서비스 주체 및 ACR 작업에 대한 추가 세부 정보가 포함되어 있습니다.