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, waardoor kernfuncties zoals verificatie tijdens aanmelding en autorisatie tijdens toegang tot resources worden ingeschakeld. Ze verwijderen de noodzaak om persoonlijke accounts te gebruiken voor toegang tot Azure-resources. U kunt een service-principal de exacte machtigingen toewijzen die nodig zijn voor uw app en ontwikkelen op basis van deze machtigingen, in plaats van een persoonlijk account te gebruiken, dat mogelijk meer bevoegdheden in uw tenant heeft dan nodig is voor de app. U kunt ook service-principals gebruiken voor apps die on-premises worden gehost en die Azure-resources moeten gebruiken. De Azure SDK voor Go Azure Identity-module biedt een handige manier om te verifiëren bij Azure met een service-principal met behulp van omgevingsvariabelen en 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
Als u de Azure CLI wilt gebruiken om de stappen in dit artikel uit te voeren:
Gebruik de Bash-omgeving in Azure Cloud Shell. Zie quickstart voor Bash in Azure Cloud Shell voor meer informatie.
Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren. Als u in Windows of macOS werkt, kunt u Azure CLI uitvoeren in een Docker-container. Zie De Azure CLI uitvoeren in een Docker-container voor meer informatie.
Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht az login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Raadpleeg Aanmelden bij Azure CLI voor aanvullende aanmeldingsopties.
Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Raadpleeg Extensies gebruiken met Azure CLI voor meer informatie over extensies.
Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.
Als u Azure PowerShell wilt gebruiken om de stappen in dit artikel uit te voeren:
- Als u ervoor kiest om Azure PowerShell lokaal te gebruiken:
- Installeer de nieuwste versie van de Az PowerShell-module.
- Maak verbinding met uw Azure-account met de cmdlet Connect-AzAccount.
- Als u ervoor kiest om Azure Cloud Shell te gebruiken:
- Raadpleeg Overzicht van Azure Cloud Shell voor meer informatie.
- Als u ervoor kiest om Azure PowerShell lokaal te gebruiken:
1. Azure-resources maken
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 --enable-rbac-authorization
Vervang door <keyVaultName>
een wereldwijd unieke naam.
Noteer de id
eigenschap uit de uitvoer van de az keyvault create
opdracht. U gebruikt deze in de volgende sectie om het bereik van de autorisatie voor de service-principal te definiëren. De id
waarde heeft de volgende vorm: /subscriptions/<subscriptionId>/resourceGroups/go-on-azure/providers/Microsoft.KeyVault/vaults/<keyVaultName>
.
2. Een Azure-service-principal maken
Gebruik een van de volgende technieken om een Azure-service-principal te maken en deze toe te wijzen aan de rol Key Vault Secrets Officer in de sleutelkluis:
- 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.
Door de rol Key Vault Secrets Officer toe te wijzen aan de service-principal, kan deze geheimen maken, lezen, bijwerken en verwijderen in de sleutelkluis. Zie Toegang bieden tot Key Vault-sleutels, -certificaten en -geheimen met een op rollen gebaseerd toegangsbeheer van Azure voor meer informatie over ingebouwde rollen voor Azure-sleutelkluis. Zie ingebouwde Azure-rollen voor meer informatie over ingebouwde rollen in Azure.
Optie 1: Een Azure-service-principal maken met een geheim
Voer de volgende opdrachten uit om een Azure-service-principal te maken en deze toe te wijzen aan de rol Key Vault Secrets Officer in de sleutelkluis.
az ad sp create-for-rbac --name <servicePrincipalName> --role "Key Vault Secrets Officer" --scope <keyVaultId>
Vervang <servicePrincipalName>
en <keyVaultId>
door de juiste waarden.
Noteer de password
, tenant
en appId
eigenschappen uit de uitvoer. U hebt deze in de volgende sectie nodig.
Na het maken kan het wachtwoord van de service-principal niet worden opgehaald. Als u het wachtwoord vergeet, kunt u de referenties van de service-principal opnieuw instellen.
Optie 2: Een Azure-service-principal maken met een certificaat
Voer de volgende opdrachten uit om een Azure-service-principal te maken die gebruikmaakt van een certificaat en deze toe te wijzen aan de rol Key Vault Secrets Officer in de sleutelkluis.
az ad sp create-for-rbac --name <servicePrincipalName> --create-cert --role "Key Vault Secrets Officer" --scope <keyVaultId>
Vervang <servicePrincipalName>
en <keyVaultId>
door de juiste waarden.
Noteer de fileWithCertAndPrivateKey
, tenantId
en appId
eigenschappen uit de uitvoer. U hebt deze in de volgende sectie nodig.
3. Verifiëren bij Azure met een service-principal
Met behulp van DefaultAzureCredential
kunt u voorkomen dat omgevingsspecifieke code wordt geschreven om te verifiëren bij Azure. Met DefaultAzureCredential
kunt u de referenties van uw service-principal 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 PEM- of PKCS12-certificaatbestand, inclusief persoonlijke sleutel. Als u de stappen voor de Azure CLI hebt gevolgd, is het bestand niet beveiligd met een wachtwoord. Als u de stappen voor Azure PowerShell hebt gevolgd, is het bestand beveiligd met een wachtwoord en moet u ook de AZURE_CLIENT_CERTIFICATE_PASSWORD omgevingsvariabele instellen. |
AZURE_CLIENT_CERTIFICATE_PASSWORD |
Het wachtwoord dat u hebt ingevoerd bij het maken van de service-principal. Alleen nodig als u de stappen voor Azure PowerShell hebt gevolgd. |
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 een resourceclient te verifiëren
Nadat u de omgevingsvariabelen hebt ingesteld, kunt u in de Azure Identity-module een DefaultAzureCredential
resourceclient verifiëren. De volgende code laat zien hoe u een exemplaar van DefaultAzureCredential
.
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
4. Een sleutelkluisgeheim maken met Go
Gebruik het volgende codevoorbeeld om te controleren of uw service-principal wordt geverifieerd bij Azure en over de juiste machtigingen voor de sleutelkluis 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/security/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/security/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) } params := azsecrets.SetSecretParameters{Value: &value} resp, err := client.SetSecret(context.TODO(), name, 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("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
Bij succes ziet de uitvoer er ongeveer als volgt uit:
Name: https://<keyVaultName>.vault.azure.net/secrets/ExamplePassword/1e697f71d0014761a65641226f2f057b, Value: hVFkk965BuUv
5. Resources opschonen
Als u de Azure-resources die u in dit artikel hebt gemaakt niet meer wilt gebruiken, is het een goed idee om ze te verwijderen. Als u ongebruikte resources verwijdert, voorkomt u doorlopende kosten en blijft uw abonnement overzichtelijk. De eenvoudigste manier om de resources te verwijderen die u in deze zelfstudie hebt gebruikt, is door de resourcegroep te verwijderen.
az group delete --name go-on-azure --yes
Het --yes
argument geeft aan dat de opdracht niet om bevestiging moet vragen.
Met de voorgaande opdracht wordt een voorlopig verwijderen uitgevoerd op de sleutelkluis in de resourcegroep. Als u het definitief uit uw abonnement wilt verwijderen, voert u de volgende opdracht in:
az keyvault purge --name <keyVaultName> --no-wait
Vervang <keyVaultName>
door de naam van uw sleutelkluis.
Ten slotte moet u de app-registratie en service-principal verwijderen.
az ad app delete --id <servicePrincipalAppId>
Vervang <servicePrincipalAppId>
door de app-id van uw service-principal.