Jak używać tożsamości zarządzanych dla usług App Service i Azure Functions

W tym artykule pokazano, jak utworzyć tożsamość zarządzaną dla aplikacji usługi App Service i usługi Azure Functions oraz jak używać jej do uzyskiwania dostępu do innych zasobów.

Ważne

Ponieważ tożsamości zarządzane nie obsługują scenariuszy obejmujących wiele katalogów, nie będą zachowywać się zgodnie z oczekiwaniami, jeśli aplikacja zostanie zmigrowana między subskrypcjami lub dzierżawami. Aby ponownie utworzyć tożsamości zarządzane po takim przeniesieniu, zobacz Czy tożsamości zarządzane zostaną utworzone automatycznie, jeśli przeniesiem subskrypcję do innego katalogu?. Zasoby podrzędne muszą również mieć zaktualizowane zasady dostępu, aby korzystać z nowej tożsamości.

Uwaga

Tożsamości zarządzane nie są dostępne dla aplikacji wdrożonych w usłudze Azure Arc.

Tożsamość zarządzana firmy Microsoft Entra ID umożliwia aplikacji łatwy dostęp do innych chronionych zasobów firmy Microsoft, takich jak Azure Key Vault. Tożsamość jest zarządzana przez platformę Azure i nie wymaga aprowizacji ani rotacji żadnych wpisów tajnych. Aby uzyskać więcej informacji na temat tożsamości zarządzanych w usłudze Microsoft Entra ID, zobacz Tożsamości zarządzane dla zasobów platformy Azure.

Aplikacja może mieć korzystać z dwóch typów tożsamości:

  • Tożsamość przypisana przez system jest powiązana z aplikacją i jest usuwana, gdy aplikacja zostanie usunięta. Aplikacja może mieć tylko jedną tożsamość przypisaną przez system.
  • Tożsamość przypisana przez użytkownika to autonomiczny zasób platformy Azure, który można przypisać do aplikacji. Aplikacja może mieć wiele tożsamości przypisanych przez użytkownika.

Konfiguracja tożsamości zarządzanej jest specyficzna dla miejsca. Aby skonfigurować tożsamość zarządzaną dla miejsca wdrożenia w portalu, przejdź najpierw do miejsca. Aby znaleźć tożsamość zarządzaną aplikacji internetowej lub miejsca wdrożenia w dzierżawie usługi Microsoft Entra w witrynie Azure Portal, wyszukaj ją bezpośrednio na stronie Przegląd dzierżawy. Zazwyczaj nazwa miejsca jest podobna do <app-name>/slots/<slot-name>.

W tym filmie wideo pokazano, jak używać tożsamości zarządzanych dla usługi App Service.

Kroki opisane w filmie wideo zostały również opisane w poniższych sekcjach.

Dodawanie tożsamości przypisanej przez system

  1. W lewym obszarze nawigacji strony aplikacji przewiń w dół do grupy Ustawienia.

  2. Wybierz pozycję Tożsamość.

  3. Na karcie Przypisane przez system przełącz pozycję Stan na Włączone. Kliknij przycisk Zapisz.

    Screenshot that shows where to switch Status to On and then select Save.

Dodawanie tożsamości przypisanej przez użytkownika

Utworzenie aplikacji z tożsamością przypisaną przez użytkownika wymaga utworzenia tożsamości, a następnie dodania jej identyfikatora zasobu do konfiguracji aplikacji.

Najpierw należy utworzyć zasób tożsamości przypisanej przez użytkownika.

  1. Utwórz zasób tożsamości zarządzanej przypisanej przez użytkownika zgodnie z tymi instrukcjami.

  2. Na lewej stronie nawigacji aplikacji przewiń w dół do grupy Ustawienia.

  3. Wybierz pozycję Tożsamość.

  4. Wybierz pozycję Dodaj przypisane przez> użytkownika.

  5. Wyszukaj utworzoną wcześniej tożsamość, wybierz ją i wybierz pozycję Dodaj.

    Managed identity in App Service

    Po wybraniu pozycji Dodaj aplikacja zostanie ponownie uruchomiona.

Konfigurowanie zasobu docelowego

Może być konieczne skonfigurowanie zasobu docelowego, aby zezwolić na dostęp z aplikacji lub funkcji. Jeśli na przykład zażądasz tokenu dostępu do usługi Key Vault, musisz również dodać zasady dostępu, które obejmują tożsamość zarządzaną aplikacji lub funkcji. W przeciwnym razie wywołania usługi Key Vault zostaną odrzucone, nawet jeśli używasz prawidłowego tokenu. To samo dotyczy usługi Azure SQL Database. Aby dowiedzieć się więcej o zasobach obsługujących tokeny firmy Microsoft Entra, zobacz Usługi platformy Azure, które obsługują uwierzytelnianie Firmy Microsoft Entra.

Ważne

Usługi zaplecza dla tożsamości zarządzanych utrzymują pamięć podręczną na identyfikator URI zasobu przez około 24 godziny. Jeśli zaktualizujesz zasady dostępu określonego zasobu docelowego i natychmiast pobierzesz token dla tego zasobu, możesz nadal uzyskać buforowany token z nieaktualnymi uprawnieniami do momentu wygaśnięcia tego tokenu. Obecnie nie ma możliwości wymuszenia odświeżania tokenu.

Połączenie do usług platformy Azure w kodzie aplikacji

Dzięki tożsamości zarządzanej aplikacja może uzyskiwać tokeny dla zasobów platformy Azure chronionych przez identyfikator entra firmy Microsoft, takich jak Azure SQL Database, Azure Key Vault i Azure Storage. Te tokeny reprezentują aplikację, która uzyskuje dostęp do zasobu, a nie żadnego konkretnego użytkownika aplikacji.

Usługa App Service i usługa Azure Functions udostępniają wewnętrznie dostępny punkt końcowy REST na potrzeby pobierania tokenów. Dostęp do punktu końcowego REST można uzyskać z poziomu aplikacji przy użyciu standardowego żądania HTTP GET, który można zaimplementować za pomocą ogólnego klienta HTTP w każdym języku. W przypadku platform .NET, JavaScript, Java i Python biblioteka klienta tożsamości platformy Azure zapewnia abstrakcję dla tego punktu końcowego REST i upraszcza środowisko programistyczne. Połączenie do innych usług platformy Azure jest tak proste, jak dodanie obiektu poświadczeń do klienta specyficznego dla usługi.

Nieprzetworzone żądanie HTTP GET wygląda podobnie do następującego przykładu:

GET /MSI/token?resource=https://vault.azure.net&api-version=2019-08-01 HTTP/1.1
Host: localhost:4141
X-IDENTITY-HEADER: 853b9a84-5bfa-4b22-a3f3-0b9a43d9ad8a

Przykładowa odpowiedź może wyglądać następująco:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJ0eXAi…",
    "expires_on": "1586984735",
    "resource": "https://vault.azure.net",
    "token_type": "Bearer",
    "client_id": "5E29463D-71DA-4FE0-8E69-999B57DB23B0"
}

Ta odpowiedź jest taka sama jak odpowiedź na żądanie tokenu dostępu do usługi firmy Microsoft. Aby uzyskać dostęp do usługi Key Vault, należy dodać wartość access_token do połączenia klienta z magazynem.

Aby uzyskać więcej informacji na temat punktu końcowego REST, zobacz Dokumentacja punktu końcowego REST.

Usuwanie tożsamości

