Uwierzytelnianie platformy Azure za pomocą modułu Azure Identity dla języka Go

W tym samouczku typ DefaultAzureCredential z modułu Azure Identity for Go jest używany do uwierzytelniania na platformie Azure. Moduł Azure Identity oferuje kilka typów poświadczeń, które koncentrują się na uwierzytelnieniu OAuth przy użyciu identyfikatora Entra firmy Microsoft.

DefaultAzureCredential Upraszcza uwierzytelnianie, łącząc powszechnie używane typy poświadczeń. Tworzy łańcuchy typów poświadczeń używanych do uwierzytelniania aplikacji wdrożonych na platformie Azure przy użyciu typów poświadczeń używanych do uwierzytelniania w środowisku projektowym.

Wymagania wstępne

  • Subskrypcja platformy Azure: jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
  • Zainstalowany program Go: wersja 1.18 lub nowsza

1. Instalowanie modułu Azure Identity dla języka Go

Uruchom następujące polecenie, aby pobrać moduł azidentity :

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

2. Uwierzytelnianie za pomocą platformy Azure

Użyj elementu DefaultAzureCredential , aby uwierzytelnić się na platformie Azure przy użyciu jednej z następujących technik:

Aby dowiedzieć się więcej o różnych typach poświadczeń, zobacz Typy poświadczeń.

Opcja 1. Definiowanie zmiennych środowiskowych

Typ DefaultAzureCredential używa typu do konfigurowania EnvironmentCredential uwierzytelniania przy użyciu zmiennych środowiskowych, które obsługują trzy typy uwierzytelniania. Wybierz spośród następujących typów uwierzytelniania i zdefiniuj odpowiednie zmienne środowiskowe.

Jednostka usługi z wpisem tajnym

Nazwa zmiennej Wartość
AZURE_CLIENT_ID Identyfikator aplikacji jednostki usługi platformy Azure
AZURE_TENANT_ID Identyfikator dzierżawy firmy Microsoft Entra aplikacji
AZURE_CLIENT_SECRET Hasło jednostki usługi platformy Azure
export AZURE_TENANT_ID="<active_directory_tenant_id"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"

Jednostka usługi z certyfikatem

Nazwa zmiennej Wartość
AZURE_CLIENT_ID Identyfikator aplikacji Firmy Microsoft Entra
AZURE_TENANT_ID Identyfikator dzierżawy firmy Microsoft Entra aplikacji
AZURE_CLIENT_CERTIFICATE_PATH Ścieżka do pliku certyfikatu, w tym klucza prywatnego (bez ochrony haseł)
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"

Nazwa użytkownika i hasło

Nazwa zmiennej Wartość
AZURE_CLIENT_ID Identyfikator aplikacji Firmy Microsoft Entra
AZURE_USERNAME Nazwa użytkownika (zazwyczaj adres e-mail)
AZURE_PASSWORD Hasło tego użytkownika
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_USERNAME="<azure_username>"
export AZURE_PASSWORD="<azure_user_password>"

Próba konfiguracji jest podejmowana w poprzedniej kolejności. Jeśli na przykład wartości dla klucza tajnego klienta i certyfikatu są obecne, używany jest klucz tajny klienta.

Opcja 2. Używanie tożsamości obciążenia

Tożsamość obciążeń Microsoft Entra umożliwia zasobnikom w klastrze Kubernetes używanie tożsamości Kubernetes (konta usługi). Wystawiono token Kubernetes, a federacja OIDC umożliwia aplikacjom Kubernetes bezpieczne uzyskiwanie dostępu do zasobów platformy Azure za pomocą identyfikatora Entra firmy Microsoft.

Jeśli wymagane zmienne środowiskowe nie EnvironmentCredential są obecne, DefaultAzureCredential próbuje uwierzytelnić się przy użyciu elementu WorkloadIdentityCredential. WorkloadIdentityCredential próbuje odczytać konfigurację jednostki usługi ze zmiennych środowiskowych ustawionych przez element webhook Tożsamości obciążenia.

Opcja 3. Używanie tożsamości zarządzanej

Tożsamości zarządzane eliminują potrzebę zarządzania poświadczeniami przez deweloperów. Łącząc się z zasobami obsługującymi uwierzytelnianie firmy Microsoft Entra, aplikacje mogą używać tokenów firmy Microsoft Entra zamiast poświadczeń.

Jeśli wymagane zmienne środowiskowe nie WorkloadIdentityCredential są obecne, DefaultAzureCredential próbuje uwierzytelnić się przy użyciu właściwości ManagedIdentityCredential.

Jeśli używasz tożsamości zarządzanej przypisanej przez użytkownika, uruchom następujące polecenie, aby ustawić zmienną AZURE_CLIENT_ID środowiskową.

export AZURE_CLIENT_ID="<user_assigned_managed_identity_client_id>"

Opcja 4. Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure

Aby zmniejszyć problemy z programowaniem lokalnym, DefaultAzureCredential można uwierzytelnić się jako użytkownik zalogowany w interfejsie wiersza polecenia platformy Azure.

Uruchom następujące polecenie, aby zalogować się do interfejsu wiersza polecenia platformy Azure:

az login

Uwierzytelnianie interfejsu wiersza polecenia platformy Azure nie jest zalecane w przypadku aplikacji działających na platformie Azure.

3. Użyj wartości DefaultAzureCredential do uwierzytelniania elementu ResourceClient

Utwórz nowy przykładowy moduł Języka Go o nazwie azure-auth , aby przetestować uwierzytelnianie na platformie Azure przy użyciu polecenia DefaultAzureCredential:

  1. Utwórz katalog, aby przetestować i uruchomić przykładowy kod języka Go, a następnie przejdź do tego katalogu.

  2. Uruchom polecenie go mod init , aby utworzyć moduł:

    go mod init azure-auth
    
  3. Uruchom polecenie Przejdź , aby pobrać, skompilować i zainstalować niezbędny zestaw Azure SDK dla modułów języka Go:

    go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    go get "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription"
    
  4. Utwórz plik o nazwie main.go i wstaw następujący kod:

    package main
    
    import (
      "context"
    
      "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
      "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription"
    )
    
    const subscriptionID = "<subscription ID>"
    
    func main() {
      cred, err := azidentity.NewDefaultAzureCredential(nil)
      if err != nil {
        // TODO: handle error
      }
      // Azure SDK Resource Management clients accept the credential as a parameter.
      // The client will authenticate with the credential as necessary.
      client, err := armsubscription.NewSubscriptionsClient(cred, nil)
      if err != nil {
        // TODO: handle error
      }
      _, err = client.Get(context.TODO(), subscriptionID, nil)
      if err != nil {
        // TODO: handle error
      }
    }   
    
    

    Zastąp <subscription ID> ciąg identyfikatorem subskrypcji.

  5. Uruchom polecenie go run , aby skompilować i uruchomić aplikację:

    go run .
    

Uwierzytelnianie na platformie Azure przy użyciu wartości domyślnejAzureCredential

Użyj następującego kodu w aplikacji, aby uwierzytelnić się na platformie Azure przy użyciu modułu Azure Identity przy użyciu polecenia DefaultAzureCredential:

// This credential type checks environment variables for configuration.
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
  // handle error
}

// Azure Resource Management clients accept the credential as a parameter
client, err := armresources.NewClient("<subscriptionId>", cred, nil)
if err != nil {
  // handle error
}

Rozwiązywanie problemów

Aby uzyskać wskazówki dotyczące rozwiązywania błędów z określonych typów poświadczeń, zobacz przewodnik rozwiązywania problemów.

Następne kroki