在 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 ID 中,為選取的 Azure 服務提供自動受控識別。 您可以使用受控識別來設定 ACR 工作,讓該工作可以存取其他受保護的 Azure 資源,而不需在工作步驟中傳遞認證。

受控身分識別有兩種:

  • 使用者指派的身分識別,您可以將其指派給多個資源並視需要持續保存。 使用者指派的身分識別目前處於預覽狀態。

  • 系統指派的身分識別,其對特定資源 (例如 ACR 工作) 而言是唯一,且會在該資源的存留期內持續存在。

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

使用受控識別的步驟

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

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

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

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

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

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

若要啟用系統指派的身分識別,則傳遞不含值的 --assign-identityassign-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"

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 容器登錄 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。

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

5.執行工作

使用受控識別設定工作之後,請執行工作。 例如,若要測試在此文章中建立的其中一個工作,請使用 az acr task run 命令,手動加以觸發。 如果您設定了額外的自動化工作觸發程序,工作就會在自動觸發時執行。

下一步

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