次の方法で共有


Azure コンテナー レジストリでの認証

Azure コンテナー レジストリでの認証には複数の方法があり、それぞれ 1 つ以上のレジストリ使用シナリオに適用できます。

推奨される方法は次のとおりです。

  • 個々のログインを使用して、レジストリに対する認証を直接行います
  • アプリケーションとコンテナー オーケストレーターでは、Microsoft Entra のサービス プリンシパルを使用して、自動 ("ヘッドレス") 認証を実行できます

Azure Kubernetes Service (AKS) または別の Kubernetes クラスターでコンテナー レジストリを使用する場合は、「Kubernetes から Azure Container Registry で認証を受けるシナリオ」を参照してください。

認証オプション

次の表に、使用可能な認証方法と一般的なシナリオを示します。 詳細については、リンク先のコンテンツを参照してください。

方法 認証方法 シナリオ Microsoft Entra ロールベースのアクセス制御 (RBAC) 制限事項
個々の Microsoft Entra ID  Azure CLI の az acr login

Azure PowerShell の Connect-AzContainerRegistry
開発者、テスト担当者による対話型のプッシュ/プル はい Microsoft Entra トークンは 3 時間ごとに更新する必要があります
Microsoft Entra サービス プリンシパル。  docker login

Azure CLI の az acr login

Azure PowerShell の Connect-AzContainerRegistry

API またはツールのレジストリ ログイン設定

Kubernetes のプル シークレット   
CI/CD パイプラインからの無人プッシュ

Azure または外部サービスへの無人プル
はい SP パスワードの既定の有効期限は 1 年である
Azure リソースの Microsoft Entra マネージド ID  docker login

 Azure CLI の az acr login

Azure PowerShell の Connect-AzContainerRegistry
Azure CI/CD パイプラインからの無人プッシュ

Azure サービスへの無人プル

マネージド ID ロールの割り当てシナリオの一覧については、 ACR ロールの割り当てシナリオを参照してください
イエス

ACR 組み込みロールを使用した Microsoft Entra RBAC ロールの割り当て

Microsoft Entra ベースのリポジトリのアクセス許可に対する Microsoft Entra 属性ベースのアクセス制御 (ABAC) 
Azure リソースのマネージド ID をサポートする厳選した Azure サービスからのみ使用
AKS クラスター ノード kubelet のマネージドアイデンティティ  AKS クラスターが作成または更新されたときにレジストリをアタッチする 同じサブスクリプションまたは別のサブスクリプション内の AKS クラスター ノードへの自動プル いいえ、プル アクセスのみ AKS クラスターでしか使用できない

テナント間認証には使用できない
AKS クラスターのサービス プリンシパル  AKS クラスターが作成または更新されたときに有効にする 別の Entra テナントのレジストリからの AKS クラスターへの非アテンド型プル いいえ、プル アクセスのみ AKS クラスターでしか使用できない
管理者ユーザー  docker login  個人の開発者またはテスト担当者による対話型のプッシュ/プル

レジストリから Azure App Service または Azure Container Instances へのイメージのポータル展開
いいえ、常にプルおよびプッシュ アクセス レジストリごとに 1 つのアカウント (複数のユーザーの場合は推奨されません)
Microsoft Entra 以外のトークン ベースのリポジトリのアクセス許可  docker login

Azure CLI の az acr login

Azure PowerShell の Connect-AzContainerRegistry

Kubernetes のプル シークレット 
個人の開発者またはテスト担当者によるリポジトリへの対話型のプッシュ/プル

個々のシステムまたは外部デバイスによるリポジトリからの自動プル
トークンベースのリポジトリのアクセス許可 では、 Microsoft Entra RBAC ロールの割り当てはサポートされていません。

Microsoft Entra ベースのリポジトリのアクセス許可については、代わりに Microsoft Entra ベースのリポジトリのアクセス許可に対する Microsoft Entra 属性ベースのアクセス制御 (ABAC) を参照してください。
現在、Microsoft Entra ID と統合されていません

