Udostępnij za pośrednictwem


Uwierzytelnianie za pomocą zestawu Azure SDK dla języka Go przy użyciu tożsamości zarządzanej

W tym samouczku skonfigurujesz maszynę wirtualną platformy Azure z tożsamością zarządzaną w celu uwierzytelniania na platformie Azure przy użyciu zestawu Azure SDK dla języka Go.

Tożsamości zarządzane eliminują konieczność zarządzania poświadczeniami, zapewniając tożsamość bezpośrednio do zasobu platformy Azure. Uprawnienia przypisane do tożsamości zapewniają dostęp do zasobów innych zasobów platformy Azure, które obsługują tożsamości zarządzane, co pozwala usunąć konieczność przekazania poświadczeń w aplikacji. Tożsamości zarządzane umożliwiają uwierzytelnianie i autoryzację aplikacji hostowanych na platformie Azure za pomocą innych zasobów platformy Azure.

Postępuj zgodnie z tym samouczkiem, aby przypisać tożsamość zarządzaną do maszyny wirtualnej i uwierzytelnić się na platformie Azure przy użyciu tożsamości zarządzanej.

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 należy utworzyć nową grupę zasobów, maszynę wirtualną i wystąpienie magazynu kluczy.

Wdrażanie maszyny wirtualnej

Wdrażanie maszyny wirtualnej na platformie Azure. Uruchom kod Języka Go, aby utworzyć wpis tajny w usłudze Azure Key Vault na podstawie tej maszyny wirtualnej.

  1. Utwórz grupę zasobów platformy Azure.

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

    Zmień parametr na --location odpowiednią wartość dla danego środowiska.

  2. Utwórz maszynę wirtualną platformy Azure.

    az vm create \
    --resource-group go-on-azure \
    --name go-on-azure-vm \
    --image canonical:0001-com-ubuntu-server-jammy:22_04-lts:latest \
    --admin-username azureuser \
    --admin-password <password>
    

    Zastąp <password> hasło.

Aby dowiedzieć się więcej o innych usługach obsługujących tożsamości zarządzane, zobacz Usługi obsługujące tożsamości zarządzane dla zasobów platformy Azure.

Wdrażanie wystąpienia magazynu kluczy

Utwórz nowe wystąpienie usługi Azure Key Vault, uruchamiając następujące polecenie:

az keyvault create --location eastus --name <keyVaultName> --resource-group go-on-azure --enable-rbac-authorization

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

2. Tworzenie tożsamości zarządzanej

Na platformie Azure są obsługiwane dwa typy tożsamości zarządzanych; przypisane przez system i przypisane przez użytkownika.

Tożsamości przypisane przez system są bezpośrednio dołączone do zasobu platformy Azure i ograniczone tylko do tego zasobu. Tożsamości przypisane przez użytkownika są zasobami autonomicznymi, które można przypisać do co najmniej jednego zasobu platformy Azure.

Aby dowiedzieć się więcej o różnicy między przypisanymi przez system i przypisanymi przez użytkownika, zobacz Typy tożsamości zarządzanych.

Wybierz jedną z następujących opcji:

Opcja 1. Tworzenie tożsamości przypisanej przez system

Uruchom następujące polecenia, aby utworzyć tożsamość zarządzaną przypisaną przez system:

az vm identity assign -g go-on-azure -n go-on-azure-vm

Opcja 2. Tworzenie tożsamości przypisanej przez użytkownika

Uruchom następujące polecenia, aby utworzyć tożsamość zarządzaną przypisaną przez użytkownika:

az identity create -g go-on-azure -n GoUserIdentity

az vm identity assign -g go-on-azure -n go-on-azure-vm --identities GoUserIdentity

Aby dowiedzieć się więcej, zobacz Konfigurowanie tożsamości zarządzanych dla zasobów platformy Azure na maszynie wirtualnej platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure.

3. Przypisywanie roli do tożsamości zarządzanej

Po utworzeniu tożsamości zarządzanej przypiszesz role, aby przyznać tożsamości uprawnienia dostępu do innego zasobu platformy Azure. W tym samouczku przypiszesz wbudowaną rolę Key Vault Secrets Officer do tożsamości zarządzanej, aby aplikacja Go mogła utworzyć wpis tajny w wystąpieniu magazynu kluczy.

Wybierz jedną z następujących opcji:

Opcja 1. Przypisywanie roli do tożsamości przypisanej przez system

Uruchom następujące polecenia, aby przypisać Key Vault Secrets Officer rolę do przypisanej przez system tożsamości zarządzanej:

#output system identity principal ID
az vm identity show --name go-on-azure-vm --resource-group go-on-azure --query principalId -o tsv

#output key vault ID
az keyvault show --name <keyVaultName> --query id -o tsv

az role assignment create --assignee <principalId> --role "Key Vault Secrets Officer" --scope <keyVaultId>

W drugim poleceniu zastąp <keyVaultName> ciąg nazwą magazynu kluczy. W ostatnim poleceniu zastąp <principalId> wartości i <keyVaultId> danymi wyjściowymi z dwóch pierwszych poleceń.

Opcja 2. Przypisywanie roli do tożsamości przypisanej przez użytkownika

Uruchom następujące polecenia, aby przypisać Key Vault Secrets Officer rolę do tożsamości zarządzanej przypisanej przez użytkownika:

#output user identity principal ID
az identity show --resource-group go-on-azure --name GoUserIdentity --query principalId -o tsv

#output key vault ID
az keyvault show --name <keyVaultName> --query id -o tsv

az role assignment create --assignee <principalId> --role "Key Vault Secrets Officer" --scope <keyVaultId>

W drugim poleceniu zastąp <keyVaultName> ciąg nazwą magazynu kluczy. W ostatnim poleceniu zastąp <principalId> wartości i <keyVaultId> danymi wyjściowymi z dwóch pierwszych poleceń.

Aby dowiedzieć się więcej na temat wbudowanych ról w usłudze 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.

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

Następnie za pomocą protokołu SSH na maszynie wirtualnej platformy Azure zainstaluj język Go i skompiluj pakiet Go.

Instalowanie języka Go na maszynie wirtualnej platformy Azure

  1. Uzyskaj publiczny adres IP maszyny wirtualnej platformy Azure.

    az vm show -d -g go-on-azure -n go-on-azure-vm --query publicIps -o tsv
    
  2. Połączenie SSH z maszyną wirtualną platformy Azure.

    ssh azureuser@<public-ip>
    

    Zastąp <public-ip> ciąg publicznym adresem IP maszyny wirtualnej platformy Azure.

  3. Instalowanie języka Go

    sudo add-apt-repository ppa:longsleep/golang-backports;
    sudo apt update;
    sudo apt install golang-go -y
    

Tworzenie pakietu Języka Go

  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. main.go Utwórz plik i skopiuj do niego 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() {
        keyVaultName := os.Getenv("KEY_VAULT_NAME")
        secretName := "quickstart-secret"
        secretValue := "createdWithGO"
        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: &secretValue}
        resp, err := client.SetSecret(context.TODO(), secretName, 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()
    }
    
    
  6. Utwórz zmienną środowiskową o nazwie KEY_VAULT_NAME. Zastąp <keyVaultName> ciąg nazwą wystąpienia usługi Azure Key Vault.

    export KEY_VAULT_NAME=<keyVaultName>
    
  7. Uruchom go run polecenie , aby utworzyć 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/quickstart-secret/0e0b941824c4493bb3b83045a31b2bf7, Value: createdWithGO
    

Możesz sprawdzić, czy wpis tajny magazynu kluczy został utworzony przy użyciu programu Azure PowerShell, interfejsu wiersza polecenia platformy Azure lub witryny Azure Portal.

Uwaga

Jeśli używasz interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell, musisz upewnić się, że twoje konto użytkownika platformy Azure ma przypisaną rolę, która umożliwia odczytywanie wpisów tajnych w magazynie kluczy, takich jak "Key Vault Secrets Officer" lub "Użytkownik wpisów tajnych usługi Key Vault".

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 --force-deletion-types Microsoft.Compute/virtualMachines --yes

Argument force-deletion-type informuje polecenie, aby wymusić usunięcie maszyn wirtualnych w grupie zasobów. 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.

Następne kroki