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

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

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

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

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

認証オプション

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

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

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

Azure CLI の az acr login

Azure PowerShell の Connect-AzContainerRegistry

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

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

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

Azure CLI の  az acr login

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

Azure サービスへの無人プル

はい Azure リソースのマネージド ID をサポートする厳選した Azure サービスからのみ使用
AKS クラスターのマネージド ID AKS クラスターが作成または更新されたときにレジストリをアタッチする 同じサブスクリプションまたは別のサブスクリプション内の AKS クラスターへの自動プル いいえ、プル アクセスのみ AKS クラスターでしか使用できない
AKS クラスターのサービス プリンシパル AKS クラスターが作成または更新されたときに有効にする 別の AD テナントのレジストリからの AKS クラスターへの自動プル いいえ、プル アクセスのみ AKS クラスターでしか使用できない
管理者ユーザー docker login 個人の開発者またはテスト担当者による対話型のプッシュ/プル

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

Azure CLI の az acr login

Azure PowerShell の Connect-AzContainerRegistry

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

個々のシステムまたは外部デバイスによるリポジトリからの自動プル
Yes 現時点では AD ID と統合されていない

Azure AD での個々のログイン

開発ワークステーションから作成したレジストリへのイメージのプッシュやプルなど、レジストリを直接操作するときは、個人の 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 ファイル内に Azure Active Directory トークンが設定されます。 この方法でログインすると、資格情報がキャッシュされるので、セッションの以降の docker コマンドではユーザー名やパスワードが不要になります。

ヒント

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

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

Azure ID で az acr login を使用すると、Azure ロールベースのアクセス制御 (Azure RBAC) が可能になります。 一部のシナリオでは、Azure AD の個人 ID を使用してレジストリにログインしたり、特定の Azure ロールとアクセス許可で他の Azure ユーザーを構成したりすることができます。 サービス間のシナリオの場合や、個々のアクセスの管理は行わないワークグループまたは開発ワークフローのニーズを処理する場合は、Azure リソース用のマネージド ID でログインすることもできます。

az acr login with --expose-token

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

このシナリオでは、最初に --expose-token パラメーターを指定して az acr login を実行します。 このオプションは、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 $TOKEN

サービス プリンシパル

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

コンテナー レジストリでは次のロールを使用できます。

  • AcrPull: プル

  • AcrPush: プルとプッシュ

  • 所有者: プル、プッシュ、他のユーザーへのロールの割り当て

ロールの完全な一覧については、「Azure Container Registry のロールとアクセス許可」をご覧ください。

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

docker login myregistry.azurecr.io

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

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

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

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

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

次の手順