Partilhar via


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

Neste tutorial, você usa o SDK do Azure para Go para 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, habilitando recursos principais, como autenticação durante o logon e autorização durante o acesso a recursos. Eles removem a necessidade de usar contas pessoais para acessar recursos do Azure. Você pode atribuir a uma entidade de serviço as permissões exatas necessárias para seu aplicativo e desenvolver com base nessas permissões, em vez de usar uma conta pessoal, que pode ter mais privilégios em seu locatário do que o aplicativo exige. Você também pode usar entidades de serviço para aplicativos hospedados localmente que precisam usar recursos do Azure. O módulo Azure SDK for Go Azure Identity fornece uma maneira conveniente de autenticar no Azure com uma entidade de serviço usando variáveis de ambiente e um segredo ou um certificado.

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

Pré-requisitos

  • Subscrição do Azure: se não tem uma subscrição do Azure, crie uma conta gratuita antes de começar.

1. Criar recursos do Azure

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 --enable-rbac-authorization

Substitua <keyVaultName> por um nome globalmente exclusivo.

Anote a id propriedade da saída do az keyvault create comando. Você o usará na próxima seção para definir o escopo da autorização para a entidade de serviço. O id valor tem a seguinte forma: /subscriptions/<subscriptionId>/resourceGroups/go-on-azure/providers/Microsoft.KeyVault/vaults/<keyVaultName>.

2. Criar uma entidade de serviço do Azure

Use uma das seguintes técnicas para criar uma entidade de serviço do Azure e atribuir-lhe a função "Key Vault Secrets Officer" no cofre de chaves:

Para saber mais sobre entidades de serviço do Azure, consulte Objeto principal de serviço.

Atribuindo a função "Key Vault Secrets Officer" à entidade de serviço, autoriza-a a criar, ler, atualizar e excluir segredos no cofre de chaves. Para saber mais sobre funções internas para o Cofre de Chaves do Azure, consulte Fornecer acesso a chaves, certificados e segredos do Cofre de Chaves com um controle de acesso baseado em função do Azure. Para saber mais sobre funções internas no Azure, consulte Funções internas do Azure.

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 e atribuir-lhe a função "Key Vault Secrets Officer" no cofre de chaves.

az ad sp create-for-rbac --name <servicePrincipalName> --role "Key Vault Secrets Officer" --scope <keyVaultId>

Substitua <servicePrincipalName> e <keyVaultId> com os valores apropriados.

Anote as passwordpropriedades , tenante appId da saída. Vai precisar deles na próxima secção.

Após a criação, a senha da entidade de serviço não pode ser recuperada. Se se esquecer da palavra-passe, pode repor as credenciais da entidade de serviço.

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

Execute os comandos a seguir para criar uma entidade de serviço do Azure que usa um certificado e atribuir-lhe a função "Key Vault Secrets Officer" no cofre de chaves.

az ad sp create-for-rbac --name <servicePrincipalName> --create-cert --role "Key Vault Secrets Officer" --scope <keyVaultId>

Substitua <servicePrincipalName> e <keyVaultId> com os valores apropriados.

Anote as fileWithCertAndPrivateKeypropriedades , tenantIde appId da saída. Vai precisar deles na próxima secção.

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

DefaultAzureCredentialUsando o , você pode evitar escrever código específico do ambiente para autenticar no Azure. Com DefaultAzureCredentialo , você pode configurar suas credenciais de entidade de serviço definindo variáveis de ambiente.

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

Para saber mais sobre o , confira a DefaultAzureCredentialautenticação do Azure com o SDK do Azure para Go

Opção 1: Autenticar com um segredo

Defina as seguintes variáveis de ambiente:

Nome da variável Value
AZURE_CLIENT_ID ID do 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 com um certificado

Nome da variável Value
AZURE_CLIENT_ID ID do 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 PEM ou PKCS12, incluindo chave privada. Se você seguiu as etapas para a CLI do Azure, o arquivo não está protegido por senha. Se você seguiu as etapas para o Azure PowerShell, o arquivo está protegido por senha e você também precisará definir a AZURE_CLIENT_CERTIFICATE_PASSWORD variável de ambiente.
AZURE_CLIENT_CERTIFICATE_PASSWORD A senha que você inseriu quando criou a entidade de serviço. Apenas necessário se você seguiu as etapas para o 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>"

Usar DefaultAzureCredential para autenticar um cliente de recurso

Depois de definir as variáveis de ambiente, você pode usar DefaultAzureCredential no módulo Identidade do Azure para autenticar um cliente de recurso. O código a seguir mostra como obter uma instância do DefaultAzureCredential.

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

4. Crie um segredo do cofre de chaves com o Go

Use o exemplo de código a seguir para verificar se sua entidade de serviço se autentica no Azure e tem as permissões apropriadas para o cofre de chaves.

  1. Crie um novo diretório chamado go-on-azure em seu diretório pessoal.

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

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

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

    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. 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/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. Crie uma variável de ambiente chamada KEY_VAULT_NAME. Defina o valor da variável de ambiente como o nome do Cofre de Chaves do Azure criado anteriormente.

    export KEY_VAULT_NAME=<keyVaultName>
    

    Substitua <keyVaultName> pelo nome da sua instância do Azure Key Vault.

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

     go run main.go
    

    No sucesso, a saída é semelhante à seguinte:

    Name: https://<keyVaultName>.vault.azure.net/secrets/ExamplePassword/1e697f71d0014761a65641226f2f057b, Value: hVFkk965BuUv
    

5. Limpar os recursos

Se você não quiser mais usar os recursos do Azure criados neste artigo, é uma boa prática excluí-los. A eliminação de recursos não utilizados ajuda-o a evitar incorrer em cobranças contínuas e mantém a sua subscrição organizada. A maneira mais fácil de excluir os recursos usados neste tutorial é excluir o grupo de recursos.

az group delete --name go-on-azure --yes

O --yes argumento diz ao comando para não pedir confirmação.

O comando anterior executa uma exclusão suave no cofre de chaves no grupo de recursos. Para removê-lo permanentemente da sua assinatura, digite o seguinte comando:

az keyvault purge --name <keyVaultName> --no-wait

Substitua <keyVaultName> pelo nome do cofre de chaves.

Finalmente, você deve remover o registro do aplicativo e a entidade de serviço.

az ad app delete --id <servicePrincipalAppId>

Substitua <servicePrincipalAppId> pelo ID do aplicativo da sua entidade de serviço.

Próximos passos