Toegang tot een beheerde identiteit toewijzen aan een toepassingsrol
Beheerde identiteiten voor Azure-resources bieden Azure-services een identiteit in Microsoft Entra-id. Ze werken zonder referenties in uw code nodig te hebben. Azure-services gebruiken deze identiteit om te verifiëren bij services die ondersteuning bieden voor Microsoft Entra-verificatie. Toepassingsrollen bieden een vorm van op rollen gebaseerd toegangsbeheer en stellen een service in staat autorisatieregels te implementeren.
Notitie
De tokens die uw toepassing ontvangt, worden in de cache opgeslagen door de onderliggende infrastructuur. Dit betekent dat het veel tijd kost om wijzigingen in de rollen van de beheerde identiteit te verwerken. Zie Beperking van het gebruik van beheerde identiteiten voor autorisatie voor meer informatie.
In dit artikel leert u hoe u een beheerde identiteit toewijst aan een toepassingsrol die wordt weergegeven door een andere toepassing met behulp van de Microsoft Graph PowerShell SDK.
Vereisten
- Als u niet bekend bent met beheerde identiteiten voor Azure-resources, raadpleegt u het overzicht van beheerde identiteiten voor Azure-resources.
- Bekijk het verschil tussen een door het systeem toegewezen en door de gebruiker toegewezen beheerde identiteit.
- Als u nog geen Azure-account hebt, registreer u dan voor een gratis account voordat u verdergaat.
Toegang tot een beheerde identiteit toewijzen aan de app-rol van een andere toepassing met behulp van PowerShell
Als u de voorbeeldscripts wilt uitvoeren, hebt u twee opties:
- Gebruik de Azure Cloud Shell, die u kunt openen met behulp van de knop Probeer het nu in de rechterbovenhoek van codeblokken.
- Voer scripts lokaal uit door de nieuwste versie van de Microsoft Graph PowerShell SDK te installeren.
Schakel beheerde identiteit in voor een Azure-resource, zoals een Azure-VM.
Zoek de object-id van de service-principal van de beheerde identiteit.
Voor een door het systeem toegewezen beheerde identiteit kunt u de object-id vinden in de Azure-portal op de pagina Identiteit van de resource. U kunt ook het volgende PowerShell-script gebruiken om de object-id te vinden. U hebt de resource-id nodig van de resource die u in stap 1 hebt gemaakt. Deze is beschikbaar in de Azure-portal op de pagina Eigenschappen van de resource.
$resourceIdWithManagedIdentity = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.Compute/virtualMachines/{my virtual machine name}' (Get-AzResource -ResourceId $resourceIdWithManagedIdentity).Identity.PrincipalId
Voor een door de gebruiker toegewezen beheerde identiteit kunt u de object-id van de beheerde identiteit vinden in de Azure-portal op de pagina Overzicht van de resource. U kunt ook het volgende PowerShell-script gebruiken om de object-id te vinden. U hebt de resource-id van de door de gebruiker toegewezen beheerde identiteit nodig.
$userManagedIdentityResourceId = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{my managed identity name}' (Get-AzResource -ResourceId $userManagedIdentityResourceId).Properties.PrincipalId
Maak een nieuwe toepassingsregistratie om de service weer te geven waarnaar uw beheerde identiteit een aanvraag moet verzenden.
- Als de API of service die de app-rol beschikbaar maakt voor de beheerde identiteit al een service-principal in uw Microsoft Entra-tenant heeft, slaat u deze stap over. In het geval dat u bijvoorbeeld de beheerde identiteit toegang wilt verlenen tot de Microsoft Graph API.
Zoek de object-id van de service-principal van de servicetoepassing. U kunt deze vinden met behulp van de Azure-portal.
- Ga bijvoorbeeld naar Microsoft Entra-id en open de pagina Bedrijfstoepassingen . Zoek vervolgens de toepassing en zoek naar de object-id.
- U kunt de object-id van de service-principal ook vinden op basis van de weergavenaam met behulp van het volgende PowerShell-script:
$serverServicePrincipalObjectId = (Get-MgServicePrincipal -Filter "DisplayName eq '$applicationName'").Id
Notitie
Weergavenamen voor toepassingen zijn niet uniek, dus controleer of u de service-principal van de juiste toepassing ophaalt.
Voeg een app-rol toe aan de toepassing die u in de vorige stap hebt gemaakt. Vervolgens kunt u de rol maken met behulp van Azure Portal of met behulp van Microsoft Graph.
- U kunt bijvoorbeeld een app-rol toevoegen door de volgende query uit te voeren in Graph Explorer:
PATCH /applications/{id}/ { "appRoles": [ { "allowedMemberTypes": [ "User", "Application" ], "description": "Read reports", "id": "1e250995-3081-451e-866c-0f6efef9c638", "displayName": "Report reader", "isEnabled": true, "value": "report.read" } ] }
Wijs de app-rol toe aan de beheerde identiteit. U hebt de volgende informatie nodig om de app-rol toe te wijzen:
managedIdentityObjectId
: de object-id van de service-principal van de beheerde identiteit, die u in de vorige stap hebt gevonden.serverServicePrincipalObjectId
: de object-id van de service-principal van de servertoepassing, die u in stap 4 hebt gevonden.appRoleId
: de id van de app-rol die wordt weergegeven door de server-app, die u in stap 5 hebt gegenereerd – in het voorbeeld is de app-rol-id00000000-0000-0000-0000-000000000000
.
- Voer de volgende PowerShell-opdracht uit om de roltoewijzing toe te voegen:
New-MgServicePrincipalAppRoleAssignment ` -ServicePrincipalId $serverServicePrincipalObjectId ` -PrincipalId $managedIdentityObjectId ` -ResourceId $serverServicePrincipalObjectId ` -AppRoleId $appRoleId
Volledig voorbeeldscript
In dit voorbeeldscript ziet u hoe u de beheerde identiteit van een Azure-web-app toewijst aan een app-rol.
# 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
Een beheerde identiteit toegang toewijzen aan de app-rol van een andere toepassing met behulp van CLI
Gebruik de Bash-omgeving in Azure Cloud Shell. Zie quickstart voor Bash in Azure Cloud Shell voor meer informatie.
Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren. Als u in Windows of macOS werkt, kunt u Azure CLI uitvoeren in een Docker-container. Zie De Azure CLI uitvoeren in een Docker-container voor meer informatie.
Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht az login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Raadpleeg Aanmelden bij Azure CLI voor aanvullende aanmeldingsopties.
Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Raadpleeg Extensies gebruiken met Azure CLI voor meer informatie over extensies.
Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.
Beheerde identiteit inschakelen voor een Azure-resource, zoals een virtuele Azure-machine.
Zoek de object-id van de service-principal van de beheerde identiteit.
- Voor een door het systeem toegewezen beheerde identiteit kunt u de object-id vinden in de Azure-portal op de pagina Identiteit van de resource.
- U kunt ook het volgende script gebruiken om de object-id te vinden. U hebt de resource-id nodig van de resource die u in de vorige stap hebt gemaakt. Deze is beschikbaar in Azure Portal op de pagina Eigenschappen van de resource.
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"
- Voor een door de gebruiker toegewezen beheerde identiteit kunt u de object-id van de beheerde identiteit vinden in de Azure-portal op de pagina Overzicht van de resource. U kunt ook het volgende script gebruiken om de object-id te vinden. U hebt de resource-id van de door de gebruiker toegewezen beheerde identiteit nodig.
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"
Maak een nieuwe toepassingsregistratie om de service weer te geven waarnaar uw beheerde identiteit een aanvraag verzendt.
- Als de API of service die de app-rol beschikbaar maakt voor de beheerde identiteit al een service-principal in uw Microsoft Entra-tenant heeft, slaat u deze stap over.
Zoek de object-id van de service-principal van de servicetoepassing. U kunt deze vinden met behulp van de Azure-portal.
- Ga naar Microsoft Entra ID en open de pagina Bedrijfstoepassingen , zoek de toepassing en zoek de object-id.
- U kunt de object-id van de service-principal ook vinden op basis van de weergavenaam met behulp van het volgende 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"
Notitie
Weergavenamen voor toepassingen zijn niet uniek, dus controleer of u de service-principal van de juiste toepassing ophaalt.
U kunt de object-id ook vinden op basis van de unieke toepassings-id voor uw toepassingsregistratie:
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"
Voeg een app-rol toe aan de toepassing die u in de vorige stap hebt gemaakt. U kunt de rol maken met behulp van Azure Portal of Microsoft Graph. U kunt bijvoorbeeld een app-rol als volgt toevoegen:
{ "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" }
Wijs de app-rol toe aan de beheerde identiteit. U hebt de volgende informatie nodig om de app-rol toe te wijzen:
managedIdentityObjectId
: de object-id van de service-principal van de beheerde identiteit, die u in stap 2 hebt gevonden.serverServicePrincipalObjectId
: de object-id van de service-principal van de servertoepassing, die u in stap 4 hebt gevonden.appRoleId
: de id van de app-rol die wordt weergegeven door de server-app, die u in stap 5 hebt gegenereerd – in het voorbeeld is de app-rol-id00000000-0000-0000-0000-000000000000
.
Voer het volgende script uit om de roltoewijzing toe te voegen. Deze functionaliteit wordt niet rechtstreeks weergegeven in de Azure CLI en dat in plaats daarvan een REST-opdracht wordt gebruikt:
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\"}"