次の方法で共有


Azure CLI を使用して Azure Container Registry でアーティファクト キャッシュを有効にする

この記事では、Azure CLI を使用して、認証の有無にかかわらず、Azure Container Registry (ACR) で アーティファクト キャッシュ機能 を有効にする方法について説明します。

ここに記載されている前提条件に加えて、アクティブなサブスクリプションを持つ Azure アカウントが必要です。 無料でアカウントを作成できます

[前提条件]

この記事では、 MyRegistryという名前の ACR インスタンスの例を使用します。

資格情報を作成する

資格情報を構成する前に、 シークレットを作成して Azure Key Vault に格納し、Key Vaultからシークレットを取得できることを確認します。

  1. 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
    
  2. 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
    
  3. az acr credential-set show を実行して資格情報を表示します。

    az acr credential-set show -r MyRegistry -n MyDockerHubCredSet
    

キャッシュ ルールを作成する

次に、リポジトリからキャッシュにアーティファクトをプルするキャッシュ ルールを作成して構成します。

  1. 新しいキャッシュ 規則を作成するには、 az acr cache create実行します。

    az acr cache create -r MyRegistry -n MyRule -s docker.io/library/ubuntu -t ubuntu -c MyDockerHubCredSet
    
  2. キャッシュ 規則の資格情報を更新するには、 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を実行します。

  3. キャッシュ ルールを表示するには、 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 のどちらを使用しているかによって異なります。

  1. Key Vault へのアクセスに使用されているシステム ID のプリンシパル ID を取得します。

    az acr credential-set show --name MyCredentialSet --registry MyRegistry 
    

    手順 3 で必要になるので、プリンシパル ID の値を書き留めます。

  2. Key Vault のプロパティを表示して、そのリソース ID を取得します。

    az keyvault show --name MyKeyVaultName --resource-group MyResouceGroup
    

    このリソース ID 値は、次の手順で必要になります。

  3. 資格情報セットのシステム 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 にアクセス許可を割り当てる

または、アクセス ポリシーを使用してアクセス許可を割り当てることができます。

  1. Key Vault へのアクセスに使用されているシステム ID のプリンシパル ID を取得します。

    az acr credential-set show --name CredentialSet --registry MyRegistry
    

    次の手順で必要になるので、プリンシパル ID の値を書き留めます。

  2. イメージをプルする前に、 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

リソースをクリーンアップする

不要になったら、作成したキャッシュ ルールと資格情報を削除します。

  1. キャッシュ ルールを削除するには、 az acr cache deleteを実行します。

    az acr cache delete -r MyRegistry -n MyRule
    
  2. 資格情報を削除するには、次 az acr credential-set delete実行します。

    az acr credential-set delete -r MyRegistry -n MyDockerHubCredSet
    

次のステップ