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:

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 DefaultAzureCredentialcode 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.

  1. Maak een nieuwe map met de naam go-on-azure in uw basismap.

    mkdir ~/go-on-azure
    
  2. Ga naar de go-on-azure map.

    cd ~/go-on-azure
    
  3. Voer go mod init uit om het go.mod bestand te maken.

    go mod init go-on-azure
    
  4. 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"
    
  5. 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")
    }
    
    
  6. 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.

  7. Voer de go run opdracht uit om het nieuwe sleutelkluisgeheim te maken.

     go run main.go
    

Volgende stappen