Cómo utilizar una identidad administrada con Azure Container InstancesHow to use managed identities with Azure Container Instances

Utilice identidades administradas para recursos de Azure si quiere ejecutar código en Azure Container Instances que interactúe con otros servicios de Azure, sin mantener secretos ni credenciales en el código.Use managed identities for Azure resources to run code in Azure Container Instances that interacts with other Azure services - without maintaining any secrets or credentials in code. La característica facilita una implementación de Azure Container Instances con una identidad administrada automáticamente en Azure Active Directory.The feature provides an Azure Container Instances deployment with an automatically managed identity in Azure Active Directory.

En este artículo, conocerá mejor las identidades administradas de Azure Container Instances y aprenderá a realizar las siguientes tareas:In this article, you learn more about managed identities in Azure Container Instances and:

  • Habilitación de una identidad asignada por el usuario o asignada por el sistema en un grupo de contenedoresEnable a user-assigned or system-assigned identity in a container group
  • Concesión de acceso a la identidad a una instancia de Azure Key VaultGrant the identity access to an Azure key vault
  • Uso de la identidad administrada para acceder a un almacén de claves desde un contenedor en ejecuciónUse the managed identity to access a key vault from a running container

Adaptación de los ejemplos para habilitar y utilizar las identidades en Azure Container Instances para tener acceso a otros servicios de Azure.Adapt the examples to enable and use identities in Azure Container Instances to access other Azure services. Estos ejemplos son interactivos.These examples are interactive. Aunque, en la práctica, las imágenes de contenedor ejecutarían el código para tener acceso a servicios de Azure.However, in practice your container images would run code to access Azure services.

Importante

Esta funcionalidad actualmente está en su versión preliminar.This feature is currently in preview. Las versiones preliminares están a su disposición con la condición de que acepte los términos de uso adicionales.Previews are made available to you on the condition that you agree to the supplemental terms of use. Es posible que algunos de los aspectos de esta característica cambien antes de ofrecer disponibilidad general.Some aspects of this feature may change prior to general availability (GA). Actualmente las identidades administradas en Azure Container Instances solo se admiten con contenedores de Linux, aún no con contenedores de Windows.Currently, managed identities on Azure Container Instances, are only supported with Linux containers and not yet with Windows containers.

¿Por qué usar una identidad administrada?Why use a managed identity?

Utilice una identidad administrada en un contenedor en ejecución para autenticarse en cualquier servicio que admita la autenticación de Azure AD sin tener que administrar credenciales en el código.Use a managed identity in a running container to authenticate to any service that supports Azure AD authentication without managing credentials in your container code. En el caso de servicios que no son compatibles con la autenticación de Azure AD, puede almacenar secretos en Azure Key Vault y usar la identidad administrada para acceder al almacén de claves y recuperar las credenciales.For services that don't support AD authentication, you can store secrets in an Azure key vault and use the managed identity to access the key vault to retrieve credentials. Para más información sobre las identidades administradas, vea ¿Qué es Managed Identities for Azure Resources?For more information about using a managed identity, see What is managed identities for Azure resources?

Habilitación de una entidad administradaEnable a managed identity

Al crear un grupo de contenedores, habilite una o varias identidades administradas estableciendo una propiedad ContainerGroupIdentity.When you create a container group, enable one or more managed identities by setting a ContainerGroupIdentity property. También puede habilitar o actualizar las identidades administradas después de que se ejecute un grupo de contenedores; cualquiera de estas acciones hace que el grupo de contenedores se reinicie.You can also enable or update managed identities after a container group is running - either action causes the container group to restart. Para establecer las identidades en un grupo de contenedores nuevo o existente, use la CLI de Azure, una plantilla de Resource Manager, un archivo YAML u otra herramienta de Azure.To set the identities on a new or existing container group, use the Azure CLI, a Resource Manager template, a YAML file, or another Azure tool.

Azure Container Instances admite ambos tipos de identidades administradas de Azure: asignada por el usuario y asignada por el sistema.Azure Container Instances supports both types of managed Azure identities: user-assigned and system-assigned. En un grupo de contenedores, puede habilitar una identidad asignada por el sistema y una o más identidades asignadas por el usuario.On a container group, you can enable a system-assigned identity, one or more user-assigned identities, or both types of identities. Si no está familiarizado con las identidades administradas de los recursos de Azure, consulte la introducción.If you're unfamiliar with managed identities for Azure resources, see the overview.

Uso de una identidad administradaUse a managed identity

Para usar una identidad administrada, la identidad debe tener acceso a uno o más recursos de servicio de Azure (por ejemplo, una aplicación web, un almacén de claves o una cuenta de almacenamiento) en la suscripción.To use a managed identity, the identity must be granted access to one or more Azure service resources (such as a web app, a key vault, or a storage account) in the subscription. El uso de una identidad administrada en un contenedor en ejecución es parecido a usar una identidad en una máquina virtual de Azure.Using a managed identity in a running container is similar to using an identity in an Azure VM. Vea las instrucciones de la máquina virtual sobre el uso de un token, la CLI de Azure o de Azure PowerShell o los SDK de Azure.See the VM guidance for using a token, Azure PowerShell or Azure CLI, or the Azure SDKs.

LimitacionesLimitations

  • Actualmente no se puede usar una identidad administrada en un grupo de contenedores que se implementa en una red virtual.Currently you can't use a managed identity in a container group deployed to a virtual network.
  • No se puede usar una identidad administrada para extraer una imagen de Azure Container Registry al crear un grupo de contenedores.You can't use a managed identity to pull an image from Azure Container Registry when creating a container group. La identidad solo está disponible dentro de un contenedor en ejecución.The identity is only available within a running container.

Requisitos previosPrerequisites

  • Use el entorno de Bash en Azure Cloud Shell.Use the Bash environment in Azure Cloud Shell.

    Iniciar Cloud Shell en una nueva ventanaLaunch Cloud Shell in a new window

  • Si lo prefiere, instale la CLI de Azure para ejecutar sus comandos de referencia.If you prefer, install the Azure CLI to run CLI reference commands.

    • Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login.If you're using a local installation, sign in to the Azure CLI by using the az login command. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación.To finish the authentication process, follow the steps displayed in your terminal. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión con la CLI de Azure.For additional sign-in options, see Sign in with the Azure CLI.

    • Cuando se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use.When you're prompted, install Azure CLI extensions on first use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.For more information about extensions, see Use extensions with the Azure CLI.

    • Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas.Run az version to find the version and dependent libraries that are installed. Para realizar la actualización a la versión más reciente, ejecute az upgrade.To upgrade to the latest version, run az upgrade.

  • En este artículo se necesita la versión 2.0.49 de la CLI de Azure, o cualquier versión posterior.This article requires version 2.0.49 or later of the Azure CLI. Si usa Azure Cloud Shell, ya está instalada la versión más reciente.If using Azure Cloud Shell, the latest version is already installed.

Creación de una instancia de Azure Key VaultCreate an Azure key vault

En los ejemplos de este artículo se usa una identidad administrada de Azure Container Instances para acceder a un secreto de Azure Key Vault.The examples in this article use a managed identity in Azure Container Instances to access an Azure key vault secret.

En primer lugar, cree un grupo de recursos denominado myResourceGroup en la ubicación eastus con el comando az group create siguiente:First, create a resource group named myResourceGroup in the eastus location with the following az group create command:

az group create --name myResourceGroup --location eastus

Use el comando az keyvault create para crear un almacén de claves.Use the az keyvault create command to create a key vault. Asegúrese de especificar un nombre de almacén de claves único.Be sure to specify a unique key vault name.

az keyvault create \
  --name mykeyvault \
  --resource-group myResourceGroup \ 
  --location eastus