Microsoft Entra ID での個々のログイン

開発ワークステーションから作成したレジストリへのイメージのプッシュやプルなど、レジストリを直接操作するときは、個人の Azure ID を使用して認証します。 az login を使用して Azure CLI にサインインし、az acr login コマンドを実行します。

az login
az acr login --name <acrName>

az acr login を使用してログインすると、CLI は az login の実行時に作成されたトークンを使用して、レジストリとのセッションをシームレスに認証します。 認証フローを完了するには、お使いの環境に Docker CLI と Docker デーモンをインストールして実行する必要があります。 az acr login では、Docker クライアントを使用して、docker.config ファイルに Microsoft Entra トークンを設定します。 この方法でログインすると、資格情報がキャッシュされ、セッション内の後続の docker コマンドにユーザー名やパスワードは必要ありません。

ヒント

また、az acr loginなど、Docker イメージ以外の成果物をレジストリに対してプッシュまたはプルする場合は、 を使用して個々の ID を認証します。

レジストリのアクセスでは、az acr login で使用されるトークンは 3 時間有効なため、docker コマンドを実行する前に常にレジストリにログインすることをお勧めします。 トークンの有効期限が切れた場合は、az acr login コマンドを再度使用して再認証することで、トークンを更新できます。

Azure ID で az acr login を使用すると、 Azure ロールベースのアクセス制御 (RBAC) が提供されます。 シナリオによっては、Microsoft Entra ID で独自の ID を使用してレジストリにログインしたり、特定のロールを持つ他の Azure ユーザーを構成したりできます。 Azure Container Registry Entra のアクセス許可とロールの概要を参照してください。 サービス間のシナリオの場合や、個々のアクセスの管理は行わないワークグループまたは開発ワークフローのニーズを処理する場合は、Azure リソース用のマネージド ID でログインすることもできます。

az acr のログインに --expose-token を使用する

場合によっては、お使いの環境で Docker デーモンが実行されていない場合に、az acr login での認証が必要になります。 たとえば、Azure Cloud Shell のスクリプトで az acr login を実行することが必要になる場合があります。この場合 Docker CLI は提供されますが、Docker デーモンは実行されません。

このシナリオでは、最初に az acr login パラメーターを指定して --expose-token を実行します。 このオプションは、Docker CLI を使用してログインするのではなく、アクセス トークンを公開します。

az acr login --name <acrName> --expose-token

出力には、次のようにアクセス トークン (ここでは省略されています) が表示されます。

{
  "accessToken": "eyJhbGciOiJSUzI1NiIs[...]24V7wA",
  "loginServer": "myregistry.azurecr.io"
}

レジストリ認証の場合は、トークン資格情報を安全な場所に保存し、docker ログインを管理するための推奨プラクティスに従うことをお勧めします。 たとえば、次のようにトークン値を環境変数に格納します。

TOKEN=$(az acr login --name <acrName> --expose-token --output tsv --query accessToken)

次に、docker login を実行し、ユーザー名として 00000000-0000-0000-0000-000000000000 を渡し、アクセス トークンをパスワードとして使用します。

docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN

同様に、az acr login および helm registry login コマンドによって返されたトークンを使用して、レジストリで認証できます。

echo $TOKEN | helm registry login myregistry.azurecr.io \
            --username 00000000-0000-0000-0000-000000000000 \
            --password-stdin

サービス プリンシパル

サービス プリンシパルをレジストリに割り当てた場合、アプリケーションやサービスではヘッドレス認証にそれを使用できます。 サービス プリンシパルを使用すると、 Azure ロールベースのアクセス制御 (RBAC) をレジストリに割り当てることができ、複数のサービス プリンシパルをレジストリに割り当てることができます。 複数のサービス プリンシパルを割り当てることで、アプリケーションごとに異なるアクセスを定義できます。

