Autenticação do SDK do Azure para linguagem Go com uma entidade de serviço

Neste tutorial, você usará o SDK do Azure para linguagem Go se autenticar no Azure com uma entidade de serviço do Azure usando um segredo ou um certificado.

As entidades de serviço do Azure definem a política de acesso e as permissões em um locatário do Microsoft Entra. Habilitação dos principais recursos, como autenticação durante a entrada e autorização durante o acesso do recurso. Eliminação da necessidade de usar contas pessoais para acessar recursos do Azure. O módulo Identidade do Azure do SDK do Azure para linguagem Go oferece uma forma conveniente de se autenticar no Azure usando uma entidade de serviço que usa variáveis de ambiente, um segredo ou um certificado

Siga este tutorial para criar o SDK do Azure para linguagem Go usando uma entidade de serviço e se autenticar com ele.

Pré-requisitos

  • Assinatura do Azure: caso você não tenha uma assinatura do Azure, crie uma conta gratuita antes de começar.
  • Go instalado: versão 1.18 ou superior

1. Configurar seu ambiente

Antes de começar, crie um novo grupo de recursos e uma nova instância do cofre de chaves.

az group create --name go-on-azure --location eastus

az keyvault create --location eastus --name `<keyVaultName>` --resource-group go-on-azure

Substitua <keyVaultName> por um valor globalmente único. Anote também o da saída, você o usará para o Id escopo da conta de serviço.

2. Criar uma entidade de serviço do Azure

Use uma das seguintes técnicas para criar uma entidade de serviço do Azure:

Para saber mais sobre entidades de serviço do Azure, confira Objeto de entidade de serviço.

Opção 1: criar uma entidade de serviço do Azure com um segredo

Execute os comandos a seguir para criar uma entidade de serviço do Azure.

az ad sp create-for-rbac --name `<servicePrincipalName>` --role Contributor --scope <resourceGroupId>

Substitua <servicePrincipalName> e <resourceGroupId> pelos valores apropriados.

Copie esse valor de senha, já que não será possível recuperá-lo posteriormente. Se você esquecer a senha, redefina as credenciais da entidade de serviço.

Opção 2: criar uma entidade de serviço do Azure com um certificado

az ad sp create-for-rbac --name <servicePrincipal> --create-cert --role Contributor --scope <resourceGroupId>

Substitua <servicePrincipalName> e <resourceGroupId> pelos valores apropriados.

3. Autenticar-se no Azure com uma entidade de serviço

Usando o DefaultAzureCredential, você pode evitar escrever código específico do ambiente para se autenticar no Azure.

Use o DefaultAzureCredential para configurar suas credenciais de entidade de serviço definindo variáveis de ambiente.

Escolha uma das seguintes opções para configurar suas credenciais de entidade de serviço:

Para saber mais sobre o DefaultAzureCredential, confira Autenticação do Azure com o SDK do Azure para linguagem Go

Opção 1: autenticar-se com um segredo

Defina as seguintes variáveis de ambiente:

Nome da variável Valor
AZURE_CLIENT_ID ID de aplicativo de uma entidade de serviço do Azure
AZURE_TENANT_ID ID do locatário do Microsoft Entra do aplicativo
AZURE_CLIENT_SECRET Senha da entidade de serviço do Azure
export AZURE_TENANT_ID="<active_directory_tenant_id"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"

Opção 2: autenticar-se com um certificado

Nome da variável Valor
AZURE_CLIENT_ID ID de aplicativo de uma entidade de serviço do Azure
AZURE_TENANT_ID ID do locatário do Microsoft Entra do aplicativo
AZURE_CLIENT_CERTIFICATE_PATH Caminho para um arquivo de certificado, incluindo a chave privada (sem proteção por senha)
export AZURE_TENANT_ID="<active_directory_tenant_id"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"

Usar DefaultAzureCredential para autenticar ResourceClient

Use a função NewDefaultAzureCredential do módulo Identidade do Azure para autenticar um ResourceClient.

cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
    log.Fatalf("failed to obtain a credential: %v", err)
}

4. Código de exemplo

Use o exemplo de código a seguir para verificar se a entidade de serviço é autenticada no Azure e tem as permissões apropriadas para o grupo de recursos.

  1. Crie um diretório chamado go-on-azure no seu diretório base.

    mkdir ~/go-on-azure
    
  2. Altere para o diretório go-on-azure.

    cd ~/go-on-azure
    
  3. Execute go mod init para criar o arquivo go.mod.

    go mod init go-on-azure
    
  4. Execute go get para instalar os módulos necessários Go.

    go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    go get "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets"
    
  5. Crie um arquivo chamado main.go e adicione o código a seguir.

    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. Crie uma variável de ambiente chamada KEY_VAULT_NAME. Defina o valor da variável de ambiente para o nome do Azure Key Vault criado anteriormente.

    export KEY_VAULT_NAME=<KeyVaultName>
    

    Substitua pelo <KeyVaultName> nome da instância do Cofre de Chaves do Azure.

  7. Execute o comando para criar o go run novo segredo do cofre de chaves.

     go run main.go
    

Próximas etapas