Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El enfoque recomendado para autenticar una aplicación hospedada en Azure en otros recursos de Azure es usar una identidad administrada. Este enfoque se admite para la mayoría de los servicios de Azure, incluidas las aplicaciones hospedadas en Azure App Service, Azure Container Apps y Azure Virtual Machines. Obtenga más información sobre las distintas técnicas y enfoques de autenticación en la página de información general de autenticación . En las secciones siguientes, aprenderá lo siguiente:
- Conceptos esenciales de identidad administrada
- Creación de una identidad administrada asignada por el usuario para la aplicación
- Asignación de roles a la identidad administrada asignada por el usuario
- Autenticación mediante la identidad administrada asignada por el usuario desde el código de la aplicación
Conceptos esenciales de identidad administrada
Una identidad administrada permite a la aplicación conectarse de forma segura a otros recursos de Azure sin el uso de claves secretas u otros secretos de aplicación. Internamente, Azure realiza un seguimiento de la identidad y a qué recursos puede conectarse. Azure usa esta información para obtener automáticamente tokens de Microsoft Entra para la aplicación para permitir que se conecte a otros recursos de Azure.
Hay dos tipos de identidades administradas que se deben tener en cuenta al configurar la aplicación hospedada:
- Las identidades administradas asignadas por el sistema se habilitan directamente en un recurso de Azure y están vinculadas a su ciclo de vida. Cuando se elimina el recurso, Azure elimina automáticamente la identidad automáticamente. Las identidades asignadas por el sistema proporcionan un enfoque minimalista para usar identidades administradas.
- Las identidades administradas asignadas por el usuario se crean como recursos independientes de Azure y ofrecen mayor flexibilidad y funcionalidades. Son ideales para soluciones que implican varios recursos de Azure que necesitan compartir la misma identidad y permisos. Por ejemplo, si varias máquinas virtuales necesitan acceder al mismo conjunto de recursos de Azure, una identidad administrada asignada por el usuario proporciona reutilización y administración optimizada.
Sugerencia
Obtenga más información sobre cómo seleccionar y administrar identidades administradas asignadas por el sistema y asignadas por el usuario en el artículo recomendaciones de procedimientos recomendados de identidad administrada .
En las secciones siguientes se describen los pasos para habilitar y usar una identidad administrada asignada por el usuario para una aplicación hospedada en Azure. Si necesita usar una identidad administrada asignada por el sistema, visite el artículo identidades administradas asignadas por el sistema para obtener más información.
Creación de una identidad administrada asignada por el usuario
Las identidades administradas asignadas por el usuario se crean como recursos independientes en la suscripción de Azure mediante Azure Portal o la CLI de Azure. Los comandos de la CLI de Azure se pueden ejecutar en Azure Cloud Shell o en una estación de trabajo con la CLI de Azure instalada.
En Azure Portal, escriba Identidades administradas en la barra de búsqueda principal y seleccione el resultado coincidente en la sección Servicios .
En la página Identidades administradas , seleccione + Crear.
En la página Crear identidad administrada asignada por el usuario , seleccione una suscripción, un grupo de recursos y una región para la identidad administrada asignada por el usuario y proporcione un nombre.
Seleccione Revisar y crear para revisar y validar las entradas.
Seleccione Crear para crear la identidad administrada asignada por el usuario.
Una vez creada la identidad, seleccione Ir al recurso.
En la página Información general de la nueva identidad, copie el valor de Id. de cliente que se usará más adelante al configurar el código de la aplicación.
Asignación de la identidad administrada a la aplicación
Una identidad administrada asignada por el usuario se puede asociar a uno o varios recursos de Azure. Todos los recursos que usan esa identidad obtienen los permisos aplicados a través de los roles de la identidad.
En Azure Portal, vaya al recurso que hospeda el código de la aplicación, como una instancia de Azure App Service o azure Container App.
En la página Información general del recurso, expanda Configuración y seleccione Identidad en el panel de navegación.
En la página Identidad, cambie a la pestaña Asignado por el usuario.
Seleccione + Agregar para abrir el panel Agregar identidad administrada asignada por el usuario .
En el panel Agregar identidad administrada asignada por el usuario , use la lista desplegable Suscripción para filtrar los resultados de búsqueda de sus identidades. Use el cuadro de búsqueda Identidades administradas asignadas por el usuario para buscar la identidad administrada asignada por el usuario que ha habilitado para el recurso de Azure que hospeda la aplicación.
Seleccione la identidad y elija Agregar en la parte inferior del panel para continuar.
Asignación de roles a la identidad administrada
A continuación, determine qué roles necesita la aplicación y asígnelos a la identidad administrada. Puede asignar roles a una identidad administrada en los ámbitos siguientes:
- Recurso: los roles asignados solo se aplican a ese recurso específico.
- Grupo de recursos: los roles asignados se aplican a todos los recursos contenidos en el grupo de recursos.
- Suscripción: los roles asignados se aplican a todos los recursos contenidos en la suscripción.
En el ejemplo siguiente se muestra cómo asignar roles en el ámbito del grupo de recursos, ya que muchas aplicaciones administran todos sus recursos de Azure relacionados mediante un único grupo de recursos.
Vaya a la página Información general del grupo de recursos que contiene la aplicación con la identidad administrada asignada por el usuario.
Seleccione Control de acceso (IAM) en el panel de navegación izquierdo.
En la página Control de acceso (IAM), seleccione + Agregar en el menú superior y elija Agregar asignación de roles para ir a la página Agregar asignación de roles .
La página Agregar asignación de roles presenta un flujo de trabajo de varios pasos con pestañas para asignar roles a identidades. En la pestaña Rol inicial, use el cuadro de búsqueda de la parte superior para buscar el rol que desea asignar a la identidad.
Seleccione el rol en los resultados y, a continuación, elija Siguiente para ir a la pestaña Miembros .
En la opción Asignar acceso a , seleccione Identidad administrada.
En la opción Miembros , elija + Seleccionar miembros para abrir el panel Seleccionar identidades administradas .
En el panel Seleccionar identidades administradas , use las listas desplegables Suscripción e Identidad administrada para filtrar los resultados de búsqueda de sus identidades. Use el cuadro de búsqueda Seleccionar para buscar la identidad administrada asignada por el usuario que ha habilitado para el recurso de Azure que hospeda la aplicación.
Seleccione la identidad y elija Seleccionar en la parte inferior del panel para continuar.
Seleccione Revisar y asignar en la parte inferior de la página.
En la pestaña Revisar y asignar final, seleccione Revisar y asignar para completar el flujo de trabajo.
Autenticación en servicios de Azure desde la aplicación
La biblioteca de identidades de Azure proporciona varias credenciales : implementaciones de TokenCredential adaptadas para admitir diferentes escenarios y flujos de autenticación de Microsoft Entra. Dado que la identidad administrada no está disponible cuando se ejecuta localmente, los pasos siguientes muestran qué credencial usar en qué escenario:
-
Entorno de desarrollo local: durante el desarrollo local solo, use una clase denominada DefaultAzureCredential para una cadena preconfigurada y con opiniones de credenciales.
DefaultAzureCredentialdetecta las credenciales de usuario de las herramientas o IDE locales, como la CLI de Azure o Visual Studio Code. También proporciona flexibilidad y comodidad para reintentos, tiempos de espera para respuestas y compatibilidad con varias opciones de autenticación. Visite el artículo Autenticación en servicios de Azure durante el desarrollo local para más información. -
Aplicaciones hospedadas en Azure: cuando la aplicación se ejecuta en Azure, use
ManagedIdentityCredentialpara detectar de forma segura la identidad administrada configurada para la aplicación. Especificar este tipo exacto de credencial impide que otras credenciales disponibles se recojan inesperadamente.
Implementación del código
En un proyecto de JavaScript, agregue el paquete @azure/identity . En un terminal de su elección, vaya al directorio del proyecto de aplicación y ejecute los siguientes comandos:
npm install @azure/identity
Se accede a los servicios de Azure mediante clases de cliente especializadas de las distintas bibliotecas cliente del SDK de Azure. En index.js, complete los pasos siguientes para configurar la autenticación basada en tokens:
- Importe el
@azure/identitypaquete. - Pase una instancia adecuada
TokenCredentialal cliente:- Use
DefaultAzureCredentialcuando la aplicación se ejecute localmente. - Use
ManagedIdentityCredentialcuando la aplicación se ejecute en Azure y configure el identificador de cliente, el identificador de recurso o el identificador de objeto.
- Use
El identificador de cliente se usa para identificar una identidad administrada al configurar aplicaciones o servicios que necesitan autenticarse con esa identidad.
Recupere el identificador de cliente asignado a una identidad administrada asignada por el usuario mediante el siguiente comando:
az identity show \ --resource-group <resource-group-name> \ --name <identity-name> \ --query 'clientId'Configure
ManagedIdentityCredentialcon el identificador de cliente:import { BlobServiceClient } from '@azure/storage-blob'; import { ManagedIdentityCredential, DefaultAzureCredential } from '@azure/identity'; console.log(process.env); function createBlobServiceClient() { const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME; if (!accountName) throw Error('Azure Storage accountName not found'); const url = `https://${accountName}.blob.core.windows.net`; if (process.env.NODE_ENV === "production") { const clientId = process.env.AZURE_CLIENT_ID; if (!clientId) throw Error('AZURE_CLIENT_ID not found for Managed Identity'); return new BlobServiceClient(url, new ManagedIdentityCredential(clientId)); } else { return new BlobServiceClient(url, new DefaultAzureCredential()); } } async function main() { try { const blobServiceClient = createBlobServiceClient(); const containerClient = blobServiceClient.getContainerClient(process.env.AZURE_STORAGE_CONTAINER_NAME); // do something with client const properties = await containerClient.getProperties(); console.log(properties); } catch (err) { console.error("Error retrieving container properties:", err.message); throw err; } } main().catch((err) => { console.error("Error running sample:", err.message); process.exit(1); });
Implementación del código
En un proyecto de TypeScript, agregue el paquete @azure/identity . En un terminal de su elección, vaya al directorio del proyecto de aplicación y ejecute los siguientes comandos:
npm install typescript @azure/identity @types/node
Se accede a los servicios de Azure mediante clases de cliente especializadas de las distintas bibliotecas cliente del SDK de Azure. En index.js, complete los pasos siguientes para configurar la autenticación basada en tokens:
- Importe el
@azure/identitypaquete. - Pase una instancia adecuada
TokenCredentialal cliente:- Usar
DefaultAzureCredentialcuando la aplicación se ejecuta localmente - Use
ManagedIdentityCredentialcuando la aplicación se ejecute en Azure y configure el identificador de cliente, el identificador de recurso o el identificador de objeto.
- Usar
El identificador de cliente se usa para identificar una identidad administrada al configurar aplicaciones o servicios que necesitan autenticarse con esa identidad.
Recupere el identificador de cliente asignado a una identidad administrada asignada por el usuario mediante el siguiente comando:
az identity show \ --resource-group <resource-group-name> \ --name <identity-name> \ --query 'clientId'Configure
ManagedIdentityCredentialcon el identificador de cliente:import { BlobServiceClient } from '@azure/storage-blob'; import { ManagedIdentityCredential, DefaultAzureCredential } from '@azure/identity'; function createBlobServiceClient(): BlobServiceClient { const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME; if (!accountName) throw Error('Azure Storage accountName not found'); const url = `https://${accountName}.blob.core.windows.net`; if (process.env.NODE_ENV === "production") { const clientId = process.env.AZURE_CLIENT_ID; if (!clientId) throw Error('AZURE_CLIENT_ID not found for Managed Identity'); return new BlobServiceClient(url, new ManagedIdentityCredential(clientId)); } else { return new BlobServiceClient(url, new DefaultAzureCredential()); } } async function main(): Promise<void> { try { const blobServiceClient = createBlobServiceClient(); const containerClient = blobServiceClient.getContainerClient(process.env.AZURE_STORAGE_CONTAINER_NAME!); const properties = await containerClient.getProperties(); console.log(properties); } catch (err: any) { console.error("Error retrieving container properties:", err.message); throw err; } } main().catch((err: Error) => { console.error("Error running sample:", err.message); process.exit(1); });
El código anterior se comporta de forma diferente en función del entorno en el que se ejecuta:
- En la estación de trabajo de desarrollo local,
DefaultAzureCredentialbusca en las variables de entorno de una entidad de servicio de aplicación o en las herramientas de desarrollo instaladas localmente, como Visual Studio Code, para obtener un conjunto de credenciales de desarrollador. - Cuando se implementa en Azure,
ManagedIdentityCredentialdetecta las configuraciones de identidad administrada para autenticarse en otros servicios automáticamente.