在本文中,您將瞭解如何使用 Azure CLI 在 Azure Container Registry (ACR) 中啟用 artifact 快取功能,不論是否需要驗證。
除了此處所列的必要條件之外,您還需要具有作用中訂用帳戶的 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 KeyVault 中建立和儲存祕密,並從 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 秘密識別碼: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。
需要Microsoft.KeyVault/vaults/secrets/getSecret/action許可權才能存取金鑰保管庫。
Key Vault Secrets User Azure 內建角色通常會被授予,因為它是包含此動作的最少權限的角色。 或者,您可以建立包含該許可權的自定義角色。
所使用的步驟會根據您使用的是 Azure CLI 或 Bash 而有所不同。
取得用來存取 Key Vault 的系統身分識別主體識別碼:
az acr credential-set show --name MyCredentialSet --registry MyRegistry記下主體標識碼值,因為您在步驟 3 中需要此值。
顯示 Key Vault 的屬性,以取得其資源識別碼:
az keyvault show --name MyKeyVaultName --resource-group MyResouceGroup在下一個步驟中,您將需要此資源識別符值。
將 Key Vault 秘密使用者 角色指派給認證集的系統身分識別:
az role assignment create --role "Key Vault Secrets User" --assignee CredentialSetPrincipalID --scope KeyVaultResourceID
小提示
使用 Key Vault 的資源識別符會授與 Key Vault 中所有秘密的存取權。 如果您願意,您可以授予存取權僅限於使用者名稱和密碼。 若要這樣做,請執行以下命令,而不是步驟 2 中的命令,只擷取使用者名稱和密碼的機密:
az keyvault secret show --vault-name MyKeyVaultName --name MyUsernameSecretName
az keyvault secret show --vault-name MyKeyVaultName --name MyPasswordSecretName
接下來,執行步驟 3 兩次,先以使用者名稱密碼的識別碼取代 KeyVaultResourceID ,然後使用密碼密碼的識別碼取代 。
使用存取原則指派 Key Vault 的權限
或者,您可以使用存取原則來指派許可權。
取得用來存取 Key Vault 的系統身分識別主體識別碼:
az acr credential-set show --name CredentialSet --registry MyRegistry記下主體標識碼值,因為您將在下一個步驟中用到它。
在拉取映像之前,請執行
az keyvault set-policy命令以指派 Key Vault 的存取權。 例如,若要指派認證的許可權以存取 KeyVault 秘密:az keyvault set-policy --name MyKeyVault --object-id MyCredentialSetPrincipalID --secret-permissions get
提取您的映像
若要從快取提取映像,請使用 Docker 命令,並提供登錄登入伺服器名稱、存放庫名稱及其所需的標記。 例如,若要從存放庫 hello-world 中提取具有所需標籤 latest 的映像以供登錄登入伺服器 myregistry.azurecr.io,請執行:
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 入口網站啟用成品快取。