Azure SDK voor Go-verificatie met een service-principal
In deze zelfstudie gebruikt u de Azure SDK voor Go om te verifiëren bij Azure met een Azure-service-principal met behulp van een geheim of een certificaat.
Azure-service-principals definiëren het toegangsbeleid en de machtigingen in een Microsoft Entra-tenant. Het inschakelen van kernfuncties, zoals verificatie tijdens aanmelding en autorisatie tijdens toegang tot resources. Het verwijderen van de noodzaak om persoonlijke accounts te gebruiken voor toegang tot Azure-resources. De Azure SDK voor Go's Azure Identity-module biedt een handige manier om te verifiëren met Azure met behulp van een service-principal met behulp van omgevingsvariabelen, een geheim of een certificaat
Volg deze zelfstudie voor het maken en verifiëren met de Azure SDK voor Go met behulp van een service-principal.
Vereisten
- Azure-abonnement: als u nog geen abonnement op Azure hebt, maakt u een gratis Azure-account aan voordat u begint.
- Go geïnstalleerd: versie 1.18 of hoger
1. Uw omgeving configureren
Voordat u begint, maakt u een nieuwe resourcegroep en een sleutelkluisexemplaren.
az group create --name go-on-azure --location eastus
az keyvault create --location eastus --name `<keyVaultName>` --resource-group go-on-azure
Vervang door <keyVaultName>
een wereldwijd unieke naam. Noteer ook de Id
uitvoer. U gebruikt deze ook voor het bereik van het serviceaccount.
2. Een Azure-service-principal maken
Gebruik een van de volgende technieken om een Azure-service-principal te maken:
- Optie 1: Een Azure-service-principal maken met een geheim
- Optie 2: Een Azure-service-principal maken met een certificaat
Zie Het service-principal-object voor meer informatie over Azure-service-principals.
Optie 1: Een Azure-service-principal maken met een geheim
Voer de volgende opdrachten uit om een Azure-service-principal te maken.
az ad sp create-for-rbac --name `<servicePrincipalName>` --role Contributor --scope <resourceGroupId>
Vervang <servicePrincipalName>
en <resourceGroupId>
door de juiste waarden.
Zorg ervoor dat u de wachtwoordwaarde kopieert. Deze kan niet worden opgehaald. Als u het wachtwoord vergeet, stelt u de referenties van de service-principal opnieuw in.
Optie 2: Een Azure-service-principal maken met een certificaat
az ad sp create-for-rbac --name <servicePrincipal> --create-cert --role Contributor --scope <resourceGroupId>
Vervang <servicePrincipalName>
en <resourceGroupId>
door de juiste waarden.
3. Verifiëren bij Azure met een service-principal
Met behulp van de DefaultAzureCredential
code kunt u voorkomen dat u omgevingsspecifieke code schrijft om te verifiëren bij Azure.
Gebruik de DefaultAzureCredential
opdracht om uw referenties voor de service-principal te configureren door omgevingsvariabelen te definiëren.
Kies een van de volgende opties om uw referenties voor de service-principal te configureren:
Bekijk Azure-verificatie met de Azure SDK voor Go voor meer informatie over de DefaultAzureCredential
Optie 1: Verifiëren met een geheim
Definieer de volgende omgevingsvariabelen:
Naam van de variabele | Weergegeven als |
---|---|
AZURE_CLIENT_ID |
Toepassings-id van een Azure-service-principal |
AZURE_TENANT_ID |
Id van de Microsoft Entra-tenant van de toepassing |
AZURE_CLIENT_SECRET |
Wachtwoord van de Azure-service-principal |
export AZURE_TENANT_ID="<active_directory_tenant_id"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"
Optie 2: Verifiëren met een certificaat
Naam van de variabele | Weergegeven als |
---|---|
AZURE_CLIENT_ID |
Toepassings-id van een Azure-service-principal |
AZURE_TENANT_ID |
Id van de Microsoft Entra-tenant van de toepassing |
AZURE_CLIENT_CERTIFICATE_PATH |
Pad naar een certificaatbestand inclusief persoonlijke sleutel (zonder wachtwoordbeveiliging) |
export AZURE_TENANT_ID="<active_directory_tenant_id"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"
DefaultAzureCredential gebruiken om ResourceClient te verifiëren
Gebruik de NewDefaultAzureCredential
functie van de Azure Identity-module om een ResourceClient te verifiëren.
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
4. Voorbeeldcode
Gebruik het volgende codevoorbeeld om te controleren of uw service-principal wordt geverifieerd bij Azure en over de juiste machtigingen voor de resourcegroep beschikt.
Maak een nieuwe map met de naam
go-on-azure
in uw basismap.mkdir ~/go-on-azure
Ga naar de
go-on-azure
map.cd ~/go-on-azure
Voer
go mod init
uit om hetgo.mod
bestand te maken.go mod init go-on-azure
Voer deze opdracht uit
go get
om de vereiste Go-modules te installeren.go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity" go get "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets"
Maak een bestand met de naam
main.go
en voeg de volgende code toe.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") }
Maak een omgevingsvariabele met de naam
KEY_VAULT_NAME
. Stel de waarde van de omgevingsvariabele in op de naam van de Azure Key Vault die u eerder hebt gemaakt.export KEY_VAULT_NAME=<KeyVaultName>
Vervang
<KeyVaultName>
door de naam van uw Azure Key Vault-exemplaar.Voer de
go run
opdracht uit om het nieuwe sleutelkluisgeheim te maken.go run main.go
Volgende stappen
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor