在 ACR 工作中使用 Azure 受控識別

在 ACR 工作中啟用 Azure 資源的 受控識別,讓工作可以存取其他 Azure 資源,而不需要提供或管理認證。 例如,使用受控識別來啟用工作步驟,將容器映射提取或推送至另一個登錄。

在本文中,您將瞭解如何使用 Azure CLI 在 ACR 工作上啟用使用者指派或系統指派的受控識別。 您可以使用 Azure Cloud Shell 或 Azure CLI 的本機安裝。 如果您想要在本機使用它,則需要 2.0.68 版或更新版本。 執行 az --version 以尋找版本。 如果您需要安裝或升級,請參閱 安裝 Azure CLI

為了說明目的,本文中的範例命令會使用 az acr task create 來建立可啟用受控識別的基本映射建置工作。 如需使用受控識別從 ACR 工作存取受保護資源的範例案例,請參閱:

為什麼要使用受控識別?

Azure 資源的受控識別會以 Microsoft Entra 識別碼中的自動受控識別來提供選取的 Azure 服務。 您可以使用受控識別來設定 ACR 工作,讓工作可以存取其他受保護的 Azure 資源,而不需在工作步驟中傳遞認證。

受控識別有兩種類型:

  • 使用者指派的身 分識別,您可以指派給多個資源,並視需要保存一段時間。 使用者指派的身分識別目前為預覽狀態。

  • 系統指派的身 分識別,對於特定資源而言是唯一的,例如 ACR 工作,並持續到該資源的存留期。

您可以在 ACR 工作中啟用或兩種類型的身分識別。 將身分識別存取權授與另一個資源,就像任何安全性主體一樣。 當工作執行時,它會使用身分識別來存取任何需要存取的工作步驟中的資源。

使用受控識別的步驟

請遵循這些高階步驟,搭配 ACR 工作使用受控識別。

1. (選擇性) 建立使用者指派的身分識別

如果您打算使用使用者指派的身分識別,請使用現有的身分識別,或使用 Azure CLI 或其他 Azure 工具建立身分識別。 例如,使用 az identity create 命令。

如果您打算只使用系統指派的身分識別,請略過此步驟。 當您建立 ACR 工作時,您會建立系統指派的身分識別。

2.在 ACR 工作上啟用身分識別

當您建立 ACR 工作時,選擇性地啟用使用者指派的身分識別、系統指派的身分識別或兩者。 例如,當您在 Azure CLI 中執行 az acr task create 命令時,傳遞 --assign-identity 參數。

若要啟用系統指派的身分識別,請傳遞 --assign-identity 不含值或 assign-identity [system] 。 下列範例命令會從公用 GitHub 存放庫建立 Linux 工作,以建 hello-world 置映射並啟用系統指派的受控識別:

az acr task create \
    --image hello-world:{{.Run.ID}} \
    --name hello-world --registry MyRegistry \
    --context https://github.com/Azure-Samples/acr-build-helloworld-node.git#main \
    --file Dockerfile \
    --commit-trigger-enabled false \
    --assign-identity

若要啟用使用者指派的身分識別,請使用身分識別的資源識別碼 傳遞 --assign-identity 。 下列範例命令會從公用 GitHub 存放庫建立 Linux 工作,以建 hello-world 置映射並啟用使用者指派的受控識別:

az acr task create \
    --image hello-world:{{.Run.ID}} \
    --name hello-world --registry MyRegistry \
    --context https://github.com/Azure-Samples/acr-build-helloworld-node.git#main \
    --file Dockerfile \
    --commit-trigger-enabled false
    --assign-identity <resourceID>

您可以執行 az identity show 命令來取得身分識別的資源識別碼。 資源群組 myResourceGroup 中 ID myUserAssignedIdentity 的資源 識別碼的格式如下:

"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myUserAssignedIdentity"

3.授與身分識別許可權以存取其他 Azure 資源

根據您的工作需求,授與身分識別許可權以存取其他 Azure 資源。 範例包含:

  • 使用提取、推送和提取或其他許可權將受控識別指派給 Azure 中目標容器登錄的角色。 如需登錄角色的完整清單,請參閱 Azure Container Registry roles and permissions (Azure Container Registry 角色和權限)。
  • 將受控識別指派為角色,以讀取 Azure 金鑰保存庫中的秘密。

使用 Azure CLI 或其他 Azure 工具來管理資源的角色型存取。 例如,執行 az role assignment create 命令,將身分識別指派給資源。

下列範例會指派受控識別,以從容器登錄提取許可權。 命令會 指定工作識別的主體 識別碼,以及 目標登錄的資源識別碼

az role assignment create \
  --assignee <principalID> \
  --scope <registryID> \
  --role acrpull

4. (選擇性) 將認證新增至工作

如果您的工作需要認證,才能將映射提取或推送至另一個自訂登錄,或存取其他資源,請將認證新增至工作。 執行 az acr task credential add 命令以新增認證,並傳遞 --use-identity 參數以指出身分識別可以存取認證。

例如,若要新增系統指派身分識別的認證,以向 Azure Container Registry targetregistry 進行驗證,請傳遞 use-identity [system]

az acr task credential add \
    --name helloworld \
    --registry myregistry \
    --login-server targetregistry.azurecr.io \
    --use-identity [system]

若要為使用者指派的身分識別新增認證,以使用登錄 targetregistry 進行驗證,請使用身分識別的用戶端識別碼 傳遞 use-identity 。 例如:

az acr task credential add \
    --name helloworld \
    --registry myregistry \
    --login-server targetregistry.azurecr.io \
    --use-identity <clientID>

您可以執行 az identity show 命令來取得身分識別的用戶端識別碼。 用戶端識別碼是 格式 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 的 GUID。

--use-identity如果登錄已停用公用網路存取,且只依賴特定受信任的服務來執行 ACR 工作,則參數不是選擇性的。 請參閱 ACR 工作 作為受信任服務的範例。

5.執行工作

使用受控識別設定工作之後,請執行工作。 例如,若要測試本文中建立的工作之一,請使用 az acr task run 命令手動觸發它 。 如果您設定了其他自動化的工作觸發程式,工作會在自動觸發時執行。

下一步

在本文中,您已瞭解如何在 ACR 工作上啟用和使用使用者指派或系統指派的受控識別。 如需使用受控識別從 ACR 工作存取受保護資源的案例,請參閱: