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. Der Identität zugewiesene Berechtigungen gewähren der Ressource Zugriff auf andere Azure-Ressourcen, die verwaltete Identitäten unterstützen. Sie müssen keine Anmeldeinformationen mehr an Ihre Anwendung übergeben.

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.
  • Installation von Go: Version 1.18 oder höher

1. Konfigurieren Ihrer Umgebung

Bevor Sie beginnen, müssen Sie Ihre Umgebung konfigurieren.

Bereitstellen eines virtuellen Computers

Stellen Sie einen virtuellen Computer in Azure bereit. Sie führen den Go-Code auf diesem virtuellen Computer aus, um ein Geheimnis in Azure Key Vault 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:ubuntuserver:19.04: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

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

Ersetzen Sie <UserIdentityId> durch die ID der verwalteten Benutzeridentität.

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 Tutorial weisen Sie der verwalteten Identität die integrierte Rolle Key Vault Contributor zu, damit die Go-Anwendung ein Geheimnis in der Key Vault-Instanz 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 Contributor 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
scope=$(az keyvault show --name go-on-azure-kv --query id -o tsv)

az role assignment create --assignee '<principalId>' --role 'Key Vault Contributor' --scope '<keyVaultId>'

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 Contributor 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 go-on-azure-kv --query id -o tsv

az role assignment create --assignee '<principalId>' --role 'Key Vault Contributor' --scope '<keyVaultId>'

Weitere Informationen zu integrierten Rollen finden Sie unter Integrierte 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.

    mkidr ~/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/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/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)
        }
    
        resp, err := client.SetSecret(context.TODO(), secretName, secretValue, 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()
    }
    
    

Bevor Sie den Code ausführen, erstellen Sie eine Umgebungsvariable namens KEY_VAULT_NAME. Legen Sie den Wert der Umgebungsvariablen auf den Namen der zuvor erstellten Azure Key Vault-Instanz fest. Ersetzen Sie den <KeyVaultName> Namen Ihrer Azure Key Vault-Instanz.

export KEY_VAULT_NAME=<KeyVaultName>

Führen Sie go run als Nächstes den Befehl aus, um einen Schlüsseltresorschlüssel zu erstellen.

go run main.go

Stellen Sie mithilfe von Azure PowerShell, der Azure CLI oder des Azure-Portals sicher, dass das Schlüsseltresorgeheimnis erstellt wurde.

Nächste Schritte