Ověřování Azure pomocí modulu Identita Azure pro Go

V tomto kurzu se k ověřování v Azure používá typ DefaultAzureCredential z modulu Azure Identity for Go. Modul Azure Identity nabízí několik typů přihlašovacích údajů, které se zaměřují na OAuth s ID Microsoft Entra.

DefaultAzureCredential zjednodušuje ověřování kombinováním běžně používaných typů přihlašovacích údajů. Zřetězuje typy přihlašovacích údajů používané k ověřování aplikací nasazených v Azure pomocí typů přihlašovacích údajů používaných k ověřování ve vývojovém prostředí.

Požadavky

  • Předplatné Azure: Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.
  • Go installed: Version 1.18 or above

1. Instalace modulu Azure Identity for Go

Spuštěním následujícího příkazu stáhněte modul azidentity :

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

2. Ověřování pomocí Azure

DefaultAzureCredential Použijte k ověření v Azure jednu z následujících technik:

Další informace o různýchtypech

Možnost 1: Definování proměnných prostředí

Tento DefaultAzureCredential typ používá EnvironmentCredential ke konfiguraci ověřování pomocí proměnných prostředí, které podporují tři typy ověřování. Vyberte si z následujících typů ověřování a definujte příslušné proměnné prostředí.

Instanční objekt s tajným kódem

Název proměnné Hodnota
AZURE_CLIENT_ID ID aplikace instančního objektu Azure
AZURE_TENANT_ID ID tenanta Microsoft Entra aplikace
AZURE_CLIENT_SECRET Heslo instančního objektu Azure
export AZURE_TENANT_ID="<active_directory_tenant_id"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"

Instanční objekt s certifikátem

Název proměnné Hodnota
AZURE_CLIENT_ID ID aplikace Microsoft Entra
AZURE_TENANT_ID ID tenanta Microsoft Entra aplikace
AZURE_CLIENT_CERTIFICATE_PATH Cesta k souboru certifikátu včetně privátního klíče (bez ochrany heslem)
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"

Uživatelské jméno a heslo

Název proměnné Hodnota
AZURE_CLIENT_ID ID aplikace Microsoft Entra
AZURE_USERNAME Uživatelské jméno (obvykle e-mailová adresa)
AZURE_PASSWORD Heslo uživatele
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_USERNAME="<azure_username>"
export AZURE_PASSWORD="<azure_user_password>"

Konfigurace se pokouší v předchozím pořadí. Pokud jsou například k dispozici hodnoty pro tajný klíč klienta a certifikát, použije se tajný klíč klienta.

Možnost 2: Použití identity úloh

ID úloh Microsoft Entra umožňuje podům v clusteru Kubernetes používat identitu Kubernetes (účet služby). Vystavil se token Kubernetes a federace OIDC umožňuje aplikacím Kubernetes bezpečně přistupovat k prostředkům Azure pomocí Microsoft Entra ID.

Pokud požadované proměnné EnvironmentCredential prostředí nejsou k dispozici, DefaultAzureCredential pokusí se ověřit pomocí WorkloadIdentityCredential. WorkloadIdentityCredential pokusí se přečíst konfiguraci instančního objektu z proměnných prostředí nastavených webhookem Identity úlohy.

Možnost 3: Použití spravované identity

Spravované identity eliminují potřebu vývojářů spravovat tyto přihlašovací údaje. Připojením k prostředkům, které podporují ověřování Microsoft Entra, můžou aplikace místo přihlašovacích údajů používat tokeny Microsoft Entra.

Pokud požadované proměnné WorkloadIdentityCredential prostředí nejsou k dispozici, DefaultAzureCredential pokusí se ověřit pomocí ManagedIdentityCredential.

Pokud používáte spravovanou identitu přiřazenou uživatelem, spuštěním následujícího příkazu nastavte proměnnou AZURE_CLIENT_ID prostředí.

export AZURE_CLIENT_ID="<user_assigned_managed_identity_client_id>"

Možnost 4: Přihlášení pomocí Azure CLI

Pokud chcete snížit tření v místním vývoji, DefaultAzureCredential můžete se ověřit, když se uživatel přihlásí k Azure CLI.

Spuštěním následujícího příkazu se přihlaste k Azure CLI:

az login

Ověřování Azure CLI se nedoporučuje pro aplikace spuštěné v Azure.

3. Ověření ResourceClient pomocí defaultAzureCredential

Vytvořte nový ukázkový modul Go s názvem azure-auth pro otestování ověřování v Azure pomocí DefaultAzureCredential:

  1. Vytvořte adresář pro otestování a spuštění ukázkového kódu Go a pak ho změňte do daného adresáře.

  2. Spuštěním příkazu go mod init vytvořte modul:

    go mod init azure-auth
    
  3. Spuštěním příkazu go si stáhněte , sestavte a nainstalujte potřebné moduly Azure SDK pro 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. Vytvořte soubor s názvem main.go a vložte následující kód:

    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
      }
    }   
    
    

    Nahraďte <subscription ID> ID předplatného.

  5. Spusťte go run sestavení a spuštění aplikace:

    go run .
    

Ověřování v Azure pomocí defaultAzureCredential

Pomocí následujícího kódu v aplikaci se ověřte v Azure pomocí modulu Azure Identity pomocí 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
}

Řešení problému

Pokyny k řešení chyb z konkrétních typů přihlašovacích údajů najdete v průvodci odstraňováním potíží.

Další kroky