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.
Wenn Sie die Azure CLI verwenden möchten, um die Schritte in diesem Artikel auszuführen:
Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.
Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.
Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.
Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.
Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.
Wenn Sie Azure PowerShell verwenden möchten, um die Schritte in diesem Artikel auszuführen:
- Bei lokaler Verwendung von Azure PowerShell:
- Installieren der aktuellen Version des Az PowerShell-Moduls.
- Stellen Sie eine Verbindung mit Ihrem Azure-Konto mit dem Cmdlet Connect-AzAccount her.
- Bei Verwendung von Azure Cloud Shell:
- Weitere Informationen finden Sie in der Übersicht über Azure Cloud Shell.
- Bei lokaler Verwendung von Azure PowerShell:
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.
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.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
- Option 2: Erstellen einer benutzerseitig zugewiesenen Identität
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
- Option 2: Zuweisen einer Rolle zu einer benutzerseitig zugewiesenen Identität
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
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
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.Installieren von Go
sudo add-apt-repository ppa:longsleep/golang-backports; sudo apt update; sudo apt install golang-go -y
Erstellen des Go-Pakets
Erstellen Sie in Ihrem Basisverzeichnis ein neues Verzeichnis namens
go-on-azure
.mkdir ~/go-on-azure
Wechseln Sie in das Verzeichnis
go-on-azure
.cd ~/go-on-azure
Führen Sie
go mod init
aus, um die Dateigo.mod
zu erstellen.go mod init go-on-azure
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"
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() }
Erstellen Sie eine Umgebungsvariable namens
KEY_VAULT_NAME
. Ersetzen Sie den<keyVaultName>
Namen Ihrer Azure Key Vault-Instanz.export KEY_VAULT_NAME=<keyVaultName>
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.