Autenticação do SDK do Azure para linguagem 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 no local 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 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
Se você quiser usar a CLI do Azure para executar as etapas neste artigo:
Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, confira Início Rápido para Bash no Azure Cloud Shell.
Se preferir executar os comandos de referência da CLI localmente, instale a CLI do Azure. Para execuções no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para obter mais informações, confira Como executar a CLI do Azure em um contêiner do Docker.
Se estiver usando uma instalação local, entre com a CLI do Azure usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas no terminal. Para ver outras opções de entrada, confira Conectar-se com a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar extensões com a CLI do Azure.
Execute az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para fazer a atualização para a versão mais recente, execute az upgrade.
Se você quiser usar o Azure PowerShell para executar as etapas neste artigo:
- Se você optar por usar o Azure PowerShell localmente:
- Instale a versão mais recente do módulo do Az PowerShell.
- Conecte-se à sua conta do Azure usando o cmdlet Connect-AzAccount.
- Se você optar por usar o Azure Cloud Shell:
- Confira Visão geral do Azure Cloud Shell para obter mais informações.
- Se você optar por usar o Azure PowerShell localmente:
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 valor globalmente único.
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:
- Opção 1: criar uma entidade de serviço do Azure com um segredo
- Opção 2: criar uma entidade de serviço do Azure com um certificado
Para saber mais sobre entidades de serviço do Azure, confira Objeto de entidade de serviço.
Atribuir 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>
pelos valores apropriados.
Anote as password
propriedades , tenant
e appId
da saída. Você precisa deles na próxima seção.
Após a criação, a senha da entidade de serviço não pode ser recuperada. Se você esquecer a senha, poderá redefinir 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 a ela a função "Oficial de Segredos do Cofre de Chaves" 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>
pelos valores apropriados.
Anote as fileWithCertAndPrivateKey
propriedades , tenantId
e appId
da saída. Você precisa deles na próxima seção.
3. Autenticar-se no Azure com uma entidade de serviço
DefaultAzureCredential
Usando o , você pode evitar escrever código específico do ambiente para autenticar no Azure. Com DefaultAzureCredential
o , 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 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 PEM ou PKCS12, incluindo chave privada. Se você seguiu as etapas da CLI do Azure, o arquivo não está protegido por senha. Se você seguiu as etapas do 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ê digitou quando criou a entidade de serviço. Somente necessário se você seguiu as etapas do 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 recursos
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. Criar um segredo do cofre de chaves com a linguagem 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.
Crie um diretório chamado
go-on-azure
no seu diretório base.mkdir ~/go-on-azure
Altere para o diretório
go-on-azure
.cd ~/go-on-azure
Execute
go mod init
para criar o arquivogo.mod
.go mod init go-on-azure
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/security/keyvault/azsecrets"
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") }
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.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 exclusão de recursos não utilizados ajuda a evitar cobranças contínuas e mantém sua assinatura 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>
pela ID do aplicativo da entidade de serviço.