Udostępnij przez


Uwierzytelnianie aplikacji języka Go hostowanych na platformie Azure w zasobach 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 sekcjach z wyprzedzeniem 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 uwierzytelniać się przy użyciu tożsamości zarządzanej 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 lub innych wpisów tajnych 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:

  • Tożsamości zarządzane przypisane przez system są włączone bezpośrednio w zasobie platformy Azure i są powiązane z cyklem życia. Po usunięciu zasobu 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 przypisane przez użytkownika są tworzone jako autonomiczne zasoby platformy Azure i zapewniają większą elastyczność i możliwoś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 zarządzania nimi w artykule Zalecenia dotyczące najlepszych rozwiązań dotyczących tożsamości zarządzanej i zarządzania nimi.

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 chcesz użyć tożsamości zarządzanej przypisanej przez system, odwiedź artykuł Tożsamości zarządzane przypisane 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 witrynie Azure Portal 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ądzane wybierz pozycję + Utwórz.

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

  3. Na stronie Tworzenie tożsamości zarządzanej przypisanej 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 pozycję Przejrzyj i utwórz , aby przejrzeć i zweryfikować dane wejściowe.

    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 do użycia później podczas konfigurowania 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 zastosowane za pomocą ról tożsamości.

  1. W witrynie Azure Portal przejdź do zasobu, który hostuje kod aplikacji, taki jak usługa Azure App Service lub wystąpienie aplikacji kontenera platformy Azure.

  2. Na stronie Przegląd zasobu rozwiń węzeł Ustawienia i wybierz pozycję Tożsamość w obszarze nawigacji.

  3. Na stronie Tożsamość przejdź do karty Przypisane przez użytkownika.

  4. Wybierz pozycję + Dodaj , aby otworzyć panel Dodawanie tożsamości zarządzanej przypisanej przez użytkownika .

  5. Na panelu Dodawanie tożsamości zarządzanej przypisanej przez użytkownika użyj listy rozwijanej Subskrypcja , aby filtrować wyniki wyszukiwania tożsamości. Użyj pola wyszukiwania Tożsamości zarządzane przypisane przez użytkownika , aby zlokalizować tożsamość zarządzaną przypisaną przez użytkownika włączoną dla zasobu platformy Azure hostowanego 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 zarządzanej 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 (Zarządzanie dostępem i tożsamościami) w obszarze nawigacji po lewej stronie.

  3. Na stronie Kontrola dostępu (zarządzanie dostępem i tożsamościami) wybierz pozycję + Dodaj w górnym menu, a następnie wybierz pozycję Dodaj przypisanie roli , aby przejść do strony Dodawanie przypisania roli .

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

  4. Na stronie Dodawanie przypisania roli przedstawiono przepływ pracy z kartami, wieloetapowy 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ć do tożsamości.

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

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

  7. Dla opcji Członkowie wybierz pozycję + Wybierz członków , aby otworzyć panel Wybieranie tożsamości zarządzanych .

  8. Na panelu Wybieranie tożsamości zarządzanych użyj list rozwijanych Subskrypcja i Tożsamość zarządzana , aby filtrować wyniki wyszukiwania tożsamości. Użyj pola wyszukiwania Wybierz , aby zlokalizować tożsamość zarządzaną przypisaną przez użytkownika włączoną dla zasobu platformy Azure hostowania aplikacji.

    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 pozycję Przejrzyj i przypisz w dolnej części strony.

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

Uwierzytelnianie w usługach platformy Azure z aplikacji

Moduł azidentity udostępnia różne poświadczenia — implementacje dostosowane do obsługi różnych scenariuszy i algorytmów uwierzytelniania Microsoft Entra. Ponieważ tożsamość zarządzana jest niedostępna w przypadku uruchamiania lokalnego, kroki z wyprzedzeniem pokazują, które poświadczenia mają być używane w którym scenariuszu:

  • Lokalne środowisko deweloperskie: wyłącznie podczas lokalnego tworzenia użyj DefaultAzureCredential dla opiniowanego, wstępnie skonfigurowanego łańcucha poświadczeń. DefaultAzureCredential odnajduje poświadczenia użytkownika z lokalnych narzędzi programistycznych, takich jak interfejs wiersza polecenia platformy Azure. Zapewnia również elastyczność i wygodę ponawiania prób, czas oczekiwania na odpowiedzi i obsługę wielu opcji uwierzytelniania. Aby dowiedzieć się więcej, odwiedź artykuł Uwierzytelnianie w usługach platformy Azure podczas lokalnego programowania .
  • Aplikacje hostowane na platformie Azure: gdy aplikacja jest uruchomiona na platformie Azure, użyj funkcji ManagedIdentityCredential , aby bezpiecznie odnaleźć tożsamość zarządzaną skonfigurowaną dla aplikacji. Określenie tego dokładnego typu poświadczeń uniemożliwia nieoczekiwane pobieranie innych dostępnych poświadczeń.

