使用 Azure CLI 在 Azure 容器注册表中启用项目缓存

本文介绍如何使用 Azure CLI 在 Azure 容器注册表(ACR)中使用或不进行身份验证来启用 项目缓存功能

除了此处列出的先决条件之外,还需要具有活动订阅的 Azure 帐户。 创建试用订阅

先决条件

在本文中,我们使用名为 MyRegistry的示例 ACR 实例。

创建凭据

在配置凭据之前,请确保能够在 Azure 密钥保管库 中创建和存储机密 ,并从 密钥保管库 检索机密

  1. 运行 az acr credential set create

    az acr credential-set create 
    -r MyRegistry \
    -n MyDockerHubCredSet \
    -l docker.io \ 
    -u https://MyKeyvault.vault.azure.cn/secrets/usernamesecret \
    -p https://MyKeyvault.vault.azure.cn/secrets/passwordsecret
    
  2. 运行 az acr credential set update 以更新凭据集上的用户名或密码 密钥保管库 机密 ID:

    az acr credential-set update -r MyRegistry -n MyDockerHubCredSet -p https://MyKeyvault.vault.azure.cn/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
    

Important

如果使用专用终结点或公共 IP 访问规则限制目标Azure容器注册表,请启用“允许受信任的Microsoft服务访问此容器注册表”。 禁用受信任服务访问时,项目缓存无法填充目标注册表。 有关配置步骤,请参阅 “允许受信任的服务”安全地访问受网络限制的容器注册表

提示

若要创建不使用凭据的缓存规则,请使用不指定凭据的相同命令。 例如,az acr cache create --registry Myregistry --name MyRule --source-repo MySourceRepository --target-repo MyTargetRepository。 对于某些源(例如 Docker Hub),需要凭据才能创建缓存规则。

使用 Azure RBAC 向 密钥保管库 分配权限

可以使用 Azure RBAC 向用户分配适当的权限,以便他们可以访问 Azure 密钥保管库。

访问 密钥保管库 需要 Microsoft.KeyVault/vaults/secrets/getSecret/action 权限。 通常会授予 密钥保管库 机密用户 Azure 内置角色,因为它是包含此操作的最低特权角色。 或者,可以创建包含该权限的自定义角色。

使用的步骤因使用的是 Azure CLI 还是 Bash 而异。

  1. 获取用于访问 密钥保管库 的系统身份的主要标识符:

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

    请记下主 ID 值,因为你将在步骤 3 中用到它。

  2. 显示 密钥保管库 的属性以获取其资源 ID:

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

    下一步需要此资源 ID 值。

  3. 将 密钥保管库 机密用户角色分配给凭据集的系统标识:

    az role assignment create --role "Key Vault Secrets User" --assignee CredentialSetPrincipalID --scope KeyVaultResourceID 
    
    

提示

使用 密钥保管库 的资源 ID 授予对 密钥保管库 中的所有机密的访问权限。 如果愿意,只能授予对用户名和密码机密的访问权限。 为此,请运行以下命令,而不是步骤 2 中的命令,以仅检索用户名和密码机密:

az keyvault secret show --vault-name MyKeyVaultName --name MyUsernameSecretName
az keyvault secret show --vault-name MyKeyVaultName --name MyPasswordSecretName

接下来,执行步骤 3 两次,首先将KeyVaultResourceID替换为用户名机密的ID,然后替换为密码机密的ID。

使用访问策略向 密钥保管库 分配权限

或者,可以使用访问策略来分配权限。

  1. 获取用于访问 密钥保管库 的系统身份的主要标识符:

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

    请注意主 ID 值,因为下一步需要用到它。

  2. 运行 az keyvault set-policy 命令,在拉取映像之前分配对 密钥保管库 的访问权限。 例如,为凭据分配访问密钥保管库机密的权限:

    az keyvault set-policy --name MyKeyVault --object-id MyCredentialSetPrincipalID --secret-permissions get
    

拉取映像

若要从缓存拉取映像,请使用 Docker 命令并提供注册表登录服务器名称、存储库名称及其所需标记。 例如,若要从具有注册表登录服务器hello-world所需标记latest的存储库myregistry.azurecr.cn拉取映像,请运行:

 docker pull myregistry.azurecr.cn/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
    

后续步骤