Authentifizierung per Azure SDK für Go mit einem Dienstprinzipal
In diesem Tutorial verwenden Sie das Azure SDK für Go, um sich mit einem Azure-Dienstprinzipal unter Verwendung eines Geheimnisses oder Zertifikats bei Azure zu authentifizieren.
Azure-Dienstprinzipale definieren die Zugriffsrichtlinie und -berechtigungen in einem Microsoft Entra-Mandanten. Dadurch werden die Kernfunktionen wie die Authentifizierung während der Anmeldung und die Autorisierung beim Zugriff auf Ressourcen aktiviert. Persönliche Konten für den Zugriff auf Azure-Ressourcen müssen nicht mehr verwendet werden. Das Modul Azure-Identität des Azure SDK für Go bietet eine komfortable Möglichkeit, sich mithilfe eines Dienstprinzipals und mithilfe von Umgebungsvariablen, eines Geheimnisses oder Zertifikats bei Azure zu authentifizieren.
Befolgen Sie dieses Tutorial zum Erstellen und Authentifizieren mit dem Azure SDK für Go unter Verwendung eines Dienstprinzipals.
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, erstellen Sie eine neue Ressourcengruppe und eine Key Vault-Instanz.
az group create --name go-on-azure --location eastus
az keyvault create --location eastus --name `<keyVaultName>` --resource-group go-on-azure
Ersetzen Sie <keyVaultName>
durch einen global eindeutigen Namen. Notieren Sie sich außerdem die Id
Ausgabe, die Sie für den Bereich des Dienstkontos verwenden.
2. Erstellen eines Azure-Dienstprinzipals
Verwenden Sie eins der folgenden Verfahren, um einen Azure-Dienstprinzipal zu erstellen:
- Option 1: Erstellen eines Azure-Dienstprinzipals mit einem Geheimnis
- Option 2: Erstellen eines Azure-Dienstprinzipals mit einem Zertifikat
Weitere Informationen zu Azure-Dienstprinzipalen finden Sie unter Dienstprinzipalobjekt.
Option 1: Erstellen eines Azure-Dienstprinzipals mit einem Geheimnis
Führen Sie die folgenden Befehle aus, um einen Azure-Dienstprinzipal zu erstellen:
az ad sp create-for-rbac --name `<servicePrincipalName>` --role Contributor --scope <resourceGroupId>
Ersetzen Sie <servicePrincipalName>
und <resourceGroupId>
durch die entsprechenden Werte.
Denken Sie unbedingt daran, den Wert für Kennwort zu kopieren – er kann nicht abgerufen werden. Wenn Sie das Kennwort vergessen haben, setzen Sie die Anmeldeinformationen des Dienstprinzipals zurück.
Option 2: Erstellen eines Azure-Dienstprinzipals mit einem Zertifikat
az ad sp create-for-rbac --name <servicePrincipal> --create-cert --role Contributor --scope <resourceGroupId>
Ersetzen Sie <servicePrincipalName>
und <resourceGroupId>
durch die entsprechenden Werte.
3. Authentifizieren bei Azure mit einem Dienstprinzipal
Mithilfe von DefaultAzureCredential
können Sie das Schreiben von umgebungsspezifischem Code für die Authentifizierung bei Azure vermeiden.
Verwenden Sie DefaultAzureCredential
, um Ihre Dienstprinzipal-Anmeldeinformationen durch die Definition von Umgebungsvariablen zu konfigurieren.
Wählen Sie eine der folgenden Optionen aus, um die Anmeldeinformationen für Ihren Dienstprinzipal zu konfigurieren:
Weitere Informationen zu DefaultAzureCredential
finden Sie unter Azure-Authentifizierung mit Azure SDK für Go.
Option 1: Authentifizieren mit einem Geheimnis
Definieren Sie die folgenden Umgebungsvariablen:
Variablenname | Wert |
---|---|
AZURE_CLIENT_ID |
Anwendungs-ID eines Azure-Dienstprinzipals |
AZURE_TENANT_ID |
ID des Microsoft Entra-Mandanten der Anwendung |
AZURE_CLIENT_SECRET |
Kennwort des Azure-Dienstprinzipals |
export AZURE_TENANT_ID="<active_directory_tenant_id"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"
Option 2: Authentifizieren mit einem Zertifikat
Variablenname | Wert |
---|---|
AZURE_CLIENT_ID |
Anwendungs-ID eines Azure-Dienstprinzipals |
AZURE_TENANT_ID |
ID des Microsoft Entra-Mandanten der Anwendung |
AZURE_CLIENT_CERTIFICATE_PATH |
Pfad zu einer Zertifikatdatei einschließlich privatem Schlüssel (ohne Kennwortschutz) |
export AZURE_TENANT_ID="<active_directory_tenant_id"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"
Verwenden von DefaultAzureCredential zum Authentifizieren von ResourceClient
Verwenden Sie die Funktion NewDefaultAzureCredential
des Azure-Identitätsmoduls, um einen Ressourcenclient (ResourceClient) zu authentifizieren.
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
4. Beispielcode
Verwenden Sie das folgende Codebeispiel, um zu überprüfen, ob sich Ihr Dienstprinzipal bei Azure authentifiziert und über die entsprechenden Berechtigungen für die Ressourcengruppe verfügt.
Erstellen Sie ein neues Verzeichnis namens
go-on-azure
in Ihrem Basisverzeichnis.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/keyvault/azsecrets"
Erstellen Sie eine Datei namens
main.go
, und fügen Sie den folgenden Code hinzu.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(name, value string) { keyVaultName := os.Getenv("KEY_VAULT_NAME") 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(), name, value, 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("ExamplePassword", "hVFkk965BuUv") }
Erstellen Sie eine Umgebungsvariable mit dem Namen
KEY_VAULT_NAME
. Legen Sie den Wert der Umgebungsvariablen auf den Namen der zuvor erstellten Azure Key Vault-Instanz fest.export KEY_VAULT_NAME=<KeyVaultName>
Ersetzen Sie den
<KeyVaultName>
Namen Ihrer Azure Key Vault-Instanz.Führen Sie den
go run
Befehl aus, um den neuen Schlüsseltresorschlüssel zu erstellen.go run main.go
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