Freigeben über


Authentifizierung mit dem Azure SDK für Go mithilfe einer verwalteten Identität

In diesem Lernprogramm konfigurieren Sie einen virtuellen Azure-Computer mit einer verwalteten Identität für die Authentifizierung bei Azure mithilfe des Azure SDK für Go.

Dank verwalteter Identitäten müssen Sie keine Anmeldeinformationen mehr verwalten, da direkt eine Identität für eine Azure-Ressource bereitgestellt wird. Berechtigungen, die der Identität zugewiesen sind, gewähren den Ressourcenzugriff auf andere Azure-Ressourcen, die verwaltete Identitäten unterstützen, und entfernen die Notwendigkeit, Anmeldeinformationen in Ihrer Anwendung zu übergeben. Sie können verwaltete Identitäten verwenden, um von Azure gehostete Apps mit anderen Azure-Ressourcen zu authentifizieren und zu autorisieren.

In diesem Tutorial erfahren Sie, wie Sie einem virtuellen Computer eine verwaltete Identität zuweisen und sich mithilfe einer verwalteten Identität bei Azure authentifizieren.

Voraussetzungen

  • Azure-Abonnement: Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

1. Erstellen von Azure-Ressourcen

Bevor Sie beginnen, müssen Sie eine neue Ressourcengruppe, einen virtuellen Computer und eine Key Vault-Instanz erstellen.

Bereitstellen eines virtuellen Computers

Stellen Sie einen virtuellen Computer in Azure bereit. Sie führen den Go-Code aus, um einen geheimen Schlüssel im Azure Key Vault von diesem virtuellen Computer zu erstellen.

  1. Erstellen einer Azure-Ressourcengruppe.

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

    Ändern Sie den Parameter --location in den passenden Wert für Ihre Umgebung.

  2. Erstellen Sie den virtuellen Azure-Computer.

    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>
    

    Ersetzen Sie <password> durch Ihr Kennwort.

Weitere Informationen zu anderen Diensten, die verwaltete Identitäten unterstützen, finden Sie unter Dienste, die verwaltete Identitäten für Azure-Ressourcen unterstützen.

Bereitstellen einer Key Vault-Instanz

Mit dem folgenden Befehl erstellen Sie eine neue Azure Key Vault-Instanz:

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

Ersetzen Sie <keyVaultName> durch einen global eindeutigen Namen.

2. Erstellen einer verwalteten Identität

In Azure werden zwei Arten von verwalteten Identitäten unterstützt: systemseitig zugewiesene und benutzerseitig zugewiesene.

Systemseitig zugewiesene Identitäten sind direkt an eine Azure-Ressource angefügt und auf diese Ressource beschränkt. Benutzerseitig zugewiesene Identitäten sind eigenständige Ressourcen, die mindestens einer Azure-Ressource zugewiesen werden können.

Weitere Informationen zum Unterschied zwischen systemseitig zugewiesenen und benutzerseitig zugewiesenen Identitäten finden Sie unter Arten von verwalteten Identitäten.

Wählen Sie eine der folgenden Optionen aus:

Option 1: Erstellen einer systemseitig zugewiesenen Identität

Führen Sie die folgenden Befehle aus, um eine systemseitig zugewiesene verwaltete Identität zu erstellen:

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

Option 2: Erstellen einer benutzerseitig zugewiesenen Identität

Führen Sie die folgenden Befehle aus, um eine benutzerseitig zugewiesene verwaltete Identität zu erstellen:

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

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

Weitere Informationen finden Sie unter Konfigurieren von verwalteten Identitäten für Azure-Ressourcen auf einem virtuellen Azure-Computer mithilfe der Azure CLI.

3. Zuweisen einer Rolle zur verwalteten Identität

Nachdem eine verwaltete Identität erstellt wurde, weisen Sie Rollen zu, um der Identität Berechtigungen für den Zugriff auf andere Azure-Ressourcen zu gewähren. In diesem Lernprogramm weisen Sie der verwalteten Identität die integrierte Rolle Key Vault Secrets Officer zu, damit die Go-Anwendung innerhalb der Key Vault-Instanz einen geheimen Schlüssel erstellen kann.

Wählen Sie eine der folgenden Optionen aus:

Option 1: Zuweisen einer Rolle zu einer systemseitig zugewiesenen Identität

Führen Sie die folgenden Befehle aus, um der systemseitig zugewiesenen verwalteten Identität die Rolle Key Vault Secrets Officer zuzuweisen:

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

Ersetzen Sie <keyVaultName> im zweiten Befehl den Namen Ihres Schlüsseltresors. Ersetzen <principalId> Sie im letzten Befehl die <keyVaultId> Ausgabe aus den ersten beiden Befehlen.

