Azure コンテナー レジストリでの認証
[アーティクル] 2024/09/30
27 人の共同作成者
フィードバック
この記事の内容
認証オプション
Microsoft Entra ID での個々のログイン
サービス プリンシパル
管理者アカウント
Docker ではなく代替コンテナー ツールを使用してログインする
次のステップ
さらに 2 個を表示
Azure コンテナー レジストリでの認証には複数の方法があり、それぞれ 1 つ以上のレジストリ使用シナリオに適用できます。
推奨される方法は次のとおりです。
個々のログイン を使用して、レジストリに対する認証を直接行います
アプリケーションとコンテナー オーケストレーターでは、Microsoft Entra のサービス プリンシパル を使用して、自動 ("ヘッドレス") 認証を実行できます
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 のプル シークレット
個人の開発者またはテスト担当者によるリポジトリへの対話型のプッシュ/プル 個々のシステムまたは外部デバイスによるリポジトリからの自動プル
はい
現時点では AD 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
コマンドではユーザー名やパスワードが不要になります。
ヒント
また、OCI 成果物 など、Docker イメージ以外の成果物をレジストリに対してプッシュまたはプルする場合は、az acr login
を使用して個々の ID を認証します。
レジストリのアクセスでは、az acr login
で使用されるトークンは 3 時間 有効なため、docker
コマンドを実行する前に常にレジストリにログインすることをお勧めします。 トークンの有効期限が切れた場合は、az acr login
コマンドを再度使用して再認証することで、トークンを更新できます。
Azure ID で az acr login
を使用すると、Azure ロールベースのアクセス制御 (Azure RBAC) が可能になります。 一部のシナリオでは、Microsoft Entra ID の自分個人の 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-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 ID を使用して認証します。 Connect-AzAccount を使用して Azure PowerShell にサインインし、Connect-AzContainerRegistry コマンドレットを実行します。
Connect-AzAccount
Connect-AzContainerRegistry -Name <acrName>
Connect-AzContainerRegistry
を使用してログインすると、PowerShell は、Connect-AzAccount
の実行時に作成されたトークンを使用して、レジストリーとのセッションをシームレスに認証します。 認証フローを完了するには、お使いの環境に Docker CLI と Docker デーモンをインストールして実行する必要があります。 Connect-AzContainerRegistry
では、Docker クライアントを使用して、docker.config
ファイルに Microsoft Entra トークンを設定します。 この方法でログインすると、資格情報がキャッシュされるので、セッションの以降の docker
コマンドではユーザー名やパスワードが不要になります。
ヒント
また、OCI 成果物 など、Docker イメージ以外の成果物をレジストリに対してプッシュまたはプルする場合は、Connect-AzContainerRegistry
を使用して個々の ID を認証します。
レジストリのアクセスでは、Connect-AzContainerRegistry
で使用されるトークンは 3 時間 有効なため、docker
コマンドを実行する前に常にレジストリにログインすることをお勧めします。 トークンの有効期限が切れた場合は、Connect-AzContainerRegistry
コマンドを再度使用して再認証することで、トークンを更新できます。
Azure ID で Connect-AzContainerRegistry
を使用すると、Azure ロールベースのアクセス制御 (Azure RBAC) が可能になります。 一部のシナリオでは、Microsoft Entra ID の自分個人の ID を使用してレジストリにログインしたり、特定の Azure ロールとアクセス許可 で他の Azure ユーザーを構成したりすることができます。 サービス間のシナリオの場合や、個々のアクセスの管理は行わないワークグループまたは開発ワークフローのニーズを処理する場合は、Azure リソース用のマネージド ID でログインすることもできます。
サービス プリンシパル をレジストリに割り当てた場合、アプリケーションやサービスではヘッドレス認証にそれを使用できます。 サービス プリンシパルを使用すると、レジストリへのAzure ロールベースのアクセス制御 (Azure RBAC) が可能になり、1 つのレジストリに複数のサービス プリンシパルを割り当てることができます。 複数のサービス プリンシパルを割り当てることで、アプリケーションごとに異なるアクセスを定義できます。
ACR 認証トークンは、ACR へのログイン時に作成され、後続の操作時に更新されます。 このトークンの有効期間は 3 時間です。
コンテナー レジストリでは次のロールを使用できます。
ロールの完全な一覧については、「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 つのパスワードを指定します。 管理者アカウント用に作成された新しいパスワードは、すぐに使用できます。 管理者アカウントのパスワードを再生成すると、レプリケートされ、60 秒後に使用可能になります。 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 PowerShell で Update-AzContainerRegistry コマンドの EnableAdminUser
パラメーターを使用します。
Update-AzContainerRegistry -Name <acrName> -ResourceGroupName myResourceGroup -EnableAdminUser
Azure Portal で管理者ユーザーを有効にするには、レジストリに移動し、[設定] の [アクセス キー] を選択して、[管理者ユーザー] の [有効にする] を選択します。
一部のシナリオでは、共通のコンテナー ツール docker
ではなく、代替のコンテナー ツール podman
を使用する必要があります。 たとえば、Docker は RHEL 8 と 9 では使用できなくなりました 。そのため、コンテナー ツールを切り替える必要があります。
既定のコンテナー ツールは、az acr login
コマンドでは docker
に設定されています。 既定のコンテナー ツールを設定せず、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 のインストール に関するページを参照してください。