Przypisywanie dostępu tożsamości zarządzanej do roli aplikacji przy użyciu interfejsu wiersza polecenia platformy Azure

Tożsamości zarządzane dla zasobów platformy Azure zapewniają usługom platformy Azure tożsamość w identyfikatorze Entra firmy Microsoft. Działają one bez konieczności wprowadzania poświadczeń w kodzie. Usługi platformy Azure używają tej tożsamości do uwierzytelniania w usługach obsługujących uwierzytelnianie firmy Microsoft Entra. Role aplikacji zapewniają formę kontroli dostępu opartej na rolach i umożliwiają usłudze implementowanie reguł autoryzacji.

Uwaga

Tokeny odbierane przez aplikację są buforowane przez podstawową infrastrukturę, co oznacza, że wszelkie zmiany ról tożsamości zarządzanej mogą zająć dużo czasu. Aby uzyskać więcej informacji, zobacz Ograniczenie używania tożsamości zarządzanych do autoryzacji.

Z tego artykułu dowiesz się, jak przypisać tożsamość zarządzaną do roli aplikacji uwidocznionej przez inną aplikację przy użyciu interfejsu wiersza polecenia platformy Azure.

Wymagania wstępne

  • Jeśli nie znasz tożsamości zarządzanych dla zasobów platformy Azure, zapoznaj się z sekcją Przegląd. Pamiętaj, aby zapoznać się z różnicą między tożsamością zarządzaną przypisaną przez system i przypisaną przez użytkownika.

Przypisywanie dostępu tożsamości zarządzanej do roli aplikacji innej aplikacji

  1. Włączanie tożsamości zarządzanej w zasobie platformy Azure, takim jak maszyna wirtualna platformy Azure.

  2. Znajdź identyfikator obiektu jednostki usługi tożsamości zarządzanej.

    W przypadku tożsamości zarządzanej przypisanej przez system identyfikator obiektu można znaleźć w witrynie Azure Portal na stronie Tożsamość zasobu. Możesz również użyć następującego skryptu, aby znaleźć identyfikator obiektu. Potrzebny będzie identyfikator zasobu utworzonego w kroku 1, który jest dostępny w witrynie Azure Portal na stronie Właściwości zasobu.

    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"
    

    W przypadku tożsamości zarządzanej przypisanej przez użytkownika identyfikator obiektu tożsamości zarządzanej można znaleźć w witrynie Azure Portal na stronie Przegląd zasobu. Możesz również użyć następującego skryptu, aby znaleźć identyfikator obiektu. Potrzebny będzie identyfikator zasobu tożsamości zarządzanej przypisanej przez użytkownika.

    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. Utwórz nową rejestrację aplikacji, aby reprezentować usługę, do których będzie wysyłana tożsamość zarządzana. Jeśli interfejs API lub usługa, która uwidacznia przyznanie roli aplikacji tożsamości zarządzanej, ma już jednostkę usługi w dzierżawie firmy Microsoft Entra, pomiń ten krok.

  4. Znajdź identyfikator obiektu jednostki usługi aplikacji usługi. Można to znaleźć w witrynie Azure Portal. Przejdź do pozycji Microsoft Entra ID i otwórz stronę Aplikacje dla przedsiębiorstw, a następnie znajdź aplikację i poszukaj identyfikatora obiektu. Identyfikator obiektu jednostki usługi można również znaleźć według jego nazwy wyświetlanej przy użyciu następującego skryptu:

    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"
    

    Uwaga

    Nazwy wyświetlane aplikacji nie są unikatowe, dlatego należy sprawdzić, czy uzyskasz prawidłową jednostkę usługi aplikacji.

    Alternatywnie możesz znaleźć identyfikator obiektu według unikatowego identyfikatora aplikacji na potrzeby rejestracji aplikacji:

    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. Dodaj rolę aplikacji do aplikacji utworzonej w kroku 3. Rolę można utworzyć przy użyciu witryny Azure Portal lub programu Microsoft Graph. Możesz na przykład dodać rolę aplikacji w następujący sposób:

    {
        "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"
    }
    
  6. Przypisz rolę aplikacji do tożsamości zarządzanej. Do przypisania roli aplikacji potrzebne będą następujące informacje:

    • managedIdentityObjectId: identyfikator obiektu jednostki usługi tożsamości zarządzanej, który został znaleziony w kroku 2.
    • serverServicePrincipalObjectId: identyfikator obiektu jednostki usługi aplikacji serwera, który został znaleziony w kroku 4.
    • appRoleId: identyfikator roli aplikacji uwidocznionej przez aplikację serwera wygenerowaną w kroku 5 — w przykładzie identyfikator roli aplikacji to 00000000-0000-0000-0000-000000000000.

    Wykonaj następujący skrypt, aby dodać przypisanie roli. Należy pamiętać, że ta funkcja nie jest bezpośrednio widoczna w interfejsie wiersza polecenia platformy Azure i że w tym miejscu jest używane polecenie REST:

    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\"}"
    

Następne kroki