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:
- 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.
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.
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/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/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") }
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 comando para criar o
go run
novo segredo do cofre de chaves.go run main.go
Próximas etapas
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de