次の方法で共有


ACR タスクで Azure マネージド ID を使用する

ACR タスクAzure リソースのマネージド ID を有効にします。これにより、タスクで他の Azure リソースにアクセスできます。このとき、資格情報を指定または管理する必要はありません。 たとえば、マネージド ID を使用して、コンテナー イメージを別のレジストリからプルまたは別のレジストリにプッシュするためのタスク ステップを有効にします。

この記事では、Azure CLI を使用して、ACR タスクでユーザー割り当てまたはシステム割り当てのマネージド ID を有効にする方法について説明します。 Azure Cloud Shell または Azure CLI のローカル インストールを使用できます。 それをローカルで使う場合は、バージョン 2.0.68 以降が必要です。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

説明のために、この記事のコマンドの例では az acr task create を使用して、マネージド ID を有効にする基本的なイメージ ビルド タスクを作成します。 マネージド ID を使用して ACR タスクからセキュリティで保護されたリソースにアクセスするサンプル シナリオについては、以下を参照してください。

マネージド ID を使用する理由

Azure リソース用マネージド ID は、Microsoft Entra ID で自動的に管理される ID を Azure サービスに提供します。 マネージド ID を所有する ACR タスクを構成できます。これにより、そのタスクで、タスク ステップで資格情報を渡すことなく、セキュリティで保護された Azure リソースにアクセスできます。

マネージド ID には、次の 2 種類があります。

  • ユーザー割り当て ID: この ID は複数のリソースに割り当てることができ、任意の有効期間を設定できます。 ユーザー割り当て ID は、現在プレビューの段階です。

  • システム割り当て ID: この ID は ACR タスクなど特定のリソースに固有であり、有効期間はそのリソースの有効期間と同じです。

ACR タスクでは、一方または両方の種類の ID を有効にできます。 セキュリティ プリンシパルと同様に、他のリソースへのアクセス許可を ID に付与します。 タスクが実行されると、アクセスが必要なタスク ステップで、ID を使用してリソースへのアクセスが行われます。

マネージド ID を使用する手順

次の大まかな手順に従って、ACR タスクでマネージド ID を使用します。

1. (省略可能) ユーザー割り当て ID を作成する

ユーザー割り当て ID の使用を予定している場合は、既存の ID を使用するか、Azure CLI またはその他の Azure ツールを使用して ID を作成します。 たとえば、az identity create コマンドを使用します。

システム割り当て ID のみ使用する場合は、この手順はスキップしてください。 システム割り当て ID は ACR タスクを作成するときに作成します。

2. ACR タスクで ID を有効にする

ACR タスクを作成するときに、ユーザー割り当て ID、システム割り当て ID、またはこれらの両方を必要に応じて有効にします。 たとえば、Azure CLI で --assign-identity コマンドを実行するときに パラメーターを渡します。

システム割り当て ID を有効にするには、値なしで --assign-identity を渡すか、assign-identity [system] を渡します。 次のコマンドの例は、hello-world イメージをビルドしてからシステム割り当てマネージド ID を有効にする Linux タスクをパブリック GitHub リポジトリから作成します。

az acr task create \
    --image hello-world:{{.Run.ID}} \
    --name hello-world --registry MyRegistry \
    --context https://github.com/Azure-Samples/acr-build-helloworld-node.git#main \
    --file Dockerfile \
    --commit-trigger-enabled false \
    --assign-identity

ユーザー割り当て ID を有効にするには、ID の--assign-identity の値を指定して を渡します。 次のコマンドの例は、hello-world イメージをビルドしてからユーザー割り当てマネージド ID を有効にする Linux タスクをパブリック GitHub リポジトリから作成します。

az acr task create \
    --image hello-world:{{.Run.ID}} \
    --name hello-world --registry MyRegistry \
    --context https://github.com/Azure-Samples/acr-build-helloworld-node.git#main \
    --file Dockerfile \
    --commit-trigger-enabled false
    --assign-identity <resourceID>

