共用方式為


在 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 資源的受控識別為選定的 Azure 服務提供在 Microsoft Entra ID 中自動管理的識別。 您可以在 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 中識別碼 myUserAssignedIdentity 的資源識別碼格式如下:

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

備註

如果您使用啟用 ABAC 的來源登錄,則必須明確附加並設定一個受控識別,工作將使用該識別,透過新的 --source-acr-auth-id 旗標向啟用 ABAC 的來源登錄進行驗證。 之後,您必須執行個別的角色指派 (可選擇性地包含 ABAC 條件),以授與此身分識別對啟用 ABAC 的來源登錄的權限。

如需詳細資訊,請參閱 在 ACR 工作、快速工作、快速建置和快速執行上啟用 ABAC 的效果

3. 授與身分識別存取其他 Azure 資源的權限

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

  • 將受控識別指派為具有提取、推送及提取,或其他權限的角色,以存取 Azure 中的目標容器登錄。 如需登錄角色的完整清單,請參閱 Azure Container Registry Entra 許可權和角色概觀
  • 將受控識別指派為可在 Azure 金鑰保存庫中讀取祕密的角色。

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

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

角色指派中應使用的正確角色取決於登錄中心是否啟用 ABAC

ROLE="Container Registry Repository Reader" # For ABAC-enabled registries. For non-ABAC registries, use AcrPull.
az role assignment create \
  --assignee <principalID> \
  --scope <registryID> \
  --role "$ROLE"

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

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

例如,若要新增系統指派身分識別的認證,以向 Azure 容器登錄 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 命令來取得該身分識別的用戶端識別碼。 用戶端識別碼是一個 GUID,格式為 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

5. 執行工作

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

後續步驟

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