この記事では、Azure CLI を使用して、認証の有無にかかわらず、Azure Container Registry (ACR) で アーティファクト キャッシュ機能 を有効にする方法について説明します。
ここに記載されている前提条件に加えて、アクティブなサブスクリプションを持つ Azure アカウントが必要です。 無料でアカウントを作成できます。
[前提条件]
- Azure CLI。
Azure Cloud Shell または Azure CLI のローカル インストールを使用して、この記事のコマンドを実行できます。 ローカルで使用するには、Azure CLI バージョン 2.46.0 以降が必要です。 Azure CLI のバージョンを確認するには、
az --version
実行します。 インストールまたはアップグレードする必要には、「Azure CLI のインストール」をご覧ください。 - 既存の ACR インスタンス。 まだお持ちでない場合は、 クイック スタートを使用して新しいコンテナー レジストリを作成します。
- 資格情報を作成して格納するための既存の Key Vault。
- Key Vault からシークレットを設定および取得するためのアクセス許可。
この記事では、 MyRegistry
という名前の ACR インスタンスの例を使用します。
資格情報を作成する
資格情報を構成する前に、 シークレットを作成して Azure Key Vault に格納し、Key Vaultからシークレットを取得できることを確認します。
az acr credential set create
を実行します。az acr credential-set create -r MyRegistry \ -n MyDockerHubCredSet \ -l docker.io \ -u https://MyKeyvault.vault.azure.net/secrets/usernamesecret \ -p https://MyKeyvault.vault.azure.net/secrets/passwordsecret
az acr credential set update
実行して、資格情報セットのユーザー名またはパスワードの Key Vault シークレット ID を更新します。az acr credential-set update -r MyRegistry -n MyDockerHubCredSet -p https://MyKeyvault.vault.azure.net/secrets/newsecretname
az acr credential-set show を実行して資格情報を表示します。
az acr credential-set show -r MyRegistry -n MyDockerHubCredSet
キャッシュ ルールを作成する
次に、リポジトリからキャッシュにアーティファクトをプルするキャッシュ ルールを作成して構成します。
新しいキャッシュ 規則を作成するには、
az acr cache create
実行します。az acr cache create -r MyRegistry -n MyRule -s docker.io/library/ubuntu -t ubuntu -c MyDockerHubCredSet
キャッシュ 規則の資格情報を更新するには、
az acr cache update
実行します。az acr cache update -r MyRegistry -n MyRule -c NewCredSet
資格情報を削除する必要がある場合は、
az acr cache update -r MyRegistry -n MyRule --remove-cred-set
を実行します。キャッシュ ルールを表示するには、
az acr cache show
を実行します。az acr cache show -r MyRegistry -n MyRule
ヒント
資格情報を使用せずにキャッシュ ルールを作成するには、資格情報を指定せずに同じコマンドを使用します。 たとえば、az acr cache create --registry Myregistry --name MyRule --source-repo MySourceRepository --target-repo MyTargetRepository
のようにします。 Docker Hub などの一部のソースでは、キャッシュ ルールを作成するために資格情報が必要です。
Azure RBAC を使用して Key Vault にアクセス許可を割り当てる
Azure RBAC を使用して、ユーザーが Azure Key Vault にアクセスできるように適切なアクセス許可をユーザーに割り当てることができます。
Key Vault にアクセスするには、 Microsoft.KeyVault/vaults/secrets/getSecret/action
アクセス許可が必要です。
Key Vault シークレット ユーザー Azure 組み込みロールは、通常、このアクションを含む最小限の特権ロールであるため、付与されます。 または、そのアクセス許可を含むカスタム ロールを作成することもできます。
使用される手順は、Azure CLI と Bash のどちらを使用しているかによって異なります。
Key Vault へのアクセスに使用されているシステム ID のプリンシパル ID を取得します。
az acr credential-set show --name MyCredentialSet --registry MyRegistry
手順 3 で必要になるので、プリンシパル ID の値を書き留めます。
Key Vault のプロパティを表示して、そのリソース ID を取得します。
az keyvault show --name MyKeyVaultName --resource-group MyResouceGroup
このリソース ID 値は、次の手順で必要になります。
資格情報セットのシステム ID に Key Vault シークレット ユーザー ロールを割り当てます。
az role assignment create --role "Key Vault Secrets User" --assignee CredentialSetPrincipalID --scope KeyVaultResourceID
ヒント
Key Vault のリソース ID を使用すると、Key Vault 内のすべてのシークレットへのアクセスが許可されます。 必要に応じて、ユーザー名とパスワードのシークレットにのみアクセス権を付与できます。 これを行うには、手順 2 のコマンドではなく、次のコマンドを実行して、ユーザー名とパスワードのシークレットのみを取得します。
az keyvault secret show --vault-name MyKeyVaultName --name MyUsernameSecretName
az keyvault secret show --vault-name MyKeyVaultName --name MyPasswordSecretName
次に、手順 3 を 2 回実行し、最初に KeyVaultResourceID
をユーザー名シークレットの ID に置き換え、次にパスワード シークレットの ID に置き換えます。
アクセス ポリシーを使用して Key Vault にアクセス許可を割り当てる
または、アクセス ポリシーを使用してアクセス許可を割り当てることができます。
Key Vault へのアクセスに使用されているシステム ID のプリンシパル ID を取得します。
az acr credential-set show --name CredentialSet --registry MyRegistry
次の手順で必要になるので、プリンシパル ID の値を書き留めます。
イメージをプルする前に、
az keyvault set-policy
コマンドを実行して Key Vault へのアクセスを割り当てます。 たとえば、KeyVault シークレットにアクセスするための資格情報のアクセス許可を割り当てるには、次のようにします。az keyvault set-policy --name MyKeyVault --object-id MyCredentialSetPrincipalID --secret-permissions get
イメージをプルする
キャッシュからイメージをプルするには、Docker コマンドを使用し、レジストリ サインイン サーバー名、リポジトリ名、および目的のタグを指定します。 たとえば、レジストリ サインイン サーバー myregistry.azurecr.io
の目的のタグ latest
を使用してリポジトリ hello-world
からイメージをプルするには、次を実行します。
docker pull myregistry.azurecr.io/hello-world:latest
リソースをクリーンアップする
不要になったら、作成したキャッシュ ルールと資格情報を削除します。
キャッシュ ルールを削除するには、
az acr cache delete
を実行します。az acr cache delete -r MyRegistry -n MyRule
資格情報を削除するには、次
az acr credential-set delete
実行します。az acr credential-set delete -r MyRegistry -n MyDockerHubCredSet
次のステップ
- アーティファクト キャッシュに関する問題のトラブルシューティングについて説明します。
- Azure portal を使用してアーティファクト キャッシュを有効にする方法について説明します。