Azure-verificatie met de Azure Identity-module voor Go
In deze zelfstudie wordt het type DefaultAzureCredential uit de Azure Identity-module voor Go gebruikt om te verifiëren bij Azure. De Azure Identity-module biedt verschillende referentietypen die zich richten op OAuth met Microsoft Entra-id.
DefaultAzureCredential
vereenvoudigt verificatie door veelgebruikte referentietypen te combineren. Het koppelt referentietypen die worden gebruikt voor het verifiëren van door Azure geïmplementeerde toepassingen met referentietypen die worden gebruikt voor verificatie in een ontwikkelomgeving.
- 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
Voer de volgende opdracht uit om de azidentity-module te downloaden:
go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity
Gebruik DefaultAzureCredential
dit om te verifiëren bij Azure met een van de volgende technieken:
- Optie 1: Omgevingsvariabelen definiëren
- Optie 2: Workloadidentiteit gebruiken
- Optie 3: Een beheerde identiteit gebruiken
- Optie 4: Aanmelden met Azure CLI
- Optie 5: Aanmelden met Azure Developer CLI
Zie referentietypen voor meer informatie over de verschillende referentietypen.
Het DefaultAzureCredential
type gebruikt het type voor het EnvironmentCredential
configureren van verificatie met behulp van omgevingsvariabelen die ondersteuning bieden voor drie verificatietypen. Kies uit de volgende verificatietypen en definieer de juiste 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>"
Naam van de variabele | Weergegeven als |
---|---|
AZURE_CLIENT_ID |
Id van een Microsoft Entra-toepassing |
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 |
AZURE_CLIENT_CERTIFICATE_PASSWORD |
(optioneel) Wachtwoord voor het certificaatbestand |
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"
Naam van de variabele | Weergegeven als |
---|---|
AZURE_CLIENT_ID |
Id van een Microsoft Entra-toepassing |
AZURE_USERNAME |
Een gebruikersnaam (meestal een e-mailadres) |
AZURE_PASSWORD |
Het wachtwoord van die gebruiker |
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_USERNAME="<azure_username>"
export AZURE_PASSWORD="<azure_user_password>"
De configuratie wordt uitgevoerd in de voorgaande volgorde. Als er bijvoorbeeld waarden voor een clientgeheim en certificaat aanwezig zijn, wordt het clientgeheim gebruikt. Zie Azure SDK voor Go-verificatie met een service-principal voor een end-to-end-zelfstudie over verificatie met service-principals.
Microsoft Entra Workload-ID stelt pods in een Kubernetes-cluster in staat om een Kubernetes-identiteit (serviceaccount) te gebruiken. Er wordt een Kubernetes-token uitgegeven en met OIDC-federatie kunnen Kubernetes-toepassingen veilig toegang krijgen tot Azure-resources met Microsoft Entra-id.
Als de vereiste omgevingsvariabelen EnvironmentCredential
niet aanwezig zijn, DefaultAzureCredential
probeert u zich te verifiëren met behulp van WorkloadIdentityCredential. WorkloadIdentityCredential
probeert de configuratie van de service-principal te lezen vanuit omgevingsvariabelen die zijn ingesteld door de webhook workloadidentiteit.
Beheerde identiteiten elimineren de noodzaak voor ontwikkelaars om referenties te beheren. Wanneer u verbinding maakt met resources die ondersteuning bieden voor Microsoft Entra-verificatie, kunnen toepassingen die worden gehost in Azure, Microsoft Entra-tokens gebruiken in plaats van referenties. Beheerde identiteiten worden niet ondersteund in lokale ontwikkeling.
Als de vereiste omgevingsvariabelen WorkloadIdentityCredential
niet aanwezig zijn, DefaultAzureCredential
probeert u zich te verifiëren met ManagedIdentityCredential.
Als u een door de gebruiker toegewezen beheerde identiteit gebruikt, voert u de volgende opdracht uit om de AZURE_CLIENT_ID
omgevingsvariabele in te stellen.
export AZURE_CLIENT_ID="<user_assigned_managed_identity_client_id>"
Als de AZURE_CLIENT_ID
omgevingsvariabele niet is ingesteld, DefaultAzureCredentials
probeert u te verifiëren met behulp van de door het systeem toegewezen beheerde identiteit als deze is ingeschakeld op de hostingresource.
Zie Verificatie met de Azure SDK voor Go met behulp van een beheerde identiteit voor een end-to-end-zelfstudie over verificatie met beheerde identiteiten in door Azure gehoste apps.
Als u de wrijving in lokale ontwikkeling wilt verminderen, DefaultAzureCredential
kunt u zich verifiëren als de gebruiker die is aangemeld bij de Azure CLI.
Voer de volgende opdracht uit om u aan te melden bij de Azure CLI:
az login
Als de gebruiker in lokale ontwikkeling niet is aangemeld bij de Azure CLI, DefaultAzureCredential
kan deze verifiëren als de gebruiker die is aangemeld bij de Azure Developer CLI.
Voer de volgende opdracht uit om u aan te melden bij de Azure Developer CLI:
azd auth login
Azure Developer CLI-verificatie wordt niet aanbevolen voor toepassingen die worden uitgevoerd in Azure.
Maak een nieuwe Go-voorbeeldmodule met de naam azure-auth
om verificatie bij Azure te testen met DefaultAzureCredential
:
Maak een map om de go-voorbeeldcode te testen en uit te voeren en ga vervolgens naar die map.
Voer go mod init uit om een module te maken:
go mod init azure-auth
Voer go uit om de benodigde Azure SDK voor Go-modules te downloaden, te bouwen en te installeren:
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity" go get "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription"
Maak een bestand met de naam
main.go
en voeg de volgende code in:package main import ( "context" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription" ) const subscriptionID = "<subscription ID>" func main() { cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { // TODO: handle error } // Azure SDK Resource Management clients accept the credential as a parameter. // The client will authenticate with the credential as necessary. client, err := armsubscription.NewSubscriptionsClient(cred, nil) if err != nil { // TODO: handle error } _, err = client.Get(context.TODO(), subscriptionID, nil) if err != nil { // TODO: handle error } }
Vervang door
<subscription ID>
uw abonnements-id.Voer de volgende opdracht uit
go run
om de toepassing te bouwen en uit te voeren:go run .
Notitie
Als u as-is wilt uitvoeren op uw lokale systeem, moet u zich aanmelden bij Azure met behulp van de Azure CLI of Azure Developer CLI.
Gebruik de volgende code in uw toepassing om te verifiëren bij Azure met de Azure Identity-module met behulp van DefaultAzureCredential
:
// This credential type checks environment variables for configuration.
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
// handle error
}
// Azure Resource Management clients accept the credential as a parameter
client, err := armresources.NewClient("<subscriptionId>", cred, nil)
if err != nil {
// handle error
}
Zie de gids voor probleemoplossing voor hulp bij het oplossen van fouten van specifieke referentietypen.