Uso de una identidad administrada de Azure en ACR Tasks

Habilite una identidad administrada para recursos de Azure en una tarea de ACR, con el fin de que la tarea pueda acceder a otros recursos de Azure sin necesidad de proporcionar o administrar credenciales. Por ejemplo, use una identidad administrada para habilitar un paso de una tarea para extraer o insertar imágenes en otro registro.

En este artículo, aprenderá a usar el CLI de Azure para habilitar una identidad administrada asignada por el usuario o asignada por el sistema en una tarea de ACR. Puede usar Azure Cloud Shell o una instalación local de la CLI de Azure. Si desea usarlo de forma local, se requiere la versión 2.0.68 o cualquier versión posterior. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.

Con fines ilustrativos, los comandos de ejemplo de este artículo usan az acr task create para crear una tarea de compilación de imágenes básica que habilite una identidad administrada. Para ver escenarios de muestra en los que se accede a recursos protegidos desde una tarea de ACR mediante una identidad administrada, consulte:

¿Por qué usar una identidad administrada?

Una identidad administrada para recursos de Azure proporciona a determinados servicios de Azure una identidad administrada automáticamente en Azure Active Directory. Puede configurar una tarea de ACR con una identidad administrada, con el fin de que la tarea pueda acceder a otros recursos de Azure protegidos, sin pasar credenciales en los pasos de la tarea.

Las identidades administradas son de dos tipos:

  • Las identidades asignadas por el usuario, que puede asignar a varios recursos y conservar durante tanto tiempo como necesite. Las identidades asignadas por el usuario están actualmente en versión preliminar.

  • Una identidad administrada por el sistema, que es única para un recurso especifico, como una tarea de ACR, y dura toda la vigencia del recurso.

Puede habilitar uno de los dos tipos de identidad, o ambos, en una tarea de ACR. Conceda a la identidad acceso a otro recurso, igual que cualquier entidad de seguridad. Cuando la tarea se ejecuta, usa la identidad para acceder al recurso en los pasos de la tarea que requieran acceso.

Pasos para usar una identidad administrada

Siga estos pasos de alto nivel para usar una identidad administrada con una tarea de ACR.

(Opcional) Creación de una identidad asignada por el usuario

Si tiene previsto usar una identidad asignada por el usuario, use una identidad existente o créela mediante la CLI de Azure u otras herramientas de Azure. Por ejemplo, use el comando az identity create.

Si planea usar solo una identidad asignada por el sistema, omita este paso. Al crear la tarea de ACR, puede crear también una identidad asignada por el sistema.

Habilitación de la identidad en una tarea de ACR

Al crear una tarea de ACR, tiene la opción de habilitar una identidad asignada por el usuario o una identidad asignada por el sistema, o ambas. Por ejemplo, pase el parámetro --assign-identity al ejecutar el comando az acr task create en la CLI de Azure.

Para habilitar una identidad asignada por el sistema, pase --assign-identity sin ningún o assign-identity [system]. El siguiente comando de ejemplo crea una tarea de Linux desde un repositorio de GitHub público que compila la imagen hello-world y habilita una identidad administrada asignada por el sistema:

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

Para habilitar una identidad asignada por el usuario, pase --assign-identity con un valor del Id. de recurso de la identidad. El siguiente comando de ejemplo crea una tarea de Linux desde un repositorio de GitHub público que compila la imagen hello-world y habilita una identidad administrada asignada por el usuario:

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>

Para obtener el Id. de recurso de la identidad, ejecute el comando az Identity show. El identificador de recurso del identificador myUserAssignedIdentity del grupo de recursos myResourceGroup tiene el formato:

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

Concesión de los permisos de identidad para acceder a otros recursos de Azure

En función de los requisitos de la tarea, conceda los permisos de identidad necesarios para acceder a otros recursos de Azure. Algunos ejemplos son:

  • Asigne a la identidad administrada un rol con permisos de extracción, de inserción y extracción o de otro tipo en un registro de contenedor destino de Azure. Para obtener una lista completa de los roles de registros, consulte Roles y permisos de Azure Container Registry.
  • Asigne a la identidad administrada un rol para leer secretos en Azure Key Vault.

Use la CLI de Azure o cualquier otra herramientas de Azure para administrar el acceso basado en roles a los recursos. Por ejemplo, ejecute el comando az role assignment create para asignar un rol al recurso.

En el ejemplo siguiente se asignan a una identidad administrada los permisos necesarios para extraer de un registro de contenedor. El comando especifica el id. de la entidad de servicio de la identidad de la tarea y el identificador de recurso del registro de destino.

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

4. (Opcional) Incorporación de credenciales a la tarea

Si la tarea necesita credenciales para extraer imágenes de otro registro personalizado o para insertarlas, o para acceder a otros recursos, agregue credenciales a la tarea. Ejecute el comando az acr task credential add para agregar credenciales y pase el parámetro --use-identity para indicar que la identidad puede acceder a ellas.

Por ejemplo, para agregar credenciales para que una identidad asignada por el sistema se autentique en el registro de contenedor de Azure targetregistry, pase use-identity [system]:

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

Para agregar credenciales para que una identidad asignada por el usuario se autentique en el registro targetregistry pase use-identity con un valor del Id. de cliente de la identidad. Por ejemplo:

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

Para obtener el Id. de cliente de la identidad, ejecute el comando az identity show. El Id. de cliente es un GUID con el formatoxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.

5. Ejecución de la tarea

Después de configurar una tarea con una identidad administrada, ejecute la tarea. Por ejemplo, para probar una de las tareas creadas en este artículo, debe desencadenarla manualmente mediante el comando az acr task run. Si configuró más desencadenadores de tareas automatizados, la tarea se ejecutará cuando se desencadene automáticamente.

Pasos siguientes

En este artículo, ha aprendido a habilitar y usar una identidad administrada asignada por el usuario o asignada por el sistema en una tarea de ACR. Para ver escenarios en los que se accede a recursos protegidos desde una tarea de ACR mediante una identidad administrada, consulte: