Azure SDK för Go-autentisering med tjänstens huvudnamn
I den här självstudien använder du Azure SDK för Go för att autentisera till Azure med ett Huvudnamn för Azure-tjänsten med hjälp av antingen en hemlighet eller ett certifikat.
Azure-tjänstens huvudnamn definierar åtkomstprincipen och behörigheterna i en Microsoft Entra-klientorganisation, vilket aktiverar grundläggande funktioner som autentisering vid inloggning och auktorisering under resursåtkomst. De tar bort behovet av att använda personliga konton för att komma åt Azure-resurser. Du kan tilldela tjänstens huvudnamn de exakta behörigheter som krävs för din app och utveckla mot dessa behörigheter, i stället för att använda ett personligt konto, som kan ha fler behörigheter i klientorganisationen än vad appen kräver. Du kan också använda tjänstens huvudnamn för appar som finns lokalt och som behöver använda Azure-resurser. Azure SDK for Go Azure Identity-modulen är ett bekvämt sätt att autentisera till Azure med ett huvudnamn för tjänsten med hjälp av miljövariabler och en hemlighet eller ett certifikat.
Följ den här självstudien för att skapa och autentisera med Azure SDK för Go med hjälp av tjänstens huvudnamn.
Förutsättningar
- Azure-prenumeration: Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
Go installerat: Version 1.18 eller senare
Om du vill använda Azure CLI för att köra stegen i den här artikeln:
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda tillägg med Azure CLI.
Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
Om du vill använda Azure PowerShell för att köra stegen i den här artikeln:
- Om du väljer att använda Azure PowerShell lokalt:
- Installera den senaste versionen av Az PowerShell-modulen.
- Anslut till ditt Azure-konto med cmdleten Anslut-AzAccount.
- Om du väljer att använda Azure Cloud Shell:
- Om du väljer att använda Azure PowerShell lokalt:
1. Skapa Azure-resurser
Innan du börjar skapar du en ny resursgrupp och key vault-instans.
az group create --name go-on-azure --location eastus
az keyvault create --location eastus --name <keyVaultName> --resource-group go-on-azure --enable-rbac-authorization
Ersätt <keyVaultName>
med ett globalt unikt namn.
Anteckna egenskapen id
från kommandots az keyvault create
utdata. Du använder den i nästa avsnitt för att definiera omfånget för auktoriseringen för tjänstens huvudnamn. Värdet id
har följande formulär: /subscriptions/<subscriptionId>/resourceGroups/go-on-azure/providers/Microsoft.KeyVault/vaults/<keyVaultName>
.
2. Skapa ett Huvudnamn för Azure-tjänsten
Använd någon av följande tekniker för att skapa ett Huvudnamn för Azure-tjänsten och tilldela den rollen "Key Vault Secrets Officer" i nyckelvalvet:
- Alternativ 1: Skapa ett Huvudnamn för Azure-tjänsten med en hemlighet
- Alternativ 2: Skapa ett Huvudnamn för Azure-tjänsten med ett certifikat
Mer information om Azure-tjänstens huvudnamn finns i Objektet För tjänstens huvudnamn.
Tilldela rollen "Key Vault Secrets Officer" till tjänstens huvudnamn, ge den behörighet att skapa, läsa, uppdatera och ta bort hemligheter i nyckelvalvet. Mer information om inbyggda roller för Azure Key Vault finns i Ge åtkomst till Key Vault-nycklar, certifikat och hemligheter med en rollbaserad åtkomstkontroll i Azure. Mer information om inbyggda roller i Azure finns i Inbyggda Azure-roller.
Alternativ 1: Skapa ett Huvudnamn för Azure-tjänsten med en hemlighet
Kör följande kommandon för att skapa ett Huvudnamn för Azure-tjänsten och tilldela den rollen "Key Vault Secrets Officer" i nyckelvalvet.
az ad sp create-for-rbac --name <servicePrincipalName> --role "Key Vault Secrets Officer" --scope <keyVaultId>
Ersätt <servicePrincipalName>
och <keyVaultId>
med lämpliga värden.
password
Anteckna egenskaperna , tenant
och appId
från utdata. Du behöver dem i nästa avsnitt.
Det går inte att hämta lösenordet för tjänstens huvudnamn när det har skapats. Om du glömmer lösenordet kan du återställa autentiseringsuppgifterna för tjänstens huvudnamn.
Alternativ 2: Skapa ett Huvudnamn för Azure-tjänsten med ett certifikat
Kör följande kommandon för att skapa ett Azure-tjänsthuvudnamn som använder ett certifikat och tilldela det rollen "Key Vault Secrets Officer" i nyckelvalvet.
az ad sp create-for-rbac --name <servicePrincipalName> --create-cert --role "Key Vault Secrets Officer" --scope <keyVaultId>
Ersätt <servicePrincipalName>
och <keyVaultId>
med lämpliga värden.
fileWithCertAndPrivateKey
Anteckna egenskaperna , tenantId
och appId
från utdata. Du behöver dem i nästa avsnitt.
3. Autentisera till Azure med tjänstens huvudnamn
Med hjälp av DefaultAzureCredential
kan du undvika att skriva miljöspecifik kod för att autentisera till Azure. Med DefaultAzureCredential
kan du konfigurera autentiseringsuppgifterna för tjänstens huvudnamn genom att definiera miljövariabler.
Välj något av följande alternativ för att konfigurera autentiseringsuppgifterna för tjänstens huvudnamn:
Mer information om finns i DefaultAzureCredential
Azure-autentisering med Azure SDK for Go
Alternativ 1: Autentisera med en hemlighet
Definiera följande miljövariabler:
Variabelnamn | Värde |
---|---|
AZURE_CLIENT_ID |
Program-ID för ett Huvudnamn för Azure-tjänsten |
AZURE_TENANT_ID |
ID för programmets Microsoft Entra-klientorganisation |
AZURE_CLIENT_SECRET |
Lösenord för Azure-tjänstens huvudnamn |
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"
Alternativ 2: Autentisera med ett certifikat
Variabelnamn | Värde |
---|---|
AZURE_CLIENT_ID |
Program-ID för ett Huvudnamn för Azure-tjänsten |
AZURE_TENANT_ID |
ID för programmets Microsoft Entra-klientorganisation |
AZURE_CLIENT_CERTIFICATE_PATH |
Sökväg till en PEM- eller PKCS12-certifikatfil inklusive privat nyckel. Om du har följt stegen för Azure CLI är filen inte lösenordsskyddad. Om du har följt stegen för Azure PowerShell är filen lösenordsskyddad och du måste också ange AZURE_CLIENT_CERTIFICATE_PASSWORD miljövariabeln. |
AZURE_CLIENT_CERTIFICATE_PASSWORD |
Lösenordet du angav när du skapade tjänstens huvudnamn. Behövs bara om du har följt stegen för Azure PowerShell. |
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"
Använd DefaultAzureCredential för att autentisera en resursklient
När du har angett miljövariablerna kan du använda DefaultAzureCredential
i Azure Identity-modulen för att autentisera en resursklient. Följande kod visar hur du hämtar en instans av DefaultAzureCredential
.
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
4. Skapa en nyckelvalvshemlighet med Go
Använd följande kodexempel för att kontrollera att tjänstens huvudnamn autentiserar till Azure och har rätt behörigheter till nyckelvalvet.
Skapa en ny katalog med namnet
go-on-azure
i din hemkatalog.mkdir ~/go-on-azure
Ändra till
go-on-azure
katalogen.cd ~/go-on-azure
Kör
go mod init
för att skapago.mod
filen.go mod init go-on-azure
Kör
go get
för att installera nödvändiga Go-moduler.go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity" go get "github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets"
Skapa en fil med namnet
main.go
och lägg till följande kod.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") }
Skapa en miljövariabel med namnet
KEY_VAULT_NAME
. Ange miljövariabelns värde till namnet på det Azure Key Vault som skapades tidigare.export KEY_VAULT_NAME=<keyVaultName>
Ersätt
<keyVaultName>
med namnet på din Azure Key Vault-instans.go run
Kör kommandot för att skapa den nya nyckelvalvshemligheten.go run main.go
Vid lyckat resultat liknar utdata följande:
Name: https://<keyVaultName>.vault.azure.net/secrets/ExamplePassword/1e697f71d0014761a65641226f2f057b, Value: hVFkk965BuUv
5. Rensa resurser
Om du inte längre vill använda de Azure-resurser som du skapade i den här artikeln är det bra att ta bort dem. Om du tar bort oanvända resurser kan du undvika löpande avgifter och hålla prenumerationen rensad. Det enklaste sättet att ta bort de resurser som du använde i den här självstudien är att ta bort resursgruppen.
az group delete --name go-on-azure --yes
Argumentet --yes
instruerar kommandot att inte be om bekräftelse.
Föregående kommando utför en mjuk borttagning av nyckelvalvet i resursgruppen. Om du vill ta bort den permanent från din prenumeration anger du följande kommando:
az keyvault purge --name <keyVaultName> --no-wait
Ersätt <keyVaultName>
med namnet på ditt nyckelvalv.
Slutligen bör du ta bort appregistreringen och tjänstens huvudnamn.
az ad app delete --id <servicePrincipalAppId>
Ersätt <servicePrincipalAppId>
med app-ID:t för tjänstens huvudnamn.