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.
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, consulte Guia de início rápido para Bash no Azure Cloud Shell.
Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.
Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar com a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.
Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando 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 Az PowerShell.
- Conecte-se à sua conta do Azure usando o cmdlet Connect-AzAccount .
- Se você optar por usar o Azure Cloud Shell:
- Consulte 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 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:
- 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, 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 password
propriedades , tenant
e 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 fileWithCertAndPrivateKey
propriedades , tenantId
e appId
da saída. Vai precisar deles na próxima secção.
3. Autenticar 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 da entidade de serviço:
Para saber mais sobre o , confira a DefaultAzureCredential
autenticaçã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.
Crie um novo diretório chamado
go-on-azure
em seu diretório pessoal.mkdir ~/go-on-azure
Mude para o
go-on-azure
diretório.cd ~/go-on-azure
Execute
go mod init
para criar ogo.mod
arquivo.go mod init go-on-azure
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"
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 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.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
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários