Udostępnij za pośrednictwem


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łączając podstawowe funkcje, takie jak uwierzytelnianie podczas logowania i autoryzacji podczas dostępu do zasobów. Usuwają konieczność używania kont osobistych do uzyskiwania dostępu do zasobów platformy Azure. Jednostkę usługi można przypisać dokładnie wymagane uprawnienia dla aplikacji i opracowywać względem tych uprawnień, zamiast korzystać z konta osobistego, które może mieć więcej uprawnień w dzierżawie, niż wymaga aplikacja. Jednostki usługi można również używać w przypadku aplikacji hostowanych lokalnie, które muszą korzystać z zasobów platformy Azure. Moduł Azure SDK for Go Azure Identity umożliwia wygodne uwierzytelnianie na platformie Azure przy użyciu jednostki usługi przy użyciu zmiennych środowiskowych oraz 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.

1. Tworzenie zasobów platformy Azure

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 --enable-rbac-authorization

Zastąp <keyVaultName> ciąg globalnie unikatową nazwą.

Zanotuj id właściwość z danych wyjściowych az keyvault create polecenia . Użyjesz go w następnej sekcji, aby zdefiniować zakres autoryzacji dla jednostki usługi. Wartość id ma następującą formę: /subscriptions/<subscriptionId>/resourceGroups/go-on-azure/providers/Microsoft.KeyVault/vaults/<keyVaultName>.

2. Tworzenie jednostki usługi platformy Azure

Użyj jednej z następujących technik, aby utworzyć jednostkę usługi platformy Azure i przypisać jej rolę "Key Vault Secrets Officer" w magazynie kluczy:

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

Przypisanie roli "Key Vault Secrets Officer" do jednostki usługi, autoryzowanie jej do tworzenia, odczytywania, aktualizowania i usuwania wpisów tajnych w magazynie kluczy. Aby dowiedzieć się więcej na temat wbudowanych ról usługi Azure Key Vault, zobacz Zapewnianie dostępu do kluczy, certyfikatów i wpisów tajnych usługi Key Vault przy użyciu kontroli dostępu opartej na rolach platformy Azure. Aby dowiedzieć się więcej na temat wbudowanych ról na platformie Azure, zobacz Role wbudowane platformy Azure.

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

Uruchom następujące polecenia, aby utworzyć jednostkę usługi platformy Azure i przypisać jej rolę "Key Vault Secrets Officer" w magazynie kluczy.

az ad sp create-for-rbac --name <servicePrincipalName> --role "Key Vault Secrets Officer" --scope <keyVaultId>

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

Zanotuj passwordwłaściwości , tenanti appId z danych wyjściowych. Będą one potrzebne w następnej sekcji.

Po utworzeniu nie można pobrać hasła jednostki usługi. Jeśli zapomnisz hasło, możesz zresetować poświadczenia jednostki usługi.

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

Uruchom następujące polecenia, aby utworzyć jednostkę usługi platformy Azure korzystającą z certyfikatu i przypisać jej rolę "Key Vault Secrets Officer" w magazynie kluczy.

az ad sp create-for-rbac --name <servicePrincipalName> --create-cert --role "Key Vault Secrets Officer" --scope <keyVaultId>

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

Zanotuj fileWithCertAndPrivateKeywłaściwości , tenantIdi appId z danych wyjściowych. Będą one potrzebne w następnej sekcji.

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

Za pomocą programu DefaultAzureCredentialmożna uniknąć pisania kodu specyficznego dla środowiska w celu uwierzytelniania na platformie Azure. Za pomocą DefaultAzureCredentialpolecenia można skonfigurować poświadczenia jednostki usługi, definiując zmienne środowiskowe.

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 PEM lub PKCS12, w tym klucza prywatnego. Jeśli wykonano kroki interfejsu wiersza polecenia platformy Azure, plik nie jest chroniony hasłem. Jeśli wykonano kroki dla programu Azure PowerShell, plik jest chroniony hasłem i musisz również ustawić zmienną AZURE_CLIENT_CERTIFICATE_PASSWORD środowiskową.
AZURE_CLIENT_CERTIFICATE_PASSWORD Hasło wprowadzone podczas tworzenia jednostki usługi. Wymagane tylko w przypadku wykonania kroków dla programu Azure PowerShell.
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 domyślnejAzureCredential do uwierzytelniania klienta zasobów

Po ustawieniu zmiennych środowiskowych można użyć DefaultAzureCredential w module Azure Identity w celu uwierzytelnienia klienta zasobów. Poniższy kod pokazuje, jak uzyskać wystąpienie klasy DefaultAzureCredential.

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

4. Tworzenie wpisu tajnego magazynu kluczy za pomocą języka Go

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

  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/security/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/security/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)
    	}
    
        params := azsecrets.SetSecretParameters{Value: &value}
        resp, err := client.SetSecret(context.TODO(), name, params, 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
    

    W przypadku powodzenia dane wyjściowe są podobne do następujących:

    Name: https://<keyVaultName>.vault.azure.net/secrets/ExamplePassword/1e697f71d0014761a65641226f2f057b, Value: hVFkk965BuUv
    

5. Czyszczenie zasobów

Jeśli nie chcesz już używać zasobów platformy Azure utworzonych w tym artykule, dobrym rozwiązaniem jest ich usunięcie. Usunięcie nieużywanych zasobów pomaga uniknąć naliczania bieżących opłat i utrzymuje subskrypcję nieużywaną. Najprostszym sposobem usunięcia zasobów użytych w tym samouczku jest usunięcie grupy zasobów.

az group delete --name go-on-azure --yes

Argument --yes informuje polecenie, aby nie prosić o potwierdzenie.

Poprzednie polecenie wykonuje usuwanie nietrwałe w magazynie kluczy w grupie zasobów. Aby trwale usunąć ją z subskrypcji, wprowadź następujące polecenie:

az keyvault purge --name <keyVaultName> --no-wait

Zastąp <keyVaultName> ciąg nazwą magazynu kluczy.

Na koniec należy usunąć rejestrację aplikacji i jednostkę usługi.

az ad app delete --id <servicePrincipalAppId>

Zastąp <servicePrincipalAppId> ciąg identyfikatorem aplikacji jednostki usługi.

Następne kroki