次の方法で共有


Azure Container Instances から Azure Container Registry の認証を受ける

Microsoft Entra サービス プリンシパルを使用して、Azure Container Registry の非公開のコンテナー レジストリへのアクセスを提供できます。

この記事では、レジストリへのプルのアクセス許可を持つ Microsoft Entra サービス プリンシパルを作成および構成する方法を説明します。 その後で、認証用のサービス プリンシパルを使って、プライベート レジストリからそのイメージをプルする Azure Container Instances (ACI) のコンテナーを起動します。

サービス プリンシパルを使う場合

サービス プリンシパルは、自動的にまたはそれ以外の無人の方法でコンテナー インスタンスを作成するアプリケーションやサービスなどのヘッドレス シナリオで ACI から認証を受けるために使う必要があります。

たとえば、夜間に実行され、何らかのデータを処理するタスク ベースのコンテナー インスタンスを作成する自動スクリプトがある場合、このスクリプトでは、プルのみのアクセス許可を持つサービス プリンシパルを使ってレジストリへの認証を受けることができます。 その後、サービス プリンシパルの資格情報を交換したり、他のサービスやアプリケーションにまったく影響を与えずにそのアクセスを取り消したりできます。

サービス プリンシパルは、レジストリの admin ユーザーが無効のときにも使う必要があります。

サービス プリンシパルの作成

コンテナー レジストリへのアクセス権を持つサービス プリンシパルを作成するには、Azure Cloud Shell または Azure CLI のローカル インストールで、次のスクリプトを実行します。 スクリプトは Bash シェル用に書式設定されています。

スクリプトを実行する前に、ACR_NAME 変数をコンテナー レジストリの名前で更新します。 SERVICE_PRINCIPAL_NAME の値は、Microsoft Entra テナント内で一意である必要があります。 "'http://acr-service-principal' already exists." エラーが発生した場合は、別のサービス プリンシパルの名前を指定します。

別のアクセス権を付与する場合は、必要に応じて --role コマンドの --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"

既存のサービス プリンシパルの使用

既存のサービス プリンシパルにレジストリへのアクセスを与えるには、サービス プリンシパルに新しいロールを割り当てる必要があります。 新しいサービス プリンシパルの作成と同様に、特に、プル、プッシュとプル、所有者のアクセスを付与できます。

次のスクリプトでは、az role assignment create コマンドを使って、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 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>

Note

Azure Cloud Shell の最新バージョンでコマンドを実行することをお勧めします。 オンプレミスの bash 環境を実行するために export MSYS_NO_PATHCONV=1 を設定します。

サンプルのスクリプト

Azure CLI の以前のサンプル スクリプトを GitHub 上で検索できます。各バージョンのAzure PowerShell についても同様です。

次のステップ

次の記事には、サービス プリンシパルと ACR の使用方法の詳細が含まれています。