Udostępnij za pośrednictwem


Uwierzytelnianie aplikacji platformy .NET hostowanych na platformie Azure do zasobów platformy Azure przy użyciu tożsamości zarządzanej przypisanej przez użytkownika

Zalecaną metodą uwierzytelniania aplikacji hostowanej na platformie Azure w innych zasobach platformy Azure jest użycie tożsamości zarządzanej . Takie podejście jest obsługiwane w przypadku większości usług platformy Azure, w tym aplikacji hostowanych w usługach Azure App Service, Azure Container Apps i Azure Virtual Machines. Dowiedz się więcej o różnych technikach uwierzytelniania i podejściach na stronie przeglądu uwierzytelniania . W nadchodzących sekcjach dowiesz się:

  • Podstawowe pojęcia dotyczące tożsamości zarządzanej
  • Jak utworzyć tożsamość zarządzaną przypisaną przez użytkownika dla aplikacji
  • Jak przypisać role do tożsamości zarządzanej przypisanej przez użytkownika
  • Jak uwierzytelnić się przy użyciu tożsamości przypisanej przez użytkownika z kodu aplikacji

Podstawowe pojęcia dotyczące tożsamości zarządzanej

Tożsamość zarządzana umożliwia aplikacji bezpieczne łączenie się z innymi zasobami platformy Azure bez używania kluczy tajnych oraz innych sekretów aplikacji. Wewnętrznie platforma Azure śledzi tożsamość i zasoby, z którymi może się łączyć. Platforma Azure używa tych informacji do automatycznego uzyskiwania tokenów usługi Microsoft Entra dla aplikacji, aby umożliwić jej łączenie się z innymi zasobami platformy Azure.

Istnieją dwa typy tożsamości zarządzanych, które należy wziąć pod uwagę podczas konfigurowania hostowanej aplikacji:

  • Zarządzane tożsamości przypisane przez system są włączane bezpośrednio na zasobie platformy Azure i powiązane z jego cyklem życia. Gdy zasób zostanie usunięty, platforma Azure automatycznie usunie tożsamość. Tożsamości przypisane przez system zapewniają minimalistyczne podejście do korzystania z tożsamości zarządzanych.
  • Tożsamości zarządzane przez użytkownika są tworzone jako samodzielne zasoby platformy Azure i zapewniają większą elastyczność oraz funkcjonalności. Są one idealne w przypadku rozwiązań obejmujących wiele zasobów platformy Azure, które muszą współdzielić tę samą tożsamość i uprawnienia. Jeśli na przykład wiele maszyn wirtualnych musi uzyskać dostęp do tego samego zestawu zasobów platformy Azure, tożsamość zarządzana przypisana przez użytkownika zapewnia możliwość ponownego obsługi i zoptymalizowane zarządzanie.

Wskazówka

Dowiedz się więcej na temat wybierania tożsamości zarządzanych przypisanych przez system i tożsamości zarządzanych przypisanych przez użytkownika oraz zarządzania nimi w artykule Zalecenia dotyczące najlepszych rozwiązań dotyczących tożsamości zarządzanych.

W poniższych sekcjach opisano kroki włączania i używania tożsamości zarządzanej przypisanej przez użytkownika dla aplikacji hostowanej na platformie Azure. Jeśli potrzebujesz użyć tożsamości zarządzanej przypisanej przez użytkownika, zapoznaj się z artykułem dotyczącym tożsamości zarządzanych przypisanych przez system, aby uzyskać więcej informacji.

Tworzenie tożsamości zarządzanej przypisanej przez użytkownika

Tożsamości zarządzane przypisane przez użytkownika są tworzone jako zasoby autonomiczne w ramach subskrypcji platformy Azure przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure. Polecenia interfejsu wiersza polecenia platformy Azure można uruchamiać w usłudze Azure Cloud Shell lub na stacji roboczej z zainstalowanym interfejsem wiersza polecenia platformy Azure .

  1. W portalu Azure wprowadź Tożsamości zarządzane na głównym pasku wyszukiwania i wybierz pasujący wynik w sekcji Usługi.

  2. Na stronie tożsamości zarządzanych wybierz pozycję + Utwórz.

    Zrzut ekranu przedstawiający stronę do zarządzania tożsamościami przypisanymi przez użytkownika.

  3. Na stronie Utwórz tożsamość zarządzaną przypisaną przez użytkownika wybierz subskrypcję, grupę zasobów i region tożsamości zarządzanej przypisanej przez użytkownika, a następnie podaj nazwę.

  4. Wybierz opcję Przejrzyj i utwórz, aby przejrzeć i zweryfikować wprowadzone dane.

    Zrzut ekranu przedstawiający formularz umożliwiający utworzenie tożsamości zarządzanej przypisanej przez użytkownika.

  5. Wybierz pozycję Utwórz, aby utworzyć tożsamość zarządzaną przypisaną przez użytkownika.

  6. Po utworzeniu tożsamości wybierz pozycję Przejdź do zasobu.

  7. Na stronie Przegląd nowej tożsamości skopiuj wartość Identyfikator klienta, aby później użyć jej przy konfiguracji kodu aplikacji.

Przypisywanie tożsamości zarządzanej do aplikacji

Tożsamość zarządzana przypisana przez użytkownika może być skojarzona z co najmniej jednym zasobem platformy Azure. Wszystkie zasoby korzystające z tej tożsamości uzyskują uprawnienia nadawane im przez role tożsamości.

  1. W portalu Azure przejdź do zasobu, który hostuje kod aplikacji, takiego jak usługa Azure App Service lub instancja Azure Container App.

  2. Na stronie przeglądu zasobu rozwiń Ustawienia i wybierz pozycję Identity z nawigacji.

  3. Na stronie Identity przejdź do zakładki Użytkownik przypisany.

  4. Wybierz , a następnie Dodaj, aby otworzyć panel Dodaj tożsamość zarządzaną przypisaną przez użytkownika .

  5. Na panelu Dodawanie przez użytkownika przypisanej tożsamości zarządzanej użyj listy rozwijanej Subskrypcja, aby filtrować tożsamości w wynikach wyszukiwania. Użyj pola wyszukiwania Tożsamości zarządzane przypisane przez użytkownika, aby zlokalizować przypisaną przez użytkownika tożsamość zarządzaną, którą włączyłeś dla zasobu Azure hostującego twoją aplikację.

  6. Wybierz tożsamość i wybierz pozycję Dodaj w dolnej części panelu, aby kontynuować.

    Zrzut ekranu przedstawiający sposób kojarzenia tożsamości przypisanej przez użytkownika z aplikacją.

Przypisywanie ról do tożsamości zarządzanej

Następnie określ, które role potrzebuje Twoja aplikacja, i przypisz te role do tożsamości zarządzanej. Role można przypisać do tożsamości zarządzanej w następujących zakresach:

  • Zasób: Przypisane role mają zastosowanie tylko do tego konkretnego zasobu.
  • grupa zasobów: przypisane role mają zastosowanie do wszystkich zasobów zawartych w grupie zasobów.
  • Subskrypcja: Przypisane role mają zastosowanie do wszystkich zasobów zawartych w subskrypcji.

W poniższym przykładzie pokazano, jak przypisywać role w zakresie grupy zasobów, ponieważ wiele aplikacji zarządza wszystkimi powiązanymi zasobami platformy Azure przy użyciu jednej grupy zasobów.

  1. Przejdź do strony Przegląd grupy zasobów zawierającej aplikację z tożsamością zarządzaną przypisaną przez użytkownika.

  2. Wybierz pozycję Kontrola dostępu (IAM) w menu po lewej.

  3. Na stronie Kontrola dostępu (IAM) wybierz pozycję + Dodaj w górnym menu, a następnie wybierz pozycję Dodaj przydział roli, aby przejść do strony Dodaj przydział roli.

    Zrzut ekranu przedstawiający sposób uzyskiwania dostępu do strony przypisania roli tożsamości.

  4. Strona Dodawanie przypisania roli prezentuje przepływ pracy z kartami, podzielony na wiele kroków, w celu przypisania ról do tożsamości. Na początkowej karcie Rola użyj pola wyszukiwania u góry, aby zlokalizować rolę, którą chcesz przypisać tożsamości.

  5. Wybierz rolę z wyników, a następnie wybierz pozycję Dalej, aby przejść do karty Członków.

  6. Dla opcji Przypisz dostęp do wybierz pozycję Tożsamość zarządzana.

  7. W przypadku opcji członkowie, wybierz + Wybierz członków, aby otworzyć panel Wybierz tożsamości zarządzane.

  8. Na panelu Wybierz zarządzane tożsamości, użyj list rozwijanych Subskrypcja i Zarządzana tożsamość, aby filtrować wyniki wyszukiwania dla Twoich tożsamości. Użyj pola wyszukiwania Select, aby odnaleźć przypisaną przez użytkownika tożsamość zarządzaną, którą włączyłeś dla zasobu Azure hostującego Twoją aplikację.

    Zrzut ekranu przedstawiający proces przypisywania tożsamości zarządzanej.

  9. Wybierz tożsamość i wybierz pozycję Wybierz w dolnej części panelu, aby kontynuować.

  10. Wybierz Przejrzyj i przypisz na dole strony.

  11. Na ostatniej karcie Przeglądanie i przypisywanie wybierz pozycję Przeglądanie i przypisywanie, aby zakończyć przepływ pracy.

