Asignación de acceso de identidad administrada a un rol de aplicación
Las identidades administradas de los recursos de Azure proporcionan a los servicios de Azure una identidad en Microsoft Entra ID. Funcionan sin necesidad de usar credenciales en el código. Los servicios de Azure usan esta identidad para autenticarse en servicios compatibles con la autenticación de Microsoft Entra. Los roles de aplicación ofrecen una forma de control de acceso basado en roles y permiten que un servicio implemente reglas de autorización.
Nota:
La infraestructura subyacente almacena en caché los tokens que recibe la aplicación. Esto significa que los cambios en los roles de la identidad administrada pueden tardar mucho tiempo en procesarse. Para más información, consulte Limitación del uso de identidades administradas para la autorización.
En este artículo, aprenderá a asignar una identidad administrada a un rol de aplicación mostrado por otra aplicación mediante el SDK de PowerShell de Microsoft Graph.
Requisitos previos
- Si no conoce las identidades administradas para recursos de Azure, consulte Información general sobre la identidad administrada para recursos de Azure.
- Revise la diferencia entre una identidad administrada asignada por el sistema y asignada por el usuario.
- Si aún no tiene una cuenta de Azure, regístrese para una cuenta gratuita antes de continuar.
Asignación de acceso de identidad administrada al rol de aplicación de otra aplicación con PowerShell
Para ejecutar los scripts de ejemplo, tiene dos opciones:
- Use el servicio Azure Cloud Shell, que puede abrir mediante el botón Probar, ubicado en la esquina superior derecha de los bloques de código.
- Ejecute scripts localmente mediante la instalación de la versión más reciente del SDK de PowerShell de Microsoft Graph.
Habilite la identidad administrada en un recurso de Azure, como una máquina virtual de Azure.
Busque el identificador de objeto de la entidad de servicio de la identidad administrada.
En el caso de una identidad administrada asignada por el sistema, encontrará el identificador de objeto en la página de identidad del recurso en Azure Portal. También puede usar el siguiente script de PowerShell para buscar el identificador de objeto. Necesitará el identificador del recurso que creó en el paso 1, que está disponible en la página Propiedades del recurso en Azure Portal.
$resourceIdWithManagedIdentity = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.Compute/virtualMachines/{my virtual machine name}' (Get-AzResource -ResourceId $resourceIdWithManagedIdentity).Identity.PrincipalId
En el caso de una identidad administrada asignada por el usuario, encontrará el identificador de objeto de la identidad administrada en la página de información general del recurso en Azure Portal. También puede usar el siguiente script de PowerShell para buscar el identificador de objeto. Necesitará el identificador del recurso de la identidad administrada asignada por el usuario.
$userManagedIdentityResourceId = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{my managed identity name}' (Get-AzResource -ResourceId $userManagedIdentityResourceId).Properties.PrincipalId
Cree un nuevo registro de aplicación para representar el servicio al que desea que la identidad administrada envíe una solicitud.
- Omita este paso si la API o el servicio que muestran la concesión de rol de aplicación a la identidad administrada ya tiene una entidad de servicio en el inquilino de Microsoft Entra. Por ejemplo, en el caso de que quiera conceder a la identidad administrada acceso a Microsoft Graph API.
Busque el identificador de objeto de la entidad de servicio de la aplicación de servicio. Puede encontrarlo en Azure Portal.
- Por ejemplo, vaya a Microsoft Entra ID y abra la página aplicaciones Enterprise. A continuación, busque la aplicación y busque el identificador de objeto.
- También puede buscar el identificador de objeto de la entidad de servicio por su nombre para mostrar. Para ello, use el siguiente script de PowerShell:
$serverServicePrincipalObjectId = (Get-MgServicePrincipal -Filter "DisplayName eq '$applicationName'").Id
Nota:
Los nombres para mostrar de las aplicaciones no son únicos, por lo que debe comprobar que obtiene la entidad de servicio de la aplicación correcta.
Agregue un rol de aplicación a la aplicación que creó en el paso anterior. Puede crear el rol mediante Azure Portal o Microsoft Graph.
- Por ejemplo, puede agregar un rol de aplicación mediante la ejecución de la siguiente consulta en el Probador de Graph:
PATCH /applications/{id}/ { "appRoles": [ { "allowedMemberTypes": [ "User", "Application" ], "description": "Read reports", "id": "1e250995-3081-451e-866c-0f6efef9c638", "displayName": "Report reader", "isEnabled": true, "value": "report.read" } ] }
Asigne el rol de aplicación a la identidad administrada. Para asignar el rol de aplicación, necesitará la siguiente información:
managedIdentityObjectId
: el identificador de objeto de la entidad de servicio de la identidad administrada, que encontró en el paso 2 anterior.serverServicePrincipalObjectId
: el identificador de objeto de la entidad de servicio de la aplicación de servidor, que encontró en el paso 4.appRoleId
: el identificador del rol de aplicación mostrado por la aplicación de servidor, que se generó en el paso 5; en el ejemplo, el identificador del rol de aplicación es00000000-0000-0000-0000-000000000000
.
- Ejecute el siguiente comando de PowerShell para agregar la asignación de roles:
New-MgServicePrincipalAppRoleAssignment ` -ServicePrincipalId $serverServicePrincipalObjectId ` -PrincipalId $managedIdentityObjectId ` -ResourceId $serverServicePrincipalObjectId ` -AppRoleId $appRoleId
Script de ejemplo completo
Este script de ejemplo muestra cómo asignar una identidad administrada de una aplicación web de Azure a un rol de aplicación.
# Install the module.
# Install-Module Microsoft.Graph -Scope CurrentUser
# Your tenant ID (in the Azure portal, under Azure Active Directory > Overview).
$tenantID = '<tenant-id>'
# The name of your web app, which has a managed identity that should be assigned to the server app's app role.
$webAppName = '<web-app-name>'
$resourceGroupName = '<resource-group-name-containing-web-app>'
# The name of the server app that exposes the app role.
$serverApplicationName = '<server-application-name>' # For example, MyApi
# The name of the app role that the managed identity should be assigned to.
$appRoleName = '<app-role-name>' # For example, MyApi.Read.All
# Look up the web app's managed identity's object ID.
$managedIdentityObjectId = (Get-AzWebApp -ResourceGroupName $resourceGroupName -Name $webAppName).identity.principalid
Connect-MgGraph -TenantId $tenantId -Scopes 'Application.Read.All','Application.ReadWrite.All','AppRoleAssignment.ReadWrite.All','Directory.AccessAsUser.All','Directory.Read.All','Directory.ReadWrite.All'
# Look up the details about the server app's service principal and app role.
$serverServicePrincipal = (Get-MgServicePrincipal -Filter "DisplayName eq '$serverApplicationName'")
$serverServicePrincipalObjectId = $serverServicePrincipal.Id
$appRoleId = ($serverServicePrincipal.AppRoles | Where-Object {$_.Value -eq $appRoleName }).Id
# Assign the managed identity access to the app role.
New-MgServicePrincipalAppRoleAssignment `
-ServicePrincipalId $serverServicePrincipalObjectId `
-PrincipalId $managedIdentityObjectId `
-ResourceId $serverServicePrincipalObjectId `
-AppRoleId $appRoleId
Asignación de acceso de identidad administrada al rol de aplicación de otra aplicación con la CLI
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Inicio rápido para Bash en Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. Para más información, vea Ejecución de la CLI de Azure en un contenedor de Docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión con la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
Habilite la identidad administrada en un recurso de Azure, como máquinas virtuales de Azure.
Busque el identificador de objeto de la entidad de servicio de la identidad administrada.
- En el caso de una identidad administrada asignada por el sistema, encontrará el identificador de objeto en la página de identidad del recurso en Azure Portal.
- También puede usar el siguiente script para buscar el identificador de objeto. Necesitará el identificador del recurso que creó en el paso 1 anterior, que está disponible en la página Propiedades del recurso en Azure Portal.
resourceIdWithManagedIdentity="/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.Compute/virtualMachines/{my virtual machine name}" oidForMI=$(az resource show --ids $resourceIdWithManagedIdentity --query "identity.principalId" -o tsv | tr -d '[:space:]') echo "object id for managed identity is: $oidForMI"
- En el caso de una identidad administrada asignada por el usuario, encontrará el identificador de objeto de la identidad administrada en la página de información general del recurso en Azure Portal. También puede usar el siguiente script para buscar el identificador de objeto. Necesitará el identificador del recurso de la identidad administrada asignada por el usuario.
userManagedIdentityResourceId="/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{my managed identity name}" oidForMI=$(az resource show --id $userManagedIdentityResourceId --query "properties.principalId" -o tsv | tr -d '[:space:]') echo "object id for managed identity is: $oidForMI"
Cree un nuevo registro de aplicación que represente el servicio al que la identidad administrada enviará una solicitud.
- Omita este paso si la API o el servicio que muestran la concesión de rol de aplicación a la identidad administrada ya tiene una entidad de servicio en el inquilino de Microsoft Entra.
Busque el identificador de objeto de la entidad de servicio de la aplicación de servicio. Puede encontrarlo en Azure Portal.
- Vaya a Microsoft Entra ID y abra la página Aplicaciones empresariales. A continuación, busque la aplicación y el identificador de objeto.
- También puede buscar el identificador de objeto de la entidad de servicio por su nombre para mostrar. Para ello, use el siguiente script:
appName="{name for your application}" serverSPOID=$(az ad sp list --filter "displayName eq '$appName'" --query '[0].id' -o tsv | tr -d '[:space:]') echo "object id for server service principal is: $serverSPOID"
Nota
Los nombres para mostrar de las aplicaciones no son únicos, por lo que debe comprobar que obtiene la entidad de servicio de la aplicación correcta.
También puede encontrar el identificador de objeto por el identificador de aplicación único para el registro de la aplicación:
appID="{application id for your application}" serverSPOID=$(az ad sp list --filter "appId eq '$appID'" --query '[0].id' -o tsv | tr -d '[:space:]') echo "object id for server service principal is: $serverSPOID"
Agregue un rol de aplicación a la aplicación que creó en el paso anterior. Puede crear el rol mediante Azure Portal o Microsoft Graph. Por ejemplo, podría agregar un rol de aplicación como el siguiente:
{ "allowedMemberTypes": [ "Application" ], "displayName": "Read data from MyApi", "id": "0566419e-bb95-4d9d-a4f8-ed9a0f147fa6", "isEnabled": true, "description": "Allow the application to read data as itself.", "value": "MyApi.Read.All" }
Asigne el rol de aplicación a la identidad administrada. Para asignar el rol de aplicación, necesitará la siguiente información:
managedIdentityObjectId
: el identificador de objeto de la entidad de servicio de la identidad administrada, que encontró en el paso 2.serverServicePrincipalObjectId
: el identificador de objeto de la entidad de servicio de la aplicación de servidor, que encontró en el paso 4.appRoleId
: el identificador del rol de aplicación mostrado por la aplicación de servidor, que se generó en el paso 5; en el ejemplo, el identificador del rol de aplicación es00000000-0000-0000-0000-000000000000
.
Ejecute el siguiente script para agregar la asignación de roles. Esta funcionalidad no se expone directamente en CLI de Azure y aquí se usa un comando REST en su lugar:
roleguid="00000000-0000-0000-0000-000000000000" az rest -m POST -u https://graph.microsoft.com/v1.0/servicePrincipals/$oidForMI/appRoleAssignments -b "{\"principalId\": \"$oidForMI\", \"resourceId\": \"$serverSPOID\",\"appRoleId\": \"$roleguid\"}"
Pasos siguientes
- Identidades administradas de recursos de Azure
- Para habilitar la identidad administrada de una máquina virtual de Azure, consulte Configuración de identidades administradas de recursos de Azure en una VM de Azure.