Udostępnij za pośrednictwem


Używanie 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 Azure App Service i usługi Azure Functions oraz jak używać jej do uzyskiwania dostępu do innych zasobów.

Tożsamość zarządzana z identyfikatora Entra firmy Microsoft umożliwia aplikacji łatwy dostęp do innych zasobów chronionych przez firmę Microsoft, takich jak Azure Key Vault. Platforma Azure zarządza identyfikacją, więc nie trzeba aprowizować ani wymieniać żadnych sekretów. 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.

Do aplikacji można przyznać dwa typy tożsamości:

  • Tożsamość przypisana przez system jest powiązana z aplikacją i jest usuwana, jeśli 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. Jedną tożsamość przypisaną przez użytkownika można przypisać do wielu zasobów platformy Azure, takich jak dwie aplikacje usługi App Service.

Konfiguracja tożsamości zarządzanej jest specyficzna dla miejsca. Aby skonfigurować tożsamość zarządzaną dla slotu wdrożeniowego w portalu, najpierw przejdź do tego slotu. Aby znaleźć tożsamość zarządzaną dla swojej aplikacji internetowej lub miejsca wdrożenia w dzierżawie Microsoft Entra z portalu Azure, wyszukaj ją bezpośrednio na stronie Przegląd swojej dzierżawy.

Uwaga

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

Ponieważ tożsamości zarządzane nie obsługują scenariuszy obejmujących wiele katalogów, nie zachowują się zgodnie z oczekiwaniami, jeśli aplikacja jest migrowana 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.

Wymagania wstępne

Aby wykonać kroki opisane w tym artykule, musisz mieć minimalny zestaw uprawnień dla zasobów platformy Azure. Określone uprawnienia, których potrzebujesz, różnią się w zależności od scenariusza. Poniższa tabela zawiera podsumowanie najbardziej typowych scenariuszy:

Scenariusz Wymagane uprawnienie Przykładowe role wbudowane
Tworzenie tożsamości przypisanej przez system Microsoft.Web/sites/write nad aplikacją lub Microsoft.Web/sites/slots/write nad miejscem Współautor witryny sieci Web
Tworzenie tożsamości przypisanej przez użytkownika Microsoft.ManagedIdentity/userAssignedIdentities/write za pośrednictwem grupy zasobów, w której ma zostać utworzona tożsamość Współtwórca z zarządzaną tożsamością
Przypisywanie tożsamości przypisanej przez użytkownika do aplikacji Microsoft.Web/sites/write przez aplikację, Microsoft.Web/sites/slots/write przez miejsce lub
Microsoft.ManagedIdentity/userAssignedIdentities/*/assign/action nad tożsamością
Współtwórca witryny internetowej i Operator Tożsamości Zarządzanej
Tworzenie przydziałów ról platformy Azure Microsoft.Authorization/roleAssignments/write nad docelowym zakresem zasobów Administrator kontroli dostępu opartej na rolach lub administrator dostępu użytkowników

Dodawanie tożsamości przypisanej przez system

Aby włączyć tożsamość zarządzaną przypisaną przez system, wykonaj poniższe instrukcje.

  1. W witrynie Azure Portal przejdź do strony aplikacji.

  2. W menu po lewej stronie wybierz Ustawienia>Tożsamość.

  3. Na karcie Przypisane przez system przełącz Stan na Włącz. Następnie wybierz opcję Zapisz.

Dodawanie tożsamości przypisanej przez użytkownika

Aby utworzyć aplikację z tożsamością przypisaną przez użytkownika, utwórz tożsamość, a następnie dodaj jej identyfikator zasobu do konfiguracji aplikacji.

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

  2. W menu po lewej stronie strony aplikacji wybierz Ustawienia>Tożsamość.

  3. Wybierz pozycję Przypisany użytkownik, a następnie wybierz pozycję Dodaj.

  4. Wyszukaj utworzoną wcześniej tożsamość, wybierz ją, a następnie wybierz pozycję Dodaj.

Po wykonaniu tych kroków aplikacja zostanie ponownie uruchomiona.

Konfigurowanie zasobu docelowego

Musisz skonfigurować zasób docelowy, aby zezwolić na dostęp z Twojej aplikacji. W przypadku większości usług platformy Azure należy skonfigurować zasób docelowy, tworząc przypisanie roli.

Niektóre usługi używają mechanizmów innych niż kontrola dostępu oparta na rolach platformy Azure. Aby dowiedzieć się, jak skonfigurować dostęp przy użyciu tożsamości, zapoznaj się z dokumentacją dla każdego zasobu docelowego. 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.

Jeśli na przykład zażądasz tokenu dostępu do wpisu tajnego w usłudze Azure Key Vault, musisz również utworzyć przypisanie roli, które umożliwia tożsamości zarządzanej pracę z wpisami tajnymi w magazynie docelowym. W przeciwnym razie usługa Key Vault odrzuca wywołania, nawet jeśli używasz prawidłowego tokenu. To samo dotyczy usługi Azure SQL Database i innych usług.

Ważne

Usługi backendu dla zarządzanych tożsamości utrzymują cache dla adresu URI zasobu przez około 24 godziny. Wprowadzenie zmian w członkostwie grupy lub roli tożsamości zarządzanej może zająć kilka godzin, zanim zaczną obowiązywać. Obecnie nie można wymusić odświeżenia tokenu tożsamości zarządzanej przed jego wygaśnięciem. Jeśli zmienisz grupę lub członkostwo w roli tożsamości zarządzanej w celu dodania lub usunięcia uprawnień, może być konieczne odczekanie kilku godzin, aby zasób platformy Azure korzystający z tej tożsamości uzyskał prawidłowy dostęp.

Aby uzyskać alternatywy dla grup lub członkostwa w rolach, zobacz Ograniczenie używania tożsamości zarządzanych do autoryzacji.

Nawiązywanie połączenia z usługami platformy Azure w kodzie aplikacji

Dzięki tożsamości zarządzanej aplikacja może uzyskiwać tokeny dla zasobów platformy Azure, które pomaga chronić 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 . Żądanie 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. Nawiązywanie połączenia z innymi usługami platformy Azure jest tak proste, jak dodawanie obiektu poświadczeń do klienta specyficznego dla usługi.

Nieprzetworzone żądanie HTTP GET używa dwóch podanych zmiennych środowiskowych i wygląda jak w poniższym przykładzie:

GET /MSI/token?resource=https://vault.azure.net&api-version=2019-08-01 HTTP/1.1
Host: <ip-address-:-port-in-IDENTITY_ENDPOINT>
X-IDENTITY-HEADER: <value-of-IDENTITY_HEADER>

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": "00001111-aaaa-2222-bbbb-3333cccc4444"
}

Ta odpowiedź jest taka sama jak odpowiedź na żądanie tokenu dostępu serwisu-do-serwisu dla usługi Microsoft Entra. Aby uzyskać dostęp do usługi Key Vault, dodaj wartość access_token do połączenia klienta z Key Vault.

Aby uzyskać więcej informacji na temat punktu końcowego REST, zobacz dokumentację punktu końcowego REST w dalszej części tego artykułu.

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 menu po lewej stronie strony aplikacji wybierz Ustawienia>Tożsamość.

  2. Wykonaj kroki na podstawie typu tożsamości:

    • W przypadku tożsamości przypisanej przez system: na karcie Przypisane przez system przełącz pozycję Stan na Wyłączone. Następnie wybierz opcję Zapisz.
    • W przypadku tożsamości przypisanej przez użytkownika: wybierz kartę Użytkownik, zaznacz pole wyboru tożsamości, a następnie wybierz pozycję Usuń. Wybierz Tak, aby potwierdzić.

Uwaga

Można również ustawić ustawienie aplikacji, które wyłącza tylko lokalną usługę tokenu: WEBSITE_DISABLE_MSI. Jednak to pozostawia tożsamość nienaruszoną. Narzędzia nadal pokazują, że tożsamość zarządzana jest włączona lub aktywna. W związku z tym nie zalecamy używania tego ustawienia.

Referencja 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, który może pomóc w ograniczeniu ataków fałszerskich żądań po stronie serwera (SSRF). Platforma zmienia wartość.

Zmienna 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. Uwzględnij następujące parametry:

Nazwa parametru W Opis
resource Zapytanie Identyfikator URI zasobu Microsoft Entra, dla którego należy uzyskać token. Ten zasób może być jedną z usług Azure obsługujących uwierzytelnianie Microsoft Entra lub dowolnym innym zasobem URI.
api-version Zapytanie Wersja API tokenu, która ma być używana. Użyj 2019-08-01.
X-IDENTITY-HEADER Nagłówek Wartość zmiennej środowiskowej IDENTITY_HEADER . Ten nagłówek służy do łagodzenia ataków SSRF.
client_id Zapytanie (Opcjonalnie) Identyfikator klienta tożsamości przypisanej przez użytkownika, który ma być użyty. Nie można go użyć na żądanie, które zawiera principal_id, mi_res_idlub object_id. Jeśli wszystkie parametry identyfikatora (client_id, principal_id, object_idi mi_res_id) zostaną pominięte, zostanie użyta tożsamość przypisana przez system.
principal_id Zapytanie (Opcjonalnie) Główny identyfikator tożsamości przypisanej użytkownikowi do użycia. Parametr object_id jest aliasem, którego można użyć zamiast tego. Nie można go użyć na żądanie, które zawiera client_id, mi_res_idlub object_id. Jeśli wszystkie parametry identyfikatora (client_id, principal_id, object_idi mi_res_id) zostaną pominięte, zostanie użyta tożsamość przypisana przez system.
mi_res_id Zapytanie (Opcjonalnie) Identyfikator zasobu Azure dla tożsamości przypisanej przez użytkownika, która ma być używana. Nie można go użyć na żądanie, które zawiera principal_id, client_idlub object_id. Jeśli wszystkie parametry identyfikatora (client_id, principal_id, object_idi mi_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, dołącz jedną z opcjonalnych właściwości. W przeciwnym razie usługa tokenu próbuje uzyskać token dla tożsamości przypisanej przez system, która może istnieć lub nie.

Rozważ następujące przewodniki: