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.
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: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
- 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 <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
- 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 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
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
.mkidr ~/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/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/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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für