Implementowanie kodu

Dodaj moduł azidentity .

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

go get github.com/Azure/azure-sdk-for-go/sdk/azidentity

Dostęp do usług platformy Azure jest uzyskiwany przy użyciu wyspecjalizowanych klientów z różnych bibliotek klienckich zestawu Azure SDK. W przypadku dowolnego kodu napisanego w języku Go, który tworzy wystąpienie klienta Azure SDK w Twojej aplikacji, musisz:

  1. Zaimportuj pakiet azidentity.
  2. Utwórz wystąpienie typu DefaultAzureCredential.
  3. Przekaż wystąpienie typu DefaultAzureCredential do konstruktora klienta zestawu Azure SDK.
  4. Ustaw zmienną środowiskową AZURE_CLIENT_ID na identyfikator klienta tożsamości przypisanej użytkownikowi.
  5. Ustaw zmienną środowiskową AZURE_TOKEN_CREDENTIALS do wartości ManagedIdentityCredential, aby upewnić się, że DefaultAzureCredential używa tylko poświadczeń zarządzanej tożsamości. Dzięki temu uwierzytelnianie jest bardziej przewidywalne i łatwiejsze do debugowania podczas wdrażania na platformie Azure. Aby uzyskać więcej informacji, zobacz Use a specific credential (Używanie określonego poświadczenia).

Przykład tych kroków przedstawiono w segmencie kodu z klientem Azure Blob Storage.

import (
	"context"

	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

const (
	account       = "https://<replace_with_your_storage_account_name>.blob.core.windows.net/"
	containerName = "sample-container"
	blobName      = "sample-blob"
	sampleFile    = "path/to/sample/file"
)

func main() {
	// create a credential
	cred, err := azidentity.NewDefaultAzureCredential(nil)
	if err != nil {
		// TODO: handle error
	}

	// create a client for the specified storage account
	client, err := azblob.NewClient(account, cred, nil)
	if err != nil {
		// TODO: handle error
	}

	// TODO: perform some action with the azblob Client
	// _, err = client.DownloadFile(context.TODO(), <containerName>, <blobName>, <target_file>, <DownloadFileOptions>)
}

Zgodnie z opisem w artykule Omówienie uwierzytelniania zestawu SDK platformy Azure dla języka Go, DefaultAzureCredential obsługuje wiele metod uwierzytelniania i określa metodę uwierzytelniania używaną w czasie działania programu. Zaletą tego podejścia jest to, że aplikacja może używać różnych metod uwierzytelniania w różnych środowiskach bez implementowania kodu specyficznego dla środowiska. Gdy powyższy kod jest uruchamiany na stacji roboczej w lokalnym środowisku deweloperskim, DefaultAzureCredential używa jednostki usługi aplikacji określonej przez ustawienia środowiska lub poświadczeń narzędzi deweloperskich do uwierzytelniania się z innymi zasobami platformy Azure. W związku z tym ten sam kod może służyć do uwierzytelniania aplikacji w zasobach platformy Azure zarówno podczas programowania lokalnego, jak i podczas wdrażania na platformie Azure.

Ważne

DefaultAzureCredential Upraszcza uwierzytelnianie podczas tworzenia aplikacji wdrażanych na platformie Azure przez połączenie poświadczeń używanych w środowiskach hostingu platformy Azure i poświadczeń używanych w programowania lokalnego. W środowisku produkcyjnym lepiej użyć określonego typu poświadczeń, aby uwierzytelnianie było bardziej przewidywalne i łatwiejsze do debugowania.

Alternatywą dla DefaultAzureCredential jest użycie ManagedIdentityCredential. Kroki używania ManagedIdentityCredential są takie same jak w przypadku używania DefaultAzureCredential typu.

Przykład tych kroków przedstawiono w segmencie kodu z klientem Azure Blob Storage.

import (
	"context"

	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

const (
	// Replace placeholder text with your storage account name
	account       = "https://<replace_with_your_storage_account_name>.blob.core.windows.net/"
	containerName = "sample-container"
	blobName      = "sample-blob"
	sampleFile    = "path/to/sample/file"
)

func main() {
	// create a credential
	clientID := azidentity.ClientID("abcd1234-...")
	opts := azidentity.ManagedIdentityCredentialOptions{ID: clientID}
	cred, err := azidentity.NewManagedIdentityCredential(&opts)
	if err != nil {
		// TODO: handle error
	}
	
	// create a client for the specified storage account
	client, err := azblob.NewClient(account, cred, nil)
	if err != nil {
		// TODO: handle error
	}
	
	// TODO: perform some action with the azblob Client
	// _, err = client.DownloadFile(context.TODO(), <containerName>, <blobName>, <target_file>, <DownloadFileOptions>)
}