Partilhar via


Autenticação do Azure com o módulo Azure Identity for 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 o Microsoft Entra ID.

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

  • 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

1. Instale o módulo Azure Identity para 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 com o Azure

Use DefaultAzureCredential para autenticar no Azure com uma das seguintes técnicas:

Para saber mais sobre os diferentes tipos de credenciais, consulte Tipos de credenciais.

Opção 1: Definir variáveis de ambiente

O DefaultAzureCredential usa o tipo para configurar a EnvironmentCredential autenticação usando variáveis de ambiente que oferece suporte a três tipos de autenticação. Escolha entre os seguintes tipos de autenticação e defina as variáveis de ambiente apropriadas.

Entidade de serviço com um segredo

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>"

Entidade de serviço com certificado

Nome da variável Value
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 (facultativo) 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 utilizador e palavra-passe

Nome da variável Value
AZURE_CLIENT_ID ID de um aplicativo Microsoft Entra
AZURE_USERNAME Um nome de usuário (geralmente um endereço de e-mail)
AZURE_PASSWORD A palavra-passe desse utilizador
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 de um segredo do cliente e de 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 Kubernetes usem uma identidade Kubernetes (conta de serviço). Um token Kubernetes é emitido e a federação OIDC permite que os aplicativos Kubernetes acessem os recursos do Azure com segurança com a ID do Microsoft Entra.

Se as variáveis de ambiente necessárias não EnvironmentCredential estiverem presentes, DefaultAzureCredential tente autenticar usando WorkloadIdentityCredential. WorkloadIdentityCredential tenta ler a configuração da entidade de serviço a partir de variáveis de ambiente definidas pelo webhook Identidade da Carga de Trabalho.

Opção 3: Usar uma identidade gerenciada

As identidades geridas eliminam a necessidade de os programadores gerirem as credenciais. Ao conectar-se a recursos que dão suporte à autenticação do Microsoft Entra, os aplicativos hospedados no Azure podem usar tokens do Microsoft Entra em vez de credenciais. As identidades gerenciadas não são suportadas no desenvolvimento local.

Se as variáveis de ambiente necessárias não WorkloadIdentityCredential estiverem presentes, DefaultAzureCredential tente autenticar usando ManagedIdentityCredential.

Se estiver usando uma identidade gerenciada atribuída pelo usuário, execute o seguinte comando para definir a variável de AZURE_CLIENT_ID ambiente.

export AZURE_CLIENT_ID="<user_assigned_managed_identity_client_id>"

Se a AZURE_CLIENT_ID variável de ambiente não estiver definida, tentará autenticar usando a identidade gerenciada atribuída ao sistema, DefaultAzureCredentials 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, poderá autenticar-se DefaultAzureCredential como o usuário conectado à CLI do Desenvolvedor do Azure.

Execute o seguinte comando para entrar na CLI do Azure Developer:

azd auth login

A autenticação da CLI do Desenvolvedor do Azure não é recomendada para aplicativos em execução no Azure.

3. Use DefaultAzureCredential para autenticar ResourceClient

Crie um novo módulo Go de exemplo nomeado azure-auth para testar a autenticação no Azure com DefaultAzureCredential:

  1. Crie um diretório para testar e executar o código Go de exemplo e, em seguida, altere para esse diretório.

  2. Execute go mod init para criar um módulo:

    go mod init azure-auth
    
  3. Execute go get 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"
    
  4. 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> pelo seu ID de subscrição.

  5. Execute go run para compilar e executar o aplicativo:

    go run .
    

    Nota

    Para executar como está em seu sistema local, você precisa entrar no Azure usando a CLI do Azure ou a CLI do Azure Developer.

Autenticar no Azure com DefaultAzureCredential

Use o seguinte código 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
}

Resoluçã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.

Próximos passos