Autenticação do Azure com o módulo de Identidade do Azure para Go
Neste tutorial, o tipo DefaultAzureCredential do módulo Azure Identity for Go é usado para autenticar no Azure. O módulo Identidade do Azure oferece vários tipos de credenciais que se concentram no OAuth com a ID do Microsoft Entra.
DefaultAzureCredential
Simplifica a autenticação combinando tipos de credenciais comumente usados. Ele encadeia tipos de credenciais usados para autenticar aplicativos implantados no Azure com tipos de credenciais usados para autenticar em um ambiente de desenvolvimento.
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. Instalar o módulo Identidade do Azure para o Go
Execute o seguinte comando para baixar o módulo azidentity:
go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity
2. Autenticar-se com o Azure
Use DefaultAzureCredential
para autenticar no Azure com uma das seguintes técnicas:
- Opção 1: definir variáveis de ambiente
- Opção 2: Usar a identidade da carga de trabalho
- Opção 3: Usar uma identidade gerenciada
- Opção 4: Entrar com a CLI do Azure
- Opção 5: Entrar com a CLI do Desenvolvedor do Azure
Para saber mais sobre os diferentes tipos de credenciais, confira tipos de credencial.
Opção 1: definir variáveis de ambiente
O DefaultAzureCredential
usa o tipo EnvironmentCredential
para configurar a autenticação usando variáveis de ambiente que dão suporte a três tipos de autenticação. Escolha entre os tipos de autenticação a seguir e defina as variáveis de ambiente apropriadas.
Entidade de serviço com um segredo
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>"
Entidade de serviço com certificado
Nome da variável | Valor |
---|---|
AZURE_CLIENT_ID |
ID de um aplicativo Microsoft Entra |
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 |
AZURE_CLIENT_CERTIFICATE_PASSWORD |
(opcional) Senha para o arquivo de certificado |
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"
Nome de usuário e senha
Nome da variável | Valor |
---|---|
AZURE_CLIENT_ID |
ID de um aplicativo Microsoft Entra |
AZURE_USERNAME |
Um nome de usuário (geralmente um endereço de email) |
AZURE_PASSWORD |
A senha do usuário |
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_USERNAME="<azure_username>"
export AZURE_PASSWORD="<azure_user_password>"
A configuração é tentada na ordem anterior. Por exemplo, se os valores para um segredo do cliente e um certificado estiverem presentes, o segredo do cliente será usado. Para obter um tutorial completo sobre autenticação com entidades de serviço, consulte Autenticação do SDK do Azure para Go com uma entidade de serviço.
Opção 2: Usar identidade de carga de trabalho
O Microsoft Entra Workload ID permite que pods em um cluster do Kubernetes usem uma identidade do Kubernetes (conta de serviço). Um token do Kubernetes é emitido e a federação OIDC permite que os aplicativos do Kubernetes acessem os recursos do Azure com segurança com a ID do Microsoft Entra.
Se as variáveis de ambiente necessárias para EnvironmentCredential
não estiverem presentes, DefaultAzureCredential
tentará autenticar usando WorkloadIdentityCredential. WorkloadIdentityCredential
tenta ler a configuração da entidade de serviço a partir de variáveis de ambiente definidas pelo webhook Workload Identity.
Opção 3: Usar uma identidade gerenciada
As identidades gerenciadas eliminam a necessidade de os desenvolvedores gerenciarem credenciais. Ao se conectar a recursos que oferecem suporte à autenticação do Microsoft Entra, os aplicativos hospedados no Azure podem usar tokens do Microsoft Entra em vez de credenciais. Não há suporte para identidades gerenciadas no desenvolvimento local.
Se as variáveis de ambiente necessárias para WorkloadIdentityCredential
não estiverem presentes, DefaultAzureCredential
tentará autenticar usando ManagedIdentityCredential.
Se estiver usando uma identidade gerenciada atribuída pelo usuário, execute o seguinte comando para definir a AZURE_CLIENT_ID
variável de ambiente.
export AZURE_CLIENT_ID="<user_assigned_managed_identity_client_id>"
Se a AZURE_CLIENT_ID
variável de ambiente não estiver definida, DefaultAzureCredentials
tentará autenticar usando a identidade gerenciada atribuída pelo sistema se uma estiver habilitada no recurso de hospedagem.
Para obter um tutorial completo sobre autenticação com identidades gerenciadas em aplicativos hospedados no Azure, consulte Autenticação com o SDK do Azure para Go usando uma identidade gerenciada.
Opção 4: Entrar com a CLI do Azure
Para reduzir o atrito no desenvolvimento local, DefaultAzureCredential
pode autenticar como o usuário entrou na CLI do Azure.
Execute o seguinte comando para entrar na CLI do Azure:
az login
Opção 5: Entrar com a CLI do Desenvolvedor do Azure
No desenvolvimento local, se o usuário não estiver conectado à CLI do Azure, DefaultAzureCredential
poderá autenticar como o usuário conectado à CLI do Desenvolvedor do Azure.
Execute o seguinte comando para entrar na CLI do desenvolvedor do Azure:
azd auth login
A autenticação da CLI do Desenvolvedor do Azure não é recomendada para aplicativos em execução no Azure.
3. Usar DefaultAzureCredential para autenticar ResourceClient
Crie um novo módulo Go de exemplo nomeado azure-auth
para testar a autenticação no Azure com DefaultAzureCredential
:
Crie um diretório para testar e executar o código Go de exemplo e, em seguida, altere para esse diretório.
Execute go mod init para criar um módulo:
go mod init azure-auth
Execute vá para baixar, compilar e instalar os módulos necessários do SDK do Azure para Go:
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity" go get "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription"
Crie um arquivo chamado
main.go
e insira o seguinte código:package main import ( "context" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription" ) const subscriptionID = "<subscription ID>" func main() { cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { // TODO: handle error } // Azure SDK Resource Management clients accept the credential as a parameter. // The client will authenticate with the credential as necessary. client, err := armsubscription.NewSubscriptionsClient(cred, nil) if err != nil { // TODO: handle error } _, err = client.Get(context.TODO(), subscriptionID, nil) if err != nil { // TODO: handle error } }
Substitua
<subscription ID>
por sua ID da assinatura.Execute
go run
para compilar e executar o aplicativo:go run .
Observação
Para executar como está em seu sistema local, você precisa entrar no Azure usando a CLI do Azure ou a CLI do Desenvolvedor do Azure.
Autenticar-se no Azure com DefaultAzureCredential
Use o código a seguir em seu aplicativo para autenticar no Azure com o módulo Identidade do Azure usando DefaultAzureCredential
:
// This credential type checks environment variables for configuration.
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
// handle error
}
// Azure Resource Management clients accept the credential as a parameter
client, err := armresources.NewClient("<subscriptionId>", cred, nil)
if err != nil {
// handle error
}
Solução de problemas
Para obter orientação sobre como resolver erros de tipos de credenciais específicos, consulte o guia de solução de problemas.