Delen via


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.

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:

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, tenanten 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, tenantIden 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 DefaultAzureCredentialkunt u voorkomen dat omgevingsspecifieke code wordt geschreven om te verifiëren bij Azure. Met DefaultAzureCredentialkunt 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.

  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/security/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/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")
    }
    
    
  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
    

    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.

Volgende stappen