Po usunięciu tożsamości przypisanej przez system zostanie ona usunięta z identyfikatora Entra firmy Microsoft. Tożsamości przypisane przez system są również automatycznie usuwane z identyfikatora Entra firmy Microsoft po usunięciu samego zasobu aplikacji.

  1. W lewym obszarze nawigacji strony aplikacji przewiń w dół do grupy Ustawienia.

  2. Wybierz pozycję Tożsamość. Następnie wykonaj kroki na podstawie typu tożsamości:

    • Tożsamość przypisana przez system: na karcie Przypisane przez system przełącz pozycję Stan na Wyłączone. Kliknij przycisk Zapisz.
    • Tożsamość przypisana przez użytkownika: wybierz kartę Przypisane przez użytkownika, zaznacz pole wyboru tożsamości i wybierz pozycję Usuń. Wybierz Tak, aby potwierdzić.

Uwaga

Istnieje również ustawienie aplikacji, które można ustawić, WEBSITE_DISABLE_MSI, co powoduje wyłączenie lokalnej usługi tokenu. Jednak pozostawia tożsamość na miejscu, a narzędzia nadal będą pokazywać tożsamość zarządzaną jako "włączone" lub "włączone". W związku z tym użycie tego ustawienia nie jest zalecane.

Dokumentacja punktu końcowego REST

Aplikacja z tożsamością zarządzaną udostępnia ten punkt końcowy, definiując dwie zmienne środowiskowe:

  • IDENTITY_ENDPOINT — adres URL lokalnej usługi tokenu.
  • IDENTITY_HEADER — nagłówek służący do eliminowania ataków fałszerskich żądań po stronie serwera (SSRF). Wartość jest obracana przez platformę.

IDENTITY_ENDPOINT to lokalny adres URL, z którego aplikacja może żądać tokenów. Aby uzyskać token dla zasobu, utwórz żądanie HTTP GET do tego punktu końcowego, w tym następujące parametry:

Nazwa parametru Za opis
zasób Query Identyfikator URI zasobu Microsoft Entra zasobu, dla którego należy uzyskać token. Może to być jedna z usług platformy Azure, które obsługują uwierzytelnianie Firmy Microsoft Entra lub dowolny inny identyfikator URI zasobu.
api-version Query Wersja interfejsu API tokenu do użycia. Użyj witryny 2019-08-01.
X-IDENTITY-HEADER Nagłówek Wartość zmiennej środowiskowej IDENTITY_HEADER. Ten nagłówek służy do eliminowania ataków fałszerskich żądań po stronie serwera (SSRF).
client_id Query (Opcjonalnie) Identyfikator klienta tożsamości przypisanej przez użytkownika do użycia. Nie można użyć w żądaniu zawierającym principal_idelement , msi_res_idlub object_id. Jeśli wszystkie parametry identyfikatora (client_id, principal_id, object_idi msi_res_id) zostaną pominięte, zostanie użyta tożsamość przypisana przez system.
Principal_id Query (Opcjonalnie) Identyfikator podmiotu zabezpieczeń tożsamości przypisanej przez użytkownika do użycia. object_id jest aliasem, który może zamiast tego być używany. Nie można używać w żądaniu zawierającym client_id, msi_res_id lub object_id. Jeśli wszystkie parametry identyfikatora (client_id, principal_id, object_idi msi_res_id) zostaną pominięte, zostanie użyta tożsamość przypisana przez system.
msi_res_id Query (Opcjonalnie) Identyfikator zasobu platformy Azure tożsamości przypisanej przez użytkownika do użycia. Nie można użyć w żądaniu zawierającym principal_idelement , client_idlub object_id. Jeśli wszystkie parametry identyfikatora (client_id, principal_id, object_idi msi_res_id) zostaną pominięte, zostanie użyta tożsamość przypisana przez system.

Ważne

Jeśli próbujesz uzyskać tokeny dla tożsamości przypisanych przez użytkownika, musisz uwzględnić jedną z opcjonalnych właściwości. W przeciwnym razie usługa tokenu podejmie próbę uzyskania tokenu dla tożsamości przypisanej przez system, co może lub nie istnieje.

Następne kroki