Almacene un secreto de ejemplo en el almacén de claves con el comando az keyvault secret set:Store a sample secret in the key vault using the az keyvault secret set command:

az keyvault secret set \
  --name SampleSecret \
  --value "Hello Container Instances" \
  --description ACIsecret --vault-name mykeyvault

Continúe con los siguientes ejemplos para acceder al almacén de claves mediante una identidad administrada asignada por el usuario o asignada por el sistema en Azure Container Instances.Continue with the following examples to access the key vault using either a user-assigned or system-assigned managed identity in Azure Container Instances.

Ejemplo 1: Uso de una identidad asignada por el usuario para acceder a Azure Key VaultExample 1: Use a user-assigned identity to access Azure key vault

Creación de una identidadCreate an identity

En primer lugar, cree una identidad en la suscripción con el comando az identity create.First create an identity in your subscription using the az identity create command. Puede usar el mismo grupo de recursos empleado para crear el almacén de claves o uno diferente.You can use the same resource group used to create the key vault, or use a different one.

az identity create \
  --resource-group myResourceGroup \
  --name myACIId

Para utilizar la identidad en los pasos siguientes, use el comando az identity show para almacenar en variables los identificadores de la entidad de servicio y del recurso de la identidad.To use the identity in the following steps, use the az identity show command to store the identity's service principal ID and resource ID in variables.

# Get service principal ID of the user-assigned identity
spID=$(az identity show \
  --resource-group myResourceGroup \
  --name myACIId \
  --query principalId --output tsv)

# Get resource ID of the user-assigned identity
resourceID=$(az identity show \
  --resource-group myResourceGroup \
  --name myACIId \
  --query id --output tsv)

Concesión de acceso a la identidad asignada por el usuario al almacén de clavesGrant user-assigned identity access to the key vault

Ejecute el comando az keyvault set-policy siguiente para establecer una directiva de acceso en el almacén de claves.Run the following az keyvault set-policy command to set an access policy on the key vault. En el ejemplo siguiente se permite que la identidad asignada por el usuario obtenga secretos del almacén de claves:The following example allows the user-assigned identity to get secrets from the key vault:

 az keyvault set-policy \
    --name mykeyvault \
    --resource-group myResourceGroup \
    --object-id $spID \
    --secret-permissions get

Habilitación de una identidad asignada por el usuario en un grupo de contenedoresEnable user-assigned identity on a container group

Ejecute el siguiente comando az container create para crear una instancia de contenedor basada en la imagen azure-cli de Microsoft.Run the following az container create command to create a container instance based on Microsoft's azure-cli image. En este ejemplo se proporciona un solo grupo de contenedores que puede usarse para ejecutar de forma interactiva la CLI de Azure con el fin de acceder a otros servicios de Azure.This example provides a single-container group that you can use interactively to run the Azure CLI to access other Azure services. En esta sección, solo se usa el sistema operativo base.In this section, only the base operating system is used. Puede encontrar un ejemplo de cómo usar la CLI de Azure en el contenedor en Habilitación de la identidad asignada por el sistema en un grupo de contenedores.For an example to use the Azure CLI in the container, see Enable system-assigned identity on a container group.

El parámetro --assign-identity pasa la identidad administrada asignada por el usuario al grupo.The --assign-identity parameter passes your user-assigned managed identity to the group. El comando de ejecución prolongada mantiene el contenedor en ejecución.The long-running command keeps the container running. En este ejemplo se usa el mismo grupo de recursos empleado para crear el almacén de claves, pero puede especificarse otro distinto.This example uses the same resource group used to create the key vault, but you could specify a different one.

az container create \
  --resource-group myResourceGroup \
  --name mycontainer \
  --image mcr.microsoft.com/azure-cli \
  --assign-identity $resourceID \
  --command-line "tail -f /dev/null"

En unos segundos, debería recibir una respuesta de la CLI de Azure que indica que la implementación ha finalizado.Within a few seconds, you should get a response from the Azure CLI indicating that the deployment has completed. Compruebe su estado con el comando az container show.Check its status with the az container show command.

az container show \
  --resource-group myResourceGroup \
  --name mycontainer

La sección identity de la salida tiene un aspecto similar al siguiente, que muestra que la identidad está establecida en el grupo de contenedores.The identity section in the output looks similar to the following, showing the identity is set in the container group. El valor de principalID en userAssignedIdentities corresponde a la entidad de servicio de la identidad que creó en Azure Active Directory:The principalID under userAssignedIdentities is the service principal of the identity you created in Azure Active Directory:

[...]
"identity": {
    "principalId": "null",
    "tenantId": "xxxxxxxx-f292-4e60-9122-xxxxxxxxxxxx",
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/xxxxxxxx-0903-4b79-a55a-xxxxxxxxxxxx/resourcegroups/danlep1018/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {
        "clientId": "xxxxxxxx-5523-45fc-9f49-xxxxxxxxxxxx",
        "principalId": "xxxxxxxx-f25b-4895-b828-xxxxxxxxxxxx"
      }
    }
  },
[...]

Uso de la identidad asignada por el usuario para obtener un secreto del almacén de clavesUse user-assigned identity to get secret from key vault

Ahora puede usar la identidad administrada para acceder al almacén de claves de la instancia de contenedor en ejecución.Now you can use the managed identity within the running container instance to access the key vault. Inicie primero un shell de Bash en el contenedor:First launch a bash shell in the container:

az container exec \
  --resource-group myResourceGroup \
  --name mycontainer \
  --exec-command "/bin/bash"

Ejecute los siguientes comandos del shell de Bash en el contenedor.Run the following commands in the bash shell in the container. Para obtener un token de acceso a fin de usar Azure Active Directory para autenticarse en el almacén de claves, ejecute el siguiente comando:To get an access token to use Azure Active Directory to authenticate to key vault, run the following command:

curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true -s

Salida:Output:

{"access_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSIsImtpZCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSJ9......xxxxxxxxxxxxxxxxx","refresh_token":"","expires_in":"28799","expires_on":"1539927532","not_before":"1539898432","resource":"https://vault.azure.net/","token_type":"Bearer"}

Para almacenar el token de acceso en una variable para usar en los siguientes comandos para autenticarse, ejecute el siguiente comando:To store the access token in a variable to use in subsequent commands to authenticate, run the following command:

token=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true | jq -r '.access_token')

