Asignación de acceso de identidad administrada a un rol de aplicación mediante PowerShell
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
Los tokens que recibe la aplicación se almacenan en caché en la infraestructura subyacente, lo que significa que cualquier cambio en los roles de la identidad administrada puede tardar mucho tiempo en tener efecto. Para más información, vea 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 está familiarizado con las identidades administradas de los recursos de Azure, consulte la sección de introducción. No olvide revisar la diferencia entre una identidad administrada asignada por el sistema y una identidad administrada asignada por el usuario .
- Si aún no tiene una cuenta de Azure, regístrese para una cuenta gratuita antes de continuar.
- 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.
Asignación de acceso de identidad administrada al rol de aplicación de otra aplicación
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 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. Por ejemplo, si desea conceder el acceso de identidad administrada a Microsoft Graph API, puede omitir el paso.
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 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 3. 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.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 es0566419e-bb95-4d9d-a4f8-ed9a0f147fa6
.
Ejecute el siguiente comando de PowerShell para agregar la asignación de roles:
New-MgServicePrincipalAppRoleAssignment ` -ServicePrincipalId $serverServicePrincipalObjectId ` -PrincipalId $managedIdentityObjectId ` -ResourceId $serverServicePrincipalObjectId ` -AppRoleId $appRoleId
Completar script
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
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 mediante PowerShell.