Zestaw Azure SDK dla języka Go z jednostką usługi

W tym samouczku użyjesz zestawu Azure SDK dla języka Go, aby uwierzytelnić się na platformie Azure przy użyciu jednostki usługi platformy Azure przy użyciu wpisu tajnego lub certyfikatu.

Jednostki usługi platformy Azure definiują zasady dostępu i uprawnienia w dzierżawie firmy Microsoft Entra. Włączanie podstawowych funkcji, takich jak uwierzytelnianie podczas logowania i autoryzacji podczas uzyskiwania dostępu do zasobów. Usunięcie potrzeby używania kont osobistych do uzyskiwania dostępu do zasobów platformy Azure. Moduł Azure Identity dla zestawu Azure SDK dla języka Go zapewnia wygodny sposób uwierzytelniania na platformie Azure przy użyciu jednostki usługi przy użyciu zmiennych środowiskowych, wpisu tajnego lub certyfikatu

Wykonaj czynności opisane w tym samouczku, aby utworzyć i uwierzytelnić się za pomocą zestawu Azure SDK dla języka Go przy użyciu jednostki usługi.

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. Konfigurowanie środowiska

Przed rozpoczęciem utwórz nową grupę zasobów i wystąpienie magazynu kluczy.

az group create --name go-on-azure --location eastus

az keyvault create --location eastus --name `<keyVaultName>` --resource-group go-on-azure

Zastąp <keyVaultName> ciąg globalnie unikatową nazwą. Zwróć również uwagę na dane Id wyjściowe, które będą używane do zakresu konta usługi.

2. Tworzenie jednostki usługi platformy Azure

Użyj jednej z następujących technik, aby utworzyć jednostkę usługi platformy Azure:

Aby dowiedzieć się więcej o jednostkach usługi platformy Azure, zobacz Obiekt jednostki usługi.

Opcja 1. Tworzenie jednostki usługi platformy Azure z wpisem tajnym

Uruchom następujące polecenia, aby utworzyć jednostkę usługi platformy Azure.

az ad sp create-for-rbac --name `<servicePrincipalName>` --role Contributor --scope <resourceGroupId>

Zastąp <servicePrincipalName> wartości i <resourceGroupId> odpowiednimi wartościami.

Upewnij się, że skopiujesz wartość hasła — nie można jej pobrać. Jeśli zapomnisz hasło, zresetuj poświadczenia jednostki usługi.

Opcja 2. Tworzenie jednostki usługi platformy Azure przy użyciu certyfikatu

az ad sp create-for-rbac --name <servicePrincipal> --create-cert --role Contributor --scope <resourceGroupId>

Zastąp <servicePrincipalName> wartości i <resourceGroupId> odpowiednimi wartościami.

3. Uwierzytelnianie na platformie Azure przy użyciu jednostki usługi

Korzystając z programu DefaultAzureCredential, można uniknąć pisania kodu specyficznego dla środowiska w celu uwierzytelniania na platformie Azure.

Użyj polecenia DefaultAzureCredential , aby skonfigurować poświadczenia jednostki usługi przez zdefiniowanie zmiennych środowiskowych.

Wybierz jedną z następujących opcji, aby skonfigurować poświadczenia jednostki usługi:

Aby dowiedzieć się więcej na temat usługi , zapoznaj się z tematem DefaultAzureCredentialUwierzytelnianie platformy Azure za pomocą zestawu Azure SDK dla języka Go

Opcja 1. Uwierzytelnianie przy użyciu wpisu tajnego

Zdefiniuj następujące zmienne środowiskowe:

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

Opcja 2. Uwierzytelnianie przy użyciu certyfikatu

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_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>"

Użyj wartości DefaultAzureCredential do uwierzytelniania elementu ResourceClient

NewDefaultAzureCredential Użyj funkcji modułu Azure Identity, aby uwierzytelnić element ResourceClient.

cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
    log.Fatalf("failed to obtain a credential: %v", err)
}

4. Przykładowy kod

Skorzystaj z poniższego przykładu kodu, aby sprawdzić, czy jednostka usługi uwierzytelnia się na platformie Azure i ma odpowiednie uprawnienia do grupy zasobów.

  1. Utwórz nowy katalog o nazwie go-on-azure w katalogu głównym.

    mkdir ~/go-on-azure
    
  2. Przejdź do go-on-azure katalogu.

    cd ~/go-on-azure
    
  3. Uruchom polecenie go mod init , aby utworzyć go.mod plik.

    go mod init go-on-azure
    
  4. Uruchom polecenie go get , aby zainstalować wymagane moduły języka Go.

    go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    go get "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets"
    
  5. Utwórz plik o nazwie main.go i dodaj następujący kod.

    package main
    
    import (
    	"context"
    	"fmt"
    	"log"
    	"os"
    
    	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    	"github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets"
    )
    
    func createSecret(name, value string) {
    	keyVaultName := os.Getenv("KEY_VAULT_NAME")
    	keyVaultUrl := fmt.Sprintf("https://%s.vault.azure.net/", keyVaultName)
    
    	cred, err := azidentity.NewDefaultAzureCredential(nil)
    	if err != nil {
    		log.Fatalf("failed to obtain a credential: %v", err)
    	}
    
    	client, err := azsecrets.NewClient(keyVaultUrl, cred, nil)
    	if err != nil {
    		log.Fatalf("failed to create a client: %v", err)
    	}
    
    	resp, err := client.SetSecret(context.TODO(), name, value, nil)
    	if err != nil {
    		log.Fatalf("failed to create a secret: %v", err)
    	}
    
    	fmt.Printf("Name: %s, Value: %s\n", *resp.ID, *resp.Value)
    }
    
    func main() {
    	createSecret("ExamplePassword", "hVFkk965BuUv")
    }
    
    
  6. Utwórz zmienną środowiskową o nazwie KEY_VAULT_NAME. Ustaw wartość zmiennej środowiskowej na nazwę utworzonej wcześniej usługi Azure Key Vault.

    export KEY_VAULT_NAME=<KeyVaultName>
    

    Zastąp <KeyVaultName> ciąg nazwą wystąpienia usługi Azure Key Vault.

  7. Uruchom polecenie , go run aby utworzyć nowy wpis tajny magazynu kluczy.

     go run main.go
    

Następne kroki