Implementowanie DefaultAzureCredential w aplikacji

DefaultAzureCredential jest opiniowaną, uporządkowaną sekwencją mechanizmów uwierzytelniania w usłudze Microsoft Entra ID. Każdy mechanizm uwierzytelniania jest klasą pochodzącą z klasy TokenCredential i jest nazywany poświadczeniem. W czasie wykonywania DefaultAzureCredential próbuje uwierzytelnić się przy użyciu pierwszego poświadczenia. Jeśli to poświadczenie nie może uzyskać tokenu dostępu, zostanie podjęta próba następnego poświadczenia w sekwencji itd., dopóki token dostępu nie zostanie pomyślnie uzyskany. W ten sposób aplikacja może używać różnych poświadczeń w różnych środowiskach bez konieczności pisania kodu specyficznego dla środowiska.

Aby użyć DefaultAzureCredential, dodaj Azure.Identity i opcjonalnie pakiety Microsoft.Extensions.Azure do aplikacji:

W wybranym terminalu przejdź do katalogu projektu aplikacji i uruchom następujące polecenia:

dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure

Dostęp do usług platformy Azure jest uzyskiwany przy użyciu wyspecjalizowanych klas klientów z różnych bibliotek klienckich zestawu Azure SDK. Te klasy i własne usługi niestandardowe powinny być zarejestrowane, aby można było uzyskać do nich dostęp za pośrednictwem wstrzykiwania zależności w całej aplikacji. W Program.cswykonaj następujące kroki, aby zarejestrować klasę klienta i DefaultAzureCredential:

  1. Uwzględnij przestrzenie nazw Azure.Identity i Microsoft.Extensions.Azure za pomocą dyrektyw using.
  2. Zarejestruj klienta usługi platformy Azure, używając odpowiedniej metody rozszerzenia poprzedzonej prefiksem Add.
  3. Przekaż wystąpienie DefaultAzureCredential do metody UseCredential.

Notatka

W przypadku tożsamości zarządzanej przypisanej przez użytkownika upewnij się, że przypisano wartość clientId tożsamości do właściwości ManagedIdentityClientId obiektu DefaultAzureCredentialOptions. Dzięki temu kod może odnaleźć poprawną tożsamość do użycia na potrzeby uwierzytelniania podczas uruchamiania na platformie Azure.

Na przykład:

using Microsoft.Extensions.Azure;
using Azure.Identity;

builder.Services.AddAzureClients(clientBuilder =>
{
    clientBuilder.AddBlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"));
    clientBuilder.UseCredential(new DefaultAzureCredential(
        new DefaultAzureCredentialOptions()
        {
            ManagedIdentityClientId = "<your-client-id>"
        }));
});

Alternatywą dla UseCredential jest utworzenie instancji DefaultAzureCredential bezpośrednio.

using Azure.Identity;

builder.Services.AddSingleton<BlobServiceClient>(_ =>
    new BlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"),
        new DefaultAzureCredential(new DefaultAzureCredentialOptions()
        {
            ManagedIdentityClientId = "<your-client-id>"
        })));

Po uruchomieniu poprzedniego kodu na lokalnej stacji roboczej dewelopera, DefaultAzureCredential przeszukuje zmienne środowiskowe, aby znaleźć główną rolę usługi aplikacji lub lokalnie zainstalowane narzędzia deweloperskie, takie jak Visual Studio, w poszukiwaniu zestawu poświadczeń dewelopera. Jedną z metod można użyć do uwierzytelniania aplikacji w zasobach platformy Azure podczas programowania lokalnego.

Po wdrożeniu na platformie Azure ten sam kod może również uwierzytelniać aplikację w innych zasobach platformy Azure. DefaultAzureCredential może pobierać ustawienia środowiska i konfiguracje tożsamości zarządzanej w celu automatycznego uwierzytelniania w innych usługach.