Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Hanterade identiteter för Azure-resurser tillhandahåller Azure-tjänster med en identitet i Microsoft Entra-ID. De fungerar utan att behöva autentiseringsuppgifter i koden. Azure-tjänster använder den här identiteten för att autentisera till tjänster som stöder Microsoft Entra-autentisering. Programroller ger en form av rollbaserad åtkomstkontroll och tillåter att en tjänst implementerar auktoriseringsregler.
Anteckning
De token som ditt program tar emot cachelagras av den underliggande infrastrukturen. Det innebär att alla ändringar i den hanterade identitetens roller kan ta mycket tid att bearbeta. Mer information finns i Begränsning av att använda hanterade identiteter för auktorisering.
I den här artikeln får du lära dig hur du tilldelar en hanterad identitet till en programroll som exponeras av ett annat program med hjälp av Microsoft Graph PowerShell SDK eller Azure CLI.
Förutsättningar
- Om du inte känner till hanterade identiteter för Azure-resurser kan du läsa Översikt över hanterad identitet för Azure-resurser.
- Granska skillnaden mellan en systemtilldelad och användartilldelad hanterad identitet.
- Om du inte redan har ett Azure-konto registrerar du dig för ett kostnadsfritt konto innan du fortsätter.
Tilldela en hanterad identitet åtkomst till en approll i en annan applikation med hjälp av PowerShell
Om du vill köra exempelskripten har du två alternativ:
- Använd Azure Cloud Shell, som du kan öppna med hjälp av knappen Prova i det övre högra hörnet av kodblock.
- Kör skript lokalt genom att installera den senaste versionen av Microsoft Graph PowerShell SDK.
Aktivera hanterad identitet på en Azure-resurs, till exempel en virtuell Azure-dator.
Hitta objekt-ID:t för den hanterade identitetens tjänsthuvudnamn.
För en systemtilldelad hanterad identitet hittar du objekt-ID:t på Azure Portal på resursens identitetssida. Du kan också använda följande PowerShell-skript för att hitta objekt-ID:t. Du behöver resurs-ID:t för resursen som du skapade i steg 1, som finns i Azure Portal på resursens egenskapssida.
$resourceIdWithManagedIdentity = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.Compute/virtualMachines/{my virtual machine name}' (Get-AzResource -ResourceId $resourceIdWithManagedIdentity).Identity.PrincipalId
För en användartilldelad hanterad identitet hittar du den hanterade identitetens objekt-ID på Azure Portal på resursens översiktssida. Du kan också använda följande PowerShell-skript för att hitta objekt-ID:t. Du behöver ett resurs-ID för den användartilldelade hanterade identiteten.
$userManagedIdentityResourceId = '/subscriptions/{my subscription ID}/resourceGroups/{my resource group name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{my managed identity name}' (Get-AzResource -ResourceId $userManagedIdentityResourceId).Properties.PrincipalId
Skapa en ny programregistrering att representera den tjänst som du vill att din hanterade identitet ska skicka en begäran till.
- Om den API eller den tjänst som exponerar apptilldelningen till den hanterade identiteten redan har ett huvudnamn för tjänsten i din Microsoft Entra-klientorganisation, hoppar du över det här steget. Om du till exempel vill bevilja den hanterade identiteten åtkomst till Microsoft Graph-API:et.
Hitta objekt-ID:t för service-applikationens tjänstehuvud. Du kan hitta detta i administrationscentret Microsoft Entra.
- Logga in på administrationscentret för Microsoft Entra. På det vänstra navigeringsbladet väljer du Identityoch Programoch väljer sedan Företagsprogram. Leta sedan upp applikationen och leta efter Objekt-ID.
- Du kan också hitta tjänstens huvudnamns objekt-ID med dess visningsnamn med hjälp av följande PowerShell-skript:
$serverServicePrincipalObjectId = (Get-MgServicePrincipal -Filter "DisplayName eq '$applicationName'").Id
Kommentar
Visningsnamn för program är inte unika, så du bör kontrollera att du har rätt programtjänsthuvudnamn.
Lägg till en applikationsroll i applikationen som du skapade i föregående steg. Du kan sedan skapa rollen med hjälp av Azure Portal eller med hjälp av Microsoft Graph.
- Du kan till exempel lägga till en approll genom att köra följande fråga i Graph Explorer:
PATCH /applications/{id}/ { "appRoles": [ { "allowedMemberTypes": [ "User", "Application" ], "description": "Read reports", "id": "00001111-aaaa-2222-bbbb-3333cccc4444", "displayName": "Report reader", "isEnabled": true, "value": "report.read" } ] }
Tilldela approllen till den hanterade identiteten. Du behöver följande information för att tilldela approllen:
-
managedIdentityObjectId
: objekt-ID för den hanterade identitetens tjänsthuvud, som du hittade i föregående steg. -
serverServicePrincipalObjectId
: objekt-ID för serverprogrammets tjänsthuvudnamn, som du hittade i steg 4. -
appRoleId
: id:t för den approll som serverappen exponerar och som du genererade i steg 5 – i exemplet är approllens id00000000-0000-0000-0000-000000000000
.
- Kör följande PowerShell-kommando för att lägga till rolltilldelningen:
New-MgServicePrincipalAppRoleAssignment ` -ServicePrincipalId $serverServicePrincipalObjectId ` -PrincipalId $managedIdentityObjectId ` -ResourceId $serverServicePrincipalObjectId ` -AppRoleId $appRoleId
-
Fullständigt exempelskript
Det här exempelskriptet visar hur du tilldelar en Azure-webbapps hanterade identitet till en approll.
# 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
Tilldela en hanterad identitet åtkomst till en applikationsroll i ett annat program genom att använda CLI
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda tillägg med Azure CLI.
Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
Aktivera hanterad identitet på en Azure-resurs, till exempel virtuella Azure-datorer.
Leta upp objekt-ID:t för den hanterade identitetens tjänsthuvudman.
- För en systemtilldelad hanterad identitet hittar du objekt-ID:t på Azure Portal på resursens identitetssida.
- Du kan också använda följande skript för att hitta objekt-ID:t. Du behöver resurs-ID:t för resursen som du skapade i föregående steg, som finns i Azure Portal på resursens egenskapssida.
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"
- För en användartilldelad hanterad identitet hittar du den hanterade identitetens objekt-ID på Azure Portal på resursens översiktssida. Du kan också använda följande skript för att hitta objekt-ID:t. Du behöver resurs-ID:t för den användartilldelade hanterade identiteten.
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"
Skapa en ny programregistrering för att representera den tjänst som din hanterade identitet skickar en begäran till.
- Om det API eller den tjänst som exponerar approllen som beviljas till den hanterade identiteten redan har ett huvudnamn för tjänsten i din Microsoft Entra-klientorganisation hoppar du över det här steget.
Hitta objekt-ID:t för tjänstprogrammets servicehuvud. Du hittar detta med hjälp av administrationscentret för Microsoft Entra.
- Logga in på Microsoft Entras administrationscenter . På det vänstra navigeringsbladet väljer du Identityoch Programoch väljer sedan Företagsprogram. Leta sedan upp programmet och leta efter Object ID.
- Du kan också hitta tjänsthuvudmannens objekt-ID genom dess visningsnamn med hjälp av följande skript:
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"
Kommentar
Visningsnamn för program är inte unika, så du bör kontrollera att du har rätt programtjänsthuvudnamn.
Eller så hittar du objekt-ID:t med det unika program-ID:t för din programregistrering:
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"
Lägg till en applikationsroll i programmet som du skapade i föregående steg. Du kan skapa rollen med hjälp av Azure Portal eller med hjälp av Microsoft Graph. Du kan till exempel lägga till en applikationsroll på följande sätt:
{ "allowedMemberTypes": [ "Application" ], "displayName": "Read data from MyApi", "id": "00001111-aaaa-2222-bbbb-3333cccc4444", "isEnabled": true, "description": "Allow the application to read data as itself.", "value": "MyApi.Read.All" }
Tilldela approllen till den hanterade identiteten. Du behöver följande information för att tilldela approllen:
-
managedIdentityObjectId
: objekt-ID för den hanterade identitetens tjänsthuvudnamn, som du hittade i steg 2. -
serverServicePrincipalObjectId
: objekt-ID för serverprogrammets tjänsthuvudnamn, som du hittade i steg 4. -
appRoleId
: ID för approllen som exponeras av serverappen, som du genererade i steg 5 – i exemplet är approllens ID00000000-0000-0000-0000-000000000000
.
-
Kör följande skript för att lägga till rolltilldelningen. Den här funktionen exponeras inte direkt i Azure CLI och att ett REST-kommando används här i stället:
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\"}"
Nästa steg
- Översikt över hanterad identitet för Azure-resurser
- Information om hur du aktiverar hanterad identitet på en virtuell Azure-dator finns i Konfigurera hanterade identiteter för Azure-resurser på en virtuell Azure-dator.