ACR 認証トークンは、ACR へのログイン時に作成され、後続の操作時に更新されます。 このトークンの有効期間は 3 時間です。

使用可能なロールの一覧については、 Azure Container Registry Entra のアクセス許可とロールの概要を参照してください。

Azure コンテナー レジストリを使用した認証のためのサービス プリンシパルを作成する CLI スクリプトと詳しいガイダンスについては、「サービス プリンシパルによる Azure Container Registry 認証」を参照してください。

管理者アカウント

各コンテナー レジストリには管理者ユーザー アカウントが含まれており、このアカウントは既定で無効になっています。 Azure ポータルで、または Azure CLI、Azure PowerShell、またはその他の Azure ツールを使用して、管理ユーザーを有効にし、その資格情報を管理できます。 管理者アカウントには、レジストリに対する完全なアクセス許可があります。

コンテナー レジストリから特定の Azure サービスにイメージをデプロイするいくつかのシナリオでは、現在、管理者アカウントが必要です。 たとえば、管理者アカウントは、Azure portal を使用してコンテナー イメージをレジストリから Azure Container Instances または Azure Web Apps for Containers に直接デプロイする場合に必要になります。

重要

管理者アカウントは、主にテストのために、1 人のユーザーがレジストリにアクセスすることを目的としています。 複数のユーザー間で管理者アカウントの資格情報を共有することはお勧めしません。 管理者アカウントで認証するすべてのユーザーが、レジストリへのプル/プッシュアクセス権を持つ 1 人のユーザーとして表示されます。 このアカウントを変更したり、無効にしたりすると、その資格情報を使用するすべてのユーザーのレジストリ アクセスが無効になります。 ユーザーおよびヘッドレス シナリオ用のサービス プリンシパルには、個人 ID を使用することをお勧めします。

管理者アカウントには、再生成できる 2 つのパスワードを指定します。 管理者アカウント用に作成された新しいパスワードは、すぐに使用できます。 管理者アカウントのパスワードを再生成すると、レプリケートされ、60 秒後に使用可能になります。 2 つのパスワードにより、一方のパスワードを再生成している間に、もう一方のパスワードを使用してレジストリへの接続を維持できます。 管理者アカウントが有効になっている場合は、レジストリに対する基本認証についてのメッセージが表示されたら、ユーザー名とどちらかのパスワードを docker login コマンドに渡すことができます。 次に例を示します。

docker login myregistry.azurecr.io

ログイン資格情報の管理の推奨プラクティスについては、docker login コマンドのリファレンスをご覧ください。

既存のレジストリの管理者ユーザーを有効にするには、Azure CLI で --admin-enabled コマンドの パラメーターを使用します。

az acr update -n <acrName> --admin-enabled true

Azure Portal で管理者ユーザーを有効にするには、レジストリに移動し、[設定][アクセス キー] を選択して、[管理者ユーザー][有効にする] を選択します。

Azure Portal の管理者ユーザーを有効にする UI

Docker ではなく代替コンテナー ツールを使用してログインする

一部のシナリオでは、共通のコンテナー ツール podman ではなく、代替のコンテナー ツール docker を使用する必要があります。 たとえば、Docker は RHEL 8 と 9 では使用できなくなりました。そのため、コンテナー ツールを切り替える必要があります。

既定のコンテナー ツールは、docker コマンドでは az acr login に設定されています。 既定のコンテナー ツールを設定せず、docker コマンドが環境内に見つからない場合は、次のエラーが表示されます。

az acr login --name <acrName>
2024-03-29 07:30:10.014426 An error occurred: DOCKER_COMMAND_ERROR
Please verify if Docker client is installed and running.

az acr login コマンドで使用される既定のコンテナー ツールを変更するには、環境変数 DOCKER_COMMAND を設定します。 次に例を示します。

DOCKER_COMMAND=podman \
az acr login --name <acrName>

この機能を使用するには、Azure CLI バージョン 2.59.0 以降がインストールされて構成されている必要があります。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

次のステップ