Dela via


Tilldela en programroll till en hanterad identitet med hjälp av Azure CLI.

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.

Anmärkning

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

Tilldela en hanterad identitet åtkomst till en applikationsroll i ett annat program genom att använda CLI

  1. Aktivera hanterad identitet på en Azure-resurs, till exempel virtuella Azure-datorer.

  2. Hitta objekt-ID:t för den hanterade identitetens tjänsthuvudnamn.

    • För en systemtilldelad hanterad identitet hittar du objekt-ID:t på Azure-portalen 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-portalen på resursens översiktssida . Du kan också använda följande 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}"
      
      oidForMI=$(az resource show --id $userManagedIdentityResourceId --query "properties.principalId" -o tsv | tr -d '[:space:]')
      echo "object id for managed identity is: $oidForMI"
      
  3. Skapa en ny programregistrering som representerar den tjänst som din hanterade identitet skickar 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.
  4. Hitta objekt-ID:t för service-applikationens tjänstehuvud. Du hittar detta med hjälp av administrationscentret för Microsoft Entra.

    1. Logga in på administrationscentret för Microsoft Entra.

    2. På det vänstra navigeringsbladet väljer du Entra ID>Enterprise-appar. Leta sedan upp programmet och leta efter objekt-ID:t.

    3. 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"
      

      Anmärkning

      Visningsnamn för program är inte unika, så du bör kontrollera att du har rätt programtjänsthuvudnamn.

    4. 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"
      
  5. 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"
    }
    
  6. 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:t för den approll som serverappen exponerar och som du genererade i steg 5 – i exemplet är approllens id 00000000-0000-0000-0000-000000000000.
  7. 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