次の方法で共有


レジストリ ログインのトラブルシューティング

この記事は、Azure Container Registry にログイン、認証、または承認するときに発生する可能性のある問題のトラブルシューティングに役立ちます。

症状

次の 1 つ以上を含めることができます。

  • docker loginaz 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 を実行します。

関連リンク:

資格情報がレジストリへのアクセスを承認されていることを確認する

  • ポータルを使用してレジストリ アクセスを許可するように最近アクセス許可が変更された場合は、古いブラウザー キャッシュや 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 リポジトリのアクセス許可" モードのレジストリでは、既存の AcrPullAcrPush、または AcrDelete ロールが優先されません。
      • 代わりに、このようなレジストリは、レジストリ内のリポジトリ内のイメージの読み取り、書き込み、または削除を行う Container Registry Repository ReaderContainer Registry Repository Writer、および Container Registry Repository Contributor ロールのみを受け入れます。 これらのロールには、特定のリポジトリに付与されるアクセス許可を制限するオプションの ABAC 条件が含まれる場合があります。
      • これらのロールでは、レジストリ内のリポジトリを一覧表示するためのカタログ登録情報へのアクセス許可は付与されません。 リポジトリを一覧表示する (ただし、リポジトリ内のコンテンツを読み取らない) には、 Container Registry Repository Catalog Lister ロールを ID に個別に割り当てる必要があります。 このロールは ABAC 条件をサポートしていないため、レジストリ内のすべてのリポジトリを一覧表示するアクセス許可を付与します。
      • 詳細については、 Microsoft Entra ベースのリポジトリのアクセス許可に対する Microsoft Entra 属性ベースのアクセス制御 (ABAC) に関するページを参照してください。
    • "レジストリ ロールの割り当てアクセス許可モード" が古い "RBAC レジストリのアクセス許可" オプションに設定されている場合、ID にレジストリとそのリポジトリにアクセスするためのアクセス許可がない可能性があります。
      • 既存のロールの割り当てを確認して、ID がレジストリとそのリポジトリにアクセスするための適切なアクセス許可を持っていることを確認します。
      • "RBAC レジストリのアクセス許可" モードのレジストリは、レジストリ内のリポジトリ内のイメージの読み取り、書き込み、または削除を行う AcrPullAcrPush、または AcrDelete ロールのみを受け入れます。
      • 詳細については、「 Azure Container Registry Microsoft Entra のアクセス許可とロールの概要」を参照してください。

関連リンク:

資格情報の有効期限が切れていないことを確認する

トークンと Active Directory 資格情報は、定義された期間が経過すると期限切れになり、レジストリ アクセスが妨げる可能性があります。 アクセスを有効にするには、資格情報のリセットまたは再生成が必要になる場合があります。

  • レジストリ ログインに個々の AD ID、マネージド ID、またはサービス プリンシパルを使用する場合、AD トークンは 3 時間後に期限切れになります。 レジストリにもう一度ログインします。
  • 期限切れのクライアント シークレットで AD サービス プリンシパルを使用する場合、サブスクリプション所有者またはアカウント管理者は資格情報をリセットするか、新しいサービス プリンシパルを生成する必要があります。
  • Microsoft Entra 以外のトークン ベースのリポジトリアクセス許可を使用している場合、レジストリ所有者はパスワードをリセットするか、新しいトークンを生成する必要があります。

関連リンク:

高度なトラブルシューティング

レジストリで リソース ログの収集 が有効になっている場合は、ContainerRegistryLoginEvents ログを確認します。 このログには、受信 ID と IP アドレスを含む、認証イベントと状態が格納されます。 レジストリ認証エラーのログを照会します。

関連リンク:

次のステップ

ここで問題が解決しない場合は、次のオプションを参照してください。