Option 2: Zuweisen einer Rolle zu einer benutzerseitig zugewiesenen Identität

Führen Sie die folgenden Befehle aus, um der benutzerseitig zugewiesenen verwalteten Identität die Rolle Key Vault Secrets Officer zuzuweisen:

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

Ersetzen Sie <keyVaultName> im zweiten Befehl den Namen Ihres Schlüsseltresors. Ersetzen <principalId> Sie im letzten Befehl die <keyVaultId> Ausgabe aus den ersten beiden Befehlen.

Weitere Informationen zu integrierten Rollen im Azure Key Vault finden Sie unter "Bereitstellen des Zugriffs auf Schlüsseltresorschlüssel, Zertifikate und Geheime Schlüssel mit einer rollenbasierten Azure-Zugriffssteuerung". Weitere Informationen zu integrierten Rollen in Azure finden Sie in den integrierten Azure-Rollen.

4. Erstellen eines Schlüsseltresorgeheimnisses mit Go

Stellen Sie als Nächstes eine SSH-Verbindung mit dem virtuellen Azure-Computer her, installieren Sie Go, und erstellen Sie das Go-Paket.

Installieren von Go auf dem virtuellen Azure-Computer

  1. Rufen Sie die öffentliche IP-Adresse des virtuellen Azure-Computers ab.

    az vm show -d -g go-on-azure -n go-on-azure-vm --query publicIps -o tsv
    
  2. Stellen Sie eine SSH-Verbindung mit dem virtuellen Azure-Computer her.

    ssh azureuser@<public-ip>
    

    Ersetzen Sie <public-ip> durch die öffentliche IP-Adresse des virtuellen Azure-Computers.

  3. Installieren von Go

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

Erstellen des Go-Pakets

  1. Erstellen Sie in Ihrem Basisverzeichnis ein neues Verzeichnis namens go-on-azure.

    mkdir ~/go-on-azure
    
  2. Wechseln Sie in das Verzeichnis go-on-azure.

    cd ~/go-on-azure
    
  3. Führen Sie go mod init aus, um die Datei go.mod zu erstellen.

    go mod init go-on-azure
    
  4. Führen Sie go get aus, um die erforderlichen Go-Module zu installieren.

    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. Erstellen Sie die Datei main.go, und kopieren Sie den folgenden Code hinein.

    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. Erstellen Sie eine Umgebungsvariable namens KEY_VAULT_NAME. Ersetzen Sie den <keyVaultName> Namen Ihrer Azure Key Vault-Instanz.

    export KEY_VAULT_NAME=<keyVaultName>
    
  7. Führen Sie go run den Befehl aus, um einen Schlüsseltresorschlüssel zu erstellen.

    go run main.go
    

    Bei Erfolg ähnelt die Ausgabe folgendem:

    Name: https://<keyVaultName>.vault.azure.net/secrets/quickstart-secret/0e0b941824c4493bb3b83045a31b2bf7, Value: createdWithGO
    

Sie können überprüfen, ob der Schlüsseltresorschlüssel mit Azure PowerShell, Azure CLI oder dem Azure-Portal erstellt wurde.

Hinweis

Wenn Sie die Azure CLI oder Azure PowerShell verwenden, müssen Sie sicherstellen, dass Ihrem Azure-Benutzerkonto eine Rolle zugewiesen ist, die es ermöglicht, geheime Schlüssel im Schlüsseltresor wie "Key Vault Secrets Officer" oder "Key Vault Secrets User" zu lesen.

5. Bereinigen von Ressourcen

Wenn Sie die azure-Ressourcen, die Sie in diesem Artikel erstellt haben, nicht mehr verwenden möchten, empfiehlt es sich, sie zu löschen. Das Löschen nicht verwendeter Ressourcen hilft Ihnen, laufende Gebühren zu vermeiden und Ihr Abonnement übersichtlich zu halten. Die einfachste Möglichkeit zum Löschen der in diesem Lernprogramm verwendeten Ressourcen besteht darin, die Ressourcengruppe zu löschen.

az group delete --name go-on-azure --force-deletion-types Microsoft.Compute/virtualMachines --yes

Das force-deletion-type Argument weist den Befehl an, das Löschen von virtuellen Computern in der Ressourcengruppe zu erzwingen. Das --yes Argument weist den Befehl an, keine Bestätigung zu verlangen.

Der vorstehende Befehl führt einen vorläufigen Löschvorgang im Schlüsseltresor in der Ressourcengruppe aus. Um es endgültig aus Ihrem Abonnement zu entfernen, geben Sie den folgenden Befehl ein:

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

Ersetzen Sie <keyVaultName> durch den Namen Ihres Schlüsseltresors.

Nächste Schritte