Identidades administradas en Azure Container Apps
Una identidad administrada de Microsoft Entra ID permite que la aplicación contenedora acceda a otros recursos protegidos de Microsoft Entra. Para obtener más información sobre las identidades administradas en Microsoft Entra ID, consulte Identidades administradas para recursos de Azure.
La aplicación de contenedor puede tener dos tipos de identidades:
- Una identidad asignada por el sistema está asociada a la aplicación de contenedor y esta se elimina si a su vez se elimina la aplicación. Una aplicación solo puede tener una identidad asignada por el sistema.
- Una identidad asignada por el usuario es un recurso Azure independiente que puede asignar a la aplicación contenedora y a otros recursos. Una aplicación de contenedor puede tener varias identidades asignadas por el usuario. Las identidades asignadas por el usuario existen hasta que las elimine.
¿Por qué usar una identidad administrada?
Puede usar una identidad administrada en una aplicación de contenedor en ejecución para autenticarse en cualquier servicio que admita la autenticación de Microsoft Entra.
Con identidades administradas:
- La aplicación se conecta a los recursos con la identidad administrada. No es necesario administrar las credenciales en la Container App.
- Puede usar el control de acceso basado en roles para conceder permisos específicos a una identidad administrada.
- Las identidades asignadas por el sistema se crean y administran automáticamente. Se eliminan cuando se elimina la Container App.
- Puede agregar y eliminar identidades asignadas por el usuario y asignarlas a varios recursos. Son independientes del ciclo de vida de la aplicación de contenedor.
- Puede usar la identidad administrada para autenticarse con una instancia privada de Azure Container Registry sin un nombre de usuario y una contraseña para extraer contenedores de la aplicación contenedora.
- Puede usar una identidad administrada de para crear conexiones para aplicaciones habilitadas para Dapr a través de componentes de Dapr
Casos de uso comunes
Las identidades asignadas por el sistema son las mejores para las cargas de trabajo que:
- están contenidas en un solo recurso.
- necesitan identidades independientes.
Las identidades asignadas por el usuario son ideales para cargas de trabajo que:
- se ejecutan en varios recursos y pueden compartir una única identidad.
- necesitan autorización previa para un recurso seguro.
Limitaciones
Los contenedores de inicialización no pueden acceder a identidades administradas en entornos de solo consumo y entornos de perfil de carga de trabajo dedicados
Configuración de identidades administradas
Puede configurar las identidades administradas mediante:
- Azure Portal
- La CLI de Azure
- la plantilla de Azure Resource Manager (ARM)
Cuando se agrega, elimina o modifica una identidad administrada en una Container App en ejecución, la aplicación no se reinicia automáticamente y no se crea una nueva revisión.
Nota:
Al agregar una identidad administrada a una aplicación de contenedor implementada antes del 11 de abril de 2022, debe crear una nueva revisión.
Adición de una identidad asignada por el sistema
Vaya a la aplicación contenedora en Azure Portal.
En el grupo Configuración, seleccione Identidad.
En la pestaña Asignado por el sistema, cambie Estado a Activado.
Seleccione Guardar.
Adición de una identidad asignada por el usuario
La configuración de una Container App con una identidad asignada por el usuario requiere que primero cree la identidad; a continuación, debe agregar su identificador de recurso a la configuración de la Container App. Puede crear identidades asignadas por el usuario a través de Azure Portal o la CLI de Azure. Para obtener información sobre cómo crear y administrar identidades asignadas por el usuario, consulte Administración de identidades administradas asignadas por el usuario.
En primer lugar, tendrá que crear un recurso de identidad asignada por el usuario.
Cree un recurso de identidad administrada asignada por el usuario siguiendo los pasos descritos en Administración de identidades administradas asignadas por el usuario.
Vaya a la aplicación contenedora en Azure Portal.
En el grupo Configuración, seleccione Identidad.
Dentro de la pestaña Usuario asignado, seleccione Agregar.
Busque y seleccione la identidad que creó anteriormente.
Seleccione Agregar.
Configuración de un recurso de destino
En el caso de algunos recursos, debe configurar las asignaciones de roles para que la identidad administrada de la aplicación le conceda acceso. De lo contrario, las llamadas de la aplicación a los servicios, como Azure Key Vault y Azure SQL Database, se rechazarán incluso cuando usa un token válido para esa identidad. Para obtener más información acerca del control de acceso basado en roles (Azure RBAC), consulte ¿Qué es RBAC? Para obtener más información sobre los recursos que admiten tokens de Microsoft Entra, consulte Servicios de Azure que admiten autenticación de Microsoft Entra.
Importante
Los servicios de back-end para identidades administradas mantienen una memoria caché por URI de recurso durante unas veinticuatro horas. Si actualiza la directiva de acceso de un recurso de destino determinado y recupera inmediatamente un token para ese recurso, es posible que siga obteniendo un token en caché con permisos obsoletos hasta la expiración del token. No se admite forzar una actualización de tokens.
Conectar a los servicios de Azure en el código de la aplicación
Con identidades administradas, una aplicación puede obtener tokens para acceder a los recursos de Azure que usan Microsoft Entra ID, como Azure SQL Database, Azure Key Vault y Azure Storage. Estos tokens representan a la aplicación que accede al recurso, y no a un usuario específico de la aplicación.
Container Apps proporciona un punto de conexión de REST accesible internamente para recuperar tokens. El punto de conexión REST está disponible desde dentro de la aplicación con una solicitud HTTP GET
estándar, que puede enviar con un cliente HTTP genérico en su idioma preferido. Para .NET, JavaScript, Java y Python, la biblioteca cliente de identidad de Azure proporciona una abstracción sobre este punto de conexión de REST. Puede conectarse a otros servicios de Azure agregando un objeto de credencial al cliente específico del servicio.
Nota:
Cuando se utiliza la biblioteca de clientes de Azure Identity, es necesario especificar explícitamente el id de cliente de identidad administrada asignada por el usuario.
Nota:
Al conectarse a orígenes de datos de Azure SQL con Entity Framework Core, considere la posibilidad de usar Microsoft.Data.SqlClient, que proporciona cadenas de conexión especiales para la conectividad de identidad administrada.
Para las aplicaciones de .NET, la manera más sencilla de trabajar con una identidad administrada es mediante la biblioteca cliente de identidad de Azure para .NET. Consulta los recursos siguientes para obtener más información:
- Adición de la biblioteca cliente de identidad de Azure al proyecto
- Acceso al servicio de Azure con una identidad asignada por el sistema
- Acceso al servicio de Azure con una identidad asignada por el usuario
Los ejemplos vinculados usan DefaultAzureCredential
. Este objeto es eficaz en la mayoría de los escenarios, ya que el mismo patrón funciona en Azure (con identidades administradas) y en el equipo local (sin identidades administradas).
Uso de la identidad administrada para las reglas de escalado
Puede usar identidades administradas en las reglas de escalado para autenticarse con los servicios de Azure que admitan identidades administradas. Para usar una identidad administrada en la regla de escalado, use la propiedad identity
en lugar de la propiedad auth
en la regla de escalado. Los valores aceptables para la propiedad identity
son el id. de recurso de Azure de una identidad asignada por el usuario o que system
use una identidad asignada por el sistema.
Nota:
La autenticación de identidad administrada en reglas de escalado está en versión preliminar pública. Está disponible en la versión de API 2024-02-02-preview
.
En el siguiente ejemplo de plantilla de ARM se muestra cómo usar una identidad administrada con una regla de escalado de Azure Queue Storage:
La cuenta de Queue Storage usa la propiedad accountName
para identificar la cuenta de almacenamiento, mientras que la propiedad identity
especifica qué identidad administrada se va a usar. No es necesario usar la propiedad auth
.
"scale": {
"minReplicas": 1,
"maxReplicas": 10,
"rules": [{
"name": "myQueueRule",
"azureQueue": {
"accountName": "mystorageaccount",
"queueName": "myqueue",
"queueLength": 2,
"identity": "<IDENTITY1_RESOURCE_ID>"
}
}]
}
Para más información sobre el uso de la identidad administrada con reglas de escalado, consulte Establecimiento de reglas de escalado en Azure Container Apps.
Control de la disponibilidad de la identidad administrada
Container Apps permite especificar contenedores de inicialización y contenedores principales. De forma predeterminada, los contenedores principal y de inicialización de un entorno de perfil de carga de trabajo de consumo pueden usar la identidad administrada para acceder a otros servicios de Azure. En entornos de solo consumo y entornos de perfil de carga de trabajo dedicados, solo los contenedores principales pueden usar la identidad administrada. Los tokens de acceso de identidad administrada están disponibles para cada identidad administrada configurada en la aplicación contenedora. Sin embargo, en algunas situaciones solo el contenedor de inicialización o el contenedor principal requieren tokens de acceso para una identidad administrada. En otras ocasiones, puede usar una identidad administrada solo para acceder a Azure Container Registry a extraer la imagen del contenedor y la propia aplicación no necesita tener acceso a Azure Container Registry.
A partir de la versión de API 2024-02-02-preview
, puede controlar qué identidades administradas están disponibles para la aplicación contenedora durante las fases inicial y principal para seguir el principio de seguridad de privilegios mínimos. Están disponibles las opciones siguientes:
Init
: solo está disponible para los contenedores de inicialización. Úselo cuando quiera realizar algún trabajo de inicialización que requiera una identidad administrada, pero ya no necesite la identidad administrada en el contenedor principal. Esta opción solo se admite actualmente en entornos de consumo de perfiles de carga de trabajoMain
: solo está disponible para los contenedores principales. Úselo si el contenedor de inicialización no necesita una identidad administrada.All
: disponible para todos los contenedores. Este valor es la configuración predeterminada.None
: no está disponible para ningún contenedor. Úselo cuando tenga una identidad administrada que solo se use para los secretos de extracción de imagen de ACR, reglas de escalado o Key Vault y no es necesario que esté disponible para el código que se ejecuta en los contenedores.
En el siguiente ejemplo de plantilla de ARM se muestra cómo configurar una aplicación contenedora en un entorno de consumo de perfiles de carga de trabajo que:
- Restringe la identidad asignada por el sistema de la aplicación contenedora solo a los contenedores principales.
- Restringe una identidad asignada por el usuario específica solo a contenedores de inicialización.
- Usa una identidad asignada por el usuario específica para la extracción de imágenes de Azure Container Registry sin permitir que el código de los contenedores use esa identidad administrada para acceder al registro. En este ejemplo, los propios contenedores no necesitan acceder al registro.
Este enfoque limita los recursos a los que se puede acceder si un actor malintencionado tenía que obtener acceso no autorizado a los contenedores.
{
"location": "eastus2",
"identity":{
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"<IDENTITY1_RESOURCE_ID>":{},
"<ACR_IMAGEPULL_IDENTITY_RESOURCE_ID>":{}
}
},
"properties": {
"workloadProfileName":"Consumption",
"environmentId": "<CONTAINER_APPS_ENVIRONMENT_ID>",
"configuration": {
"registries": [
{
"server": "myregistry.azurecr.io",
"identity": "ACR_IMAGEPULL_IDENTITY_RESOURCE_ID"
}],
"identitySettings":[
{
"identity": "ACR_IMAGEPULL_IDENTITY_RESOURCE_ID",
"lifecycle": "None"
},
{
"identity": "<IDENTITY1_RESOURCE_ID>",
"lifecycle": "Init"
},
{
"identity": "system",
"lifecycle": "Main"
}]
},
"template": {
"containers":[
{
"image":"myregistry.azurecr.io/main:1.0",
"name":"app-main"
}
],
"initContainers":[
{
"image":"myregistry.azurecr.io/init:1.0",
"name":"app-init",
}
]
}
}
}
Visualización de identidades administradas
Puede mostrar las identidades administradas asignadas por el sistema y asignadas por el usuario mediante el siguiente comando de la CLI de Azure. La salida muestra el tipo de identidad administrada, los identificadores de inquilino y los identificadores de entidad de seguridad de todas las identidades administradas asignadas a la aplicación contenedora.
az containerapp identity show --name <APP_NAME> --resource-group <GROUP_NAME>
Eliminación de una entidad administrada
Cuando se quita una identidad asignada por el sistema, se elimina de Microsoft Entra ID. Las identidades asignadas por el sistema también se eliminan automáticamente de Microsoft Entra ID cuando se elimina el propio recurso de la aplicación contenedora. La eliminación de las identidades administradas asignadas por el usuario de su aplicación de contenedor no las elimina de Microsoft Entra ID.
En el panel de navegación izquierdo de la página de la aplicación, desplácese hacia abajo hasta el grupo Configuración.
Seleccione Identidad. A continuación, siga los pasos según el tipo de identidad:
- Identidad asignada por el sistema: en la pestaña Asignado por el sistema, cambie Estado a Desactivado. Seleccione Guardar.
- Identidad asignada por el usuario: seleccione la pestaña Asignado por el usuario, active la casilla de la identidad y seleccione Quitar. Seleccione Sí para confirmar la acción.