この記事は、Azure Container Registry にログイン、認証、または承認するときに発生する可能性のある問題のトラブルシューティングに役立ちます。
症状
次の 1 つ以上を含めることができます。
-
docker login
、az acr login
、またはその両方を使用してレジストリにログインできない - レジストリにログインできず、エラー
unauthorized: authentication required
またはunauthorized: Application not registered with AAD
- レジストリにログインできず、Azure CLI エラーが発生する
Could not connect to the registry login server
- イメージをプッシュまたはプルできず、Docker エラーが発生する
unauthorized: authentication required
-
az acr login
を使用してレジストリにアクセスできず、エラーが発生するCONNECTIVITY_REFRESH_TOKEN_ERROR. Access to registry was denied. Response code: 403. Unable to get admin user credentials with message: Admin user is disabled. Unable to authenticate using AAD or admin login credentials.
- Azure Kubernetes Service、Azure DevOps、または別の Azure サービスからレジストリにアクセスできない
- レジストリにアクセスできず、エラー
Error response from daemon: login attempt failed with status: 403 Forbidden
が表示される - レジストリに関するネットワークの問題のトラブルシューティングを参照してください - Azure portal でレジストリ設定にアクセスまたは表示できない、または Azure CLI を使用してレジストリを管理できない
原因
- お使いの環境で Docker が正しく構成されていない - ソリューション
- レジストリが存在しないか、名前が正しくありません - 解決策
- レジストリ資格情報が無効です - 解決策
- レジストリのパブリック アクセスが無効になっています。 レジストリのパブリック ネットワーク アクセス規則によるアクセスの防止 - ソリューション
- 資格情報がプッシュ、プル、または Azure Resource Manager の操作に対して承認されていない - ソリューション
- 資格情報の有効期限が切れています - ソリューション
- Microsoft Entra のロールベースのアクセス制御 (RBAC) を使用して Microsoft Entra ID (ユーザー、マネージド ID、またはサービス プリンシパル) のレジストリアクセス許可を管理している場合、ID にはレジストリアクセス許可がありますが、リポジトリのアクセス許可は持っていない可能性があります- ソリューション
さらなる診断
az acr check-health コマンドを実行して、レジストリ環境の正常性に関する詳細情報を取得し、必要に応じてターゲット レジストリにアクセスします。 たとえば、Docker 構成エラーや Microsoft Entra ログインの問題を診断します。
コマンドの例については、「 Azure コンテナー レジストリの正常性を確認 する」を参照してください。 エラーが報告された場合は、 エラーリファレンス と以下のセクションで推奨される解決策を確認してください。
ACR から AKS クラスターにイメージをプルできない場合は、AKS サポート ドキュメントの指示に従ってください。
注
一部の認証または承認エラーは、レジストリ アクセスを妨げるファイアウォールまたはネットワーク構成がある場合にも発生する可能性があります。 レジストリに関するネットワークの問題のトラブルシューティングを参照してください。
潜在的なソリューション
Docker の構成を確認する
ほとんどの Azure Container Registry 認証フローでは、イメージのプッシュやプルなどの操作のためにレジストリで認証できるように、ローカルの Docker インストールが必要です。 Docker CLI クライアントとデーモン (Docker エンジン) が環境内で実行されていることを確認します。 Docker クライアント バージョン 18.03 以降が必要です。
関連リンク:
正しいレジストリ名を指定する
docker login
を使用する場合は、レジストリの完全なログイン サーバー名 (myregistry.azurecr.io など) を指定します。 必ず小文字のみを使用してください。 例:
docker login myregistry.azurecr.io
Microsoft Entra ID で az acr login を使用する場合は、まず Azure CLI にサインインしてから、レジストリの Azure リソース名を指定します。 リソース名は、レジストリの作成時に指定された名前です (ドメイン サフィックスなしの myregistry など)。 例:
az acr login --name myregistry
関連リンク:
レジストリにアクセスするための資格情報を確認する
シナリオに使用する資格情報、またはレジストリ所有者から提供された資格情報の有効性を確認します。 考えられるいくつかの問題:
- Active Directory サービス プリンシパルを使用する場合は、Active Directory テナントで正しい資格情報を使用してください。
- ユーザー名 - サービス プリンシパル アプリケーション ID ( クライアント ID とも呼ばれます)
- パスワード - サービス プリンシパルのパスワード ( クライアント シークレットとも呼ばれます)
- Azure Kubernetes Service や Azure DevOps などの Azure サービスを使用してレジストリにアクセスする場合は、サービスのレジストリ構成を確認します。
- docker デーモンを使用せずにレジストリ ログインを有効にする
az acr login
オプションで--expose-token
を実行した場合は、必ずユーザー名00000000-0000-0000-0000-000000000000
で認証してください。 - レジストリが 匿名プル アクセス用に構成されている場合、以前の Docker ログインから格納されている既存の Docker 資格情報によって匿名アクセスが禁止される可能性があります。 レジストリで匿名のプル操作を試行する前に、
docker logout
を実行します。
関連リンク:
- 認証の概要
- レジストリアクセス許可の Microsoft Entra ロールベースのアクセス制御 (RBAC) を管理します。
- Microsoft Entra ベースのリポジトリのアクセス許可に対する Microsoft Entra 属性ベースのアクセス制御 (ABAC) を管理します。
- Microsoft Entra ID を使用した個別ログイン
- サービスプリンシパルでログイン
- マネージド ID を使用したログイン
- Microsoft Entra 以外のトークン ベースのリポジトリアクセス許可を使用してログインする
- 管理者アカウントでログインする
- Microsoft Entra の認証と承認のエラー コード
- az acr login リファレンス
資格情報がレジストリへのアクセスを承認されていることを確認する
- ポータルを使用してレジストリ アクセスを許可するように最近アクセス許可が変更された場合は、古いブラウザー キャッシュや Cookie を回避するために、ブラウザーでシークレットまたはプライベート セッションを試す必要がある場合があります。
- ユーザーまたはレジストリ所有者は、Microsoft Entra ロールの割り当てを追加、変更、または削除するために、サブスクリプションに十分な特権を持っている必要があります。 Microsoft Entra ロールの割り当てを管理するためのアクセス許可は、
Role Based Access Control Administrator
ロールによって付与されます。 - Azure CLI を使用してポータルまたはレジストリ管理のレジストリにアクセスするには、Azure Resource Manager 操作を実行するために、少なくとも
Container Registry Contributor and Data Access Configuration Administrator
ロールまたは同等のアクセス許可が必要です。
ID のアクセス許可とロールの割り当てを検証する
- レジストリのアクセス許可を管理するために Microsoft Entra ロールベースのアクセス制御 (RBAC) を使用している場合は、ID (ユーザー、マネージド ID、またはサービス プリンシパル) に正しいロールの割り当てとアクセス許可があることを確認します。
- (Azure portal の [プロパティ] ブレードで) "レジストリ ロールの割り当てアクセス許可モード" が新しい "RBAC レジストリ + ABAC リポジトリのアクセス許可" オプションに設定されていて、ID がイメージをプッシュ、プル、または削除できない場合、ID にイメージが存在する特定のリポジトリにアクセスするためのアクセス許可がない可能性があります。
- 既存のロールの割り当てとロールの割り当ての ABAC 条件を確認して、ID がリポジトリにアクセスするための適切なアクセス許可を持っていることを確認します。
-
"RBAC レジストリ + ABAC リポジトリのアクセス許可" モードのレジストリでは、既存の
AcrPull
、AcrPush
、またはAcrDelete
ロールが優先されません。 - 代わりに、このようなレジストリは、レジストリ内のリポジトリ内のイメージの読み取り、書き込み、または削除を行う
Container Registry Repository Reader
、Container Registry Repository Writer
、およびContainer Registry Repository Contributor
ロールのみを受け入れます。 これらのロールには、特定のリポジトリに付与されるアクセス許可を制限するオプションの ABAC 条件が含まれる場合があります。 - これらのロールでは、レジストリ内のリポジトリを一覧表示するためのカタログ登録情報へのアクセス許可は付与されません。 リポジトリを一覧表示する (ただし、リポジトリ内のコンテンツを読み取らない) には、
Container Registry Repository Catalog Lister
ロールを ID に個別に割り当てる必要があります。 このロールは ABAC 条件をサポートしていないため、レジストリ内のすべてのリポジトリを一覧表示するアクセス許可を付与します。 - 詳細については、 Microsoft Entra ベースのリポジトリのアクセス許可に対する Microsoft Entra 属性ベースのアクセス制御 (ABAC) に関するページを参照してください。
- "レジストリ ロールの割り当てアクセス許可モード" が古い "RBAC レジストリのアクセス許可" オプションに設定されている場合、ID にレジストリとそのリポジトリにアクセスするためのアクセス許可がない可能性があります。
- 既存のロールの割り当てを確認して、ID がレジストリとそのリポジトリにアクセスするための適切なアクセス許可を持っていることを確認します。
-
"RBAC レジストリのアクセス許可" モードのレジストリは、レジストリ内のリポジトリ内のイメージの読み取り、書き込み、または削除を行う
AcrPull
、AcrPush
、またはAcrDelete
ロールのみを受け入れます。 - 詳細については、「 Azure Container Registry Microsoft Entra のアクセス許可とロールの概要」を参照してください。
- (Azure portal の [プロパティ] ブレードで) "レジストリ ロールの割り当てアクセス許可モード" が新しい "RBAC レジストリ + ABAC リポジトリのアクセス許可" オプションに設定されていて、ID がイメージをプッシュ、プル、または削除できない場合、ID にイメージが存在する特定のリポジトリにアクセスするためのアクセス許可がない可能性があります。
関連リンク:
- Azure Container Registry Microsoft Entra のアクセス許可とロールの概要
- レジストリアクセス許可の Microsoft Entra ロールベースのアクセス制御 (RBAC) を管理します。
- Microsoft Entra ベースのリポジトリのアクセス許可に対する Microsoft Entra 属性ベースのアクセス制御 (ABAC) を管理します。
- Azure portal を使用して Azure ロールの割り当てを追加または削除する
- ポータルを使用して、リソースにアクセスできる Microsoft Entra アプリケーションとサービス プリンシパルを作成する
- 新しいアプリケーション シークレットを作成する
- Microsoft Entra の認証と承認コード
- Microsoft Entra 以外のトークン ベースのリポジトリアクセス許可を使用してログインする
資格情報の有効期限が切れていないことを確認する
トークンと Active Directory 資格情報は、定義された期間が経過すると期限切れになり、レジストリ アクセスが妨げる可能性があります。 アクセスを有効にするには、資格情報のリセットまたは再生成が必要になる場合があります。
- レジストリ ログインに個々の AD ID、マネージド ID、またはサービス プリンシパルを使用する場合、AD トークンは 3 時間後に期限切れになります。 レジストリにもう一度ログインします。
- 期限切れのクライアント シークレットで AD サービス プリンシパルを使用する場合、サブスクリプション所有者またはアカウント管理者は資格情報をリセットするか、新しいサービス プリンシパルを生成する必要があります。
- Microsoft Entra 以外のトークン ベースのリポジトリアクセス許可を使用している場合、レジストリ所有者はパスワードをリセットするか、新しいトークンを生成する必要があります。
関連リンク:
高度なトラブルシューティング
レジストリで リソース ログの収集 が有効になっている場合は、ContainerRegistryLoginEvents ログを確認します。 このログには、受信 ID と IP アドレスを含む、認証イベントと状態が格納されます。 レジストリ認証エラーのログを照会します。
関連リンク:
次のステップ
ここで問題が解決しない場合は、次のオプションを参照してください。
- レジストリのトラブルシューティングに関するその他のトピックは次のとおりです。
- コミュニティ サポート オプション
- Microsoft Q&A
- サポート チケットを開く - 指定した情報に基づいて、レジストリの認証エラーに対して迅速な診断が実行される可能性があります