az identity show コマンドを実行することで ID のリソース ID を取得できます。 リソース グループ myResourceGroup の ID myUserAssignedIdentity のリソース ID は次の形式です。

"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myUserAssignedIdentity"

ABAC 対応のソース レジストリを使用している場合は、新しい --source-acr-auth-id フラグを使用して ABAC 対応ソース レジストリで認証するためにタスクで使用されるマネージド ID を明示的にアタッチして設定する必要があります。 その後、別のロールの割り当てを (省略可能な ABAC 条件で) 実行して、ABAC 対応のソース レジストリに対してこの ID アクセス許可を付与する必要があります。

詳細については、「 ACR タスク、クイック タスク、クイック ビルド、およびクイック実行に対する ABAC の有効化の効果」を参照してください。

3. 他の Azure リソースにアクセスするためのアクセス許可を ID に付与する

タスクの要件に応じて、他の Azure リソースにアクセスするためのアクセス許可を ID に付与します。 たとえば、次のようになります。

  • マネージド ID に、Azure 内のターゲット コンテナー レジストリに対するプル、プッシュとプル、またはその他のアクセス許可を持つロールを割り当てます。 レジストリ ロールの完全な一覧については、「 Azure Container Registry Entra のアクセス許可とロールの概要」を参照してください。
  • Azure Key Vault でシークレットを読み取るためのロールをマネージド ID に割り当てます。

Azure CLI またはその他の Azure ツールを使用して、リソースへのロールベースのアクセスを管理します。 たとえば、az role assignment create コマンドを実行して、リソースへのロールを ID に割り当てます。

次の例では、コンテナー レジストリからプルできるアクセス許可をマネージド ID に割り当てています。 このコマンドでは、タスク ID のプリンシパル ID とターゲット レジストリのリソース ID を指定しています。

ロールの割り当てで使用する正しいロールは、レジストリが ABAC 対応かどうかによって異なります。

ROLE="Container Registry Repository Reader" # For ABAC-enabled registries. For non-ABAC registries, use AcrPull.
az role assignment create \
  --assignee <principalID> \
  --scope <registryID> \
  --role "$ROLE"

4.(省略可能) タスクに資格情報を追加する

別のカスタム レジストリにイメージをプルまたはプッシュしたり、他のリソースにアクセスしたりするためにタスクで資格情報が必要な場合は、そのタスクに資格情報を追加します。 az acr task credential add コマンドを実行して資格情報を追加し、ID が資格情報にアクセスできることを示すために --use-identity パラメーターを渡します。

たとえば、システム割り当て ID の資格情報を追加して、Azure コンテナー レジストリ targetregistry で認証を行うには、use-identity [system] を渡します。

az acr task credential add \
    --name helloworld \
    --registry myregistry \
    --login-server targetregistry.azurecr.io \
    --use-identity [system]

ユーザー割り当て ID の資格情報を追加して、レジストリ targetregistry で認証を行うには、ID のuse-identity の値を指定して を渡します。 次に例を示します。

az acr task credential add \
    --name helloworld \
    --registry myregistry \
    --login-server targetregistry.azurecr.io \
    --use-identity <clientID>

az identity show コマンドを実行することで ID のクライアント ID を取得できます。 クライアント ID は、形式 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx の GUID です。

5.タスクを実行する

マネージド ID でタスクを構成したら、タスクを実行します。 たとえば、この記事で作成したタスクのいずれかをテストするには、az acr task run コマンドを使用して手動でそれをトリガーします。 追加の自動タスク トリガーを構成した場合は、自動的にトリガーされたときにタスクは実行されます。

次のステップ

この記事では、ACR タスクでユーザー割り当てまたはシステム割り当てのマネージド ID を有効にし、使用する方法について説明しました。 マネージド ID を使用して ACR タスクからセキュリティで保護されたリソースにアクセスするシナリオについては、以下を参照してください。