Ahora puede usar el token de acceso para autenticarse en el almacén de claves y leer un secreto.Now use the access token to authenticate to key vault and read a secret. No olvide sustituir el nombre del almacén de claves en la dirección URL(https://mykeyvault.vault.azure.net/... ):Be sure to substitute the name of your key vault in the URL (https://mykeyvault.vault.azure.net/...):

curl https://mykeyvault.vault.azure.net/secrets/SampleSecret/?api-version=2016-10-01 -H "Authorization: Bearer $token"

La respuesta será similar a la siguiente, que muestra el secreto.The response looks similar to the following, showing the secret. En el código, podría analizar esta salida para obtener el secreto.In your code, you would parse this output to obtain the secret. Utilice luego el secreto en una operación posterior para tener acceso a otro recurso de Azure.Then, use the secret in a subsequent operation to access another Azure resource.

{"value":"Hello Container Instances","contentType":"ACIsecret","id":"https://mykeyvault.vault.azure.net/secrets/SampleSecret/xxxxxxxxxxxxxxxxxxxx","attributes":{"enabled":true,"created":1539965967,"updated":1539965967,"recoveryLevel":"Purgeable"},"tags":{"file-encoding":"utf-8"}}

Ejemplo 2: Uso de una identidad asignada por el sistema para acceder a Azure Key VaultExample 2: Use a system-assigned identity to access Azure key vault

Habilitación de una identidad asignada por el sistema en un grupo de contenedoresEnable system-assigned identity on a container group

Ejecute el siguiente comando az container create para crear una instancia de contenedor basada en la imagen azure-cli de Microsoft.Run the following az container create command to create a container instance based on Microsoft's azure-cli image. En este ejemplo se proporciona un solo grupo de contenedores que puede usarse para ejecutar de forma interactiva la CLI de Azure con el fin de acceder a otros servicios de Azure.This example provides a single-container group that you can use interactively to run the Azure CLI to access other Azure services.

El parámetro --assign-identity sin ningún valor adicional habilita una identidad administrada asignada por el sistema en el grupo.The --assign-identity parameter with no additional value enables a system-assigned managed identity on the group. El ámbito de la identidad es el grupo de recursos del grupo de contenedores.The identity is scoped to the resource group of the container group. El comando de ejecución prolongada mantiene el contenedor en ejecución.The long-running command keeps the container running. En este ejemplo se usa el mismo grupo de recursos empleado para crear el almacén de claves, que se encuentra en el ámbito de la identidad.This example uses the same resource group used to create the key vault, which is in the scope of the identity.

# Get the resource ID of the resource group
rgID=$(az group show --name myResourceGroup --query id --output tsv)

# Create container group with system-managed identity
az container create \
  --resource-group myResourceGroup \
  --name mycontainer \
  --image mcr.microsoft.com/azure-cli \
  --assign-identity --scope $rgID \
  --command-line "tail -f /dev/null"

En unos segundos, debería recibir una respuesta de la CLI de Azure que indica que la implementación ha finalizado.Within a few seconds, you should get a response from the Azure CLI indicating that the deployment has completed. Compruebe su estado con el comando az container show.Check its status with the az container show command.

az container show \
  --resource-group myResourceGroup \
  --name mycontainer

La sección identity de la salida tiene un aspecto similar al siguiente, que muestra que se crea una identidad asignada por el sistema en Azure Active Directory:The identity section in the output looks similar to the following, showing that a system-assigned identity is created in Azure Active Directory:

[...]
"identity": {
    "principalId": "xxxxxxxx-528d-7083-b74c-xxxxxxxxxxxx",
    "tenantId": "xxxxxxxx-f292-4e60-9122-xxxxxxxxxxxx",
    "type": "SystemAssigned",
    "userAssignedIdentities": null
},
[...]

Establezca una variable en el valor de principalId (identificador de la entidad de servicio) de la identidad para su uso en pasos posteriores.Set a variable to the value of principalId (the service principal ID) of the identity, to use in later steps.

spID=$(az container show \
  --resource-group myResourceGroup \
  --name mycontainer \
  --query identity.principalId --out tsv)

Concesión de acceso al grupo de contenedores al almacén de clavesGrant container group access to the key vault

Ejecute el comando az keyvault set-policy siguiente para establecer una directiva de acceso en el almacén de claves.Run the following az keyvault set-policy command to set an access policy on the key vault. En el ejemplo siguiente se permite que la identidad administrada asignada por el sistema obtenga secretos del almacén de claves:The following example allows the system-managed identity to get secrets from the key vault:

 az keyvault set-policy \
   --name mykeyvault \
   --resource-group myResourceGroup \
   --object-id $spID \
   --secret-permissions get

Uso de la identidad del grupo de contenedores para obtener un secreto del almacén de clavesUse container group identity to get secret from key vault

Ahora puede usar la identidad administrada para acceder al almacén de claves de la instancia de contenedor en ejecución.Now you can use the managed identity to access the key vault within the running container instance. Inicie primero un shell de Bash en el contenedor:First launch a bash shell in the container:

az container exec \
  --resource-group myResourceGroup \
  --name mycontainer \
  --exec-command "/bin/bash"

Ejecute los siguientes comandos del shell de Bash en el contenedor.Run the following commands in the bash shell in the container. En primer lugar, inicie sesión en la CLI de Azure mediante la identidad administrada:First log in to the Azure CLI using the managed identity:

az login --identity

En el contenedor en ejecución, recupere el secreto del almacén de claves:From the running container, retrieve the secret from the key vault:

az keyvault secret show \
  --name SampleSecret \
  --vault-name mykeyvault --query value

Se recupera el valor del secreto:The value of the secret is retrieved:

"Hello Container Instances"

Habilitación de la identidad administrada con una plantilla de Resource ManagerEnable managed identity using Resource Manager template

Para habilitar una identidad administrada en un grupo de contenedores con una plantilla de Resource Manager, establezca la propiedad identity del objeto Microsoft.ContainerInstance/containerGroups con un objeto ContainerGroupIdentity.To enable a managed identity in a container group using a Resource Manager template, set the identity property of the Microsoft.ContainerInstance/containerGroups object with a ContainerGroupIdentity object. Los siguientes fragmentos de código muestran la propiedad identity configurada para diferentes escenarios.The following snippets show the identity property configured for different scenarios. Vea Referencia de plantilla de Resource Manager.See the Resource Manager template reference. Especifique un valor mínimo de apiVersion de 2018-10-01.Specify a minimum apiVersion of 2018-10-01.

Identidad asignada por el usuarioUser-assigned identity

Una identidad asignada por el usuario es un identificador de recurso del formulario:A user-assigned identity is a resource ID of the form:

"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}"

Puede habilitar una o más identidades asignadas por el usuario.You can enable one or more user-assigned identities.

"identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "myResourceID1": {
            }
        }
    }

Identidad asignada por el sistemaSystem-assigned identity

"identity": {
    "type": "SystemAssigned"
    }

Identidades asignadas por el sistema y por el usuarioSystem- and user-assigned identities

En un grupo de contenedores, puede habilitar una identidad asignada por el sistema y una o más identidades asignadas por el usuario.On a container group, you can enable both a system-assigned identity and one or more user-assigned identities.

"identity": {
    "type": "System Assigned, UserAssigned",
    "userAssignedIdentities": {
        "myResourceID1": {
            }
        }
    }
...

Habilitación de una identidad administrada con un archivo YAMLEnable managed identity using YAML file

Para habilitar una identidad administrada en un grupo de contenedores implementados con un archivo YAML, incluya el siguiente código YAML.To enable a managed identity in a container group deployed using a YAML file, include the following YAML. Especifique un valor mínimo de apiVersion de 2018-10-01.Specify a minimum apiVersion of 2018-10-01.

Identidad asignada por el usuarioUser-assigned identity

Una identidad asignada por el usuario es un identificador de recurso del formulario.A user-assigned identity is a resource ID of the form

'/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'

Puede habilitar una o más identidades asignadas por el usuario.You can enable one or more user-assigned identities.

identity:
  type: UserAssigned
  userAssignedIdentities:
    {'myResourceID1':{}}

Identidad asignada por el sistemaSystem-assigned identity

identity:
  type: SystemAssigned

Identidades asignadas por el sistema y por el usuarioSystem- and user-assigned identities

En un grupo de contenedores, puede habilitar una identidad asignada por el sistema y una o más identidades asignadas por el usuario.On a container group, you can enable both a system-assigned identity and one or more user-assigned identities.

identity:
  type: SystemAssigned, UserAssigned
  userAssignedIdentities:
   {'myResourceID1':{}}

Pasos siguientesNext steps

En este artículo, ha conocido las identidades administradas de Azure Container Instances y ha aprendido a realizar las siguientes tareas:In this article, you learned about managed identities in Azure Container Instances and how to:

  • Habilitación de una identidad asignada por el usuario o asignada por el sistema en un grupo de contenedoresEnable a user-assigned or system-assigned identity in a container group
  • Concesión de acceso a la identidad a una instancia de Azure Key VaultGrant the identity access to an Azure key vault
  • Uso de la identidad administrada para acceder a un almacén de claves desde un contenedor en ejecuciónUse the managed identity to access a key vault from a running container