Compartilhar via


Autenticar aplicativos Go para serviços do Azure usando o SDK do Azure para Go

Quando um aplicativo precisa acessar um recurso do Azure, como o Armazenamento do Azure, o Cofre da Chave do Azure ou os serviços de IA do Azure, o aplicativo deve ser autenticado no Azure. Esse requisito é válido para todos os aplicativos, sejam eles implantados no Azure, implantados no local ou em desenvolvimento em uma estação de trabalho de desenvolvedor local. Este artigo descreve as abordagens recomendadas para autenticar um aplicativo no Azure quando você usa o SDK do Azure para Go.

Use a autenticação baseada em token em vez de cadeias de conexão para seus aplicativos quando eles se autenticarem em recursos do Azure. O SDK do Azure para Go fornece mecanismos que dão suporte à autenticação baseada em token. Os aplicativos podem autenticar diretamente nos recursos do Azure, quer o aplicativo esteja em desenvolvimento local, implantado no Azure ou implantado em um servidor local.

O tipo específico de autenticação baseada em token que um aplicativo usa para autenticar nos recursos do Azure depende de onde o aplicativo está sendo executado. Os tipos de autenticação baseada em token são mostrados no diagrama a seguir.

Um diagrama que mostra as estratégias de autenticação baseadas em tokens recomendadas para um aplicativo, dependendo de onde ele está sendo executado.

  • Quando um desenvolvedor está executando um aplicativo durante o desenvolvimento local: O aplicativo se autentica no Azure usando uma entidade de serviço de aplicativo para desenvolvimento local ou as credenciais do Azure do desenvolvedor. Essas opções são discutidas na seção Autenticação durante o desenvolvimento local.
  • Quando um aplicativo é hospedado no Azure: O aplicativo se autentica nos recursos do Azure usando uma identidade gerenciada. Esta opção é discutida na seção Autenticação em ambientes de servidor.
  • Quando uma aplicação é hospedada e implantada localmente: A aplicação autentica-se nos recursos do Azure usando um principal de serviço de aplicação. Esta opção é discutida na seção Autenticação em ambientes de servidor.

DefaultAzureCredential

O tipo DefaultAzureCredential fornecido pelo SDK do Azure permite que as aplicações utilizem diferentes métodos de autenticação, dependendo do ambiente em que são executadas. Dessa forma, os aplicativos podem ser promovidos do desenvolvimento local para ambientes de teste e produção sem alterações de código.

Você configura o método de autenticação apropriado para cada ambiente e DefaultAzureCredential deteta e usa automaticamente esse método de autenticação. É preferível usar DefaultAzureCredential em vez de codificar manualmente lógica condicional ou sinalizadores de recursos para empregar diferentes métodos de autenticação em ambientes distintos.

Os detalhes sobre como usar o tipo DefaultAzureCredential são discutidos na seção Usar DefaultAzureCredential em um aplicativo.

Vantagens da autenticação baseada em tokens

Use a autenticação baseada em token em vez de usar cadeias de conexão ao criar aplicativos para o Azure. A autenticação baseada em token oferece as seguintes vantagens em relação à autenticação com cadeias de conexão:

  • Os métodos de autenticação baseados em tokens descritos neste artigo permitem que você estabeleça as permissões específicas necessárias para o aplicativo no recurso do Azure. Esta prática segue o princípio do menor privilégio. Por outro lado, uma cadeia de conexão concede direitos completos ao recurso do Azure.
  • Qualquer pessoa ou qualquer aplicativo com uma cadeia de conexão pode se conectar a um recurso do Azure, mas os métodos de autenticação baseados em token abrangem o acesso ao recurso apenas para os aplicativos destinados a acessar o recurso.
  • Com uma identidade gerenciada, não há segredo de aplicativo para armazenar. O aplicativo é mais seguro porque não há nenhuma cadeia de conexão ou segredo do aplicativo que possa ser comprometido.
  • O pacote azidentity no SDK do Azure gerencia tokens para você nos bastidores. Os tokens gerenciados tornam o uso da autenticação baseada em tokens tão fácil de usar quanto uma cadeia de conexão.

Limite o uso de cadeias de conexão a aplicativos iniciais de prova de conceito ou protótipos de desenvolvimento que não acessam dados confidenciais ou de produção. Caso contrário, a autenticação baseada em token disponível no SDK do Azure será sempre preferida ao autenticar nos recursos do Azure.

Autenticação em ambientes de servidor

Quando estás a trabalhar num ambiente de servidor, cada aplicação recebe uma identidade de aplicação exclusiva por ambiente onde a aplicação é executada. No Azure, uma identidade de aplicação é representada por uma entidade de serviço . Esse tipo especial de entidade de segurança identifica e autentica aplicativos no Azure. O tipo de entidade de serviço a ser usada para a sua aplicação depende de onde a sua aplicação está a ser executada:

Método de autenticação Descrição
Aplicativos hospedados no Azure As aplicações hospedadas no Azure devem usar uma entidade de serviço com identidade gerida . As identidades gerenciadas são projetadas para representar a identidade de um aplicativo hospedado no Azure e só podem ser usadas com aplicativos hospedados no Azure.

Por exemplo, um aplicativo Web Gin hospedado em Aplicativos de Contêiner do Azure receberia uma identidade gerenciada. A identidade gerenciada atribuída ao aplicativo seria usada para autenticar o aplicativo em outros serviços do Azure.

Os aplicativos em execução no Serviço Kubernetes do Azure (AKS) podem usar uma credencial de identidade de carga de trabalho. Essa credencial é baseada em uma identidade gerenciada que tem uma relação de confiança com uma conta de serviço AKS.

Aplicativos hospedados fora do Azure
(por exemplo, aplicativos locais)
As aplicações hospedadas fora do Azure (por exemplo, aplicações locais) que precisam se conectar aos serviços do Azure devem usar um principal de serviço de aplicação . Uma entidade de serviço de aplicação representa a identidade da aplicação no Azure e é criada através do processo de registo da aplicação.

Por exemplo, considere um Gin aplicativo Web hospedado no local que usa o Armazenamento de Blob do Azure. Você criaria um principal de serviço de aplicação para a aplicação usando o processo de registo da aplicação. Os AZURE_CLIENT_ID, AZURE_TENANT_IDe AZURE_CLIENT_SECRET seriam armazenados como variáveis de ambiente a serem lidos pela aplicação em tempo de execução, permitindo que a aplicação se autentique no Azure usando o principal de serviço da aplicação.

Autenticação durante o desenvolvimento local

Quando um aplicativo é executado na estação de trabalho de um desenvolvedor durante o desenvolvimento local, ele ainda deve se autenticar em qualquer serviço do Azure usado pelo aplicativo. Há duas estratégias principais para autenticar aplicativos no Azure durante o desenvolvimento local:

Método de autenticação Descrição
Crie objetos principais de serviço de aplicativo dedicados para serem usados durante o desenvolvimento local. Nesse método, objetos dedicados de entidade de serviço de aplicativo , específicos de, são configurados usando o processo de registro do aplicativo para uso durante o desenvolvimento local. A identidade da entidade de serviço é então armazenada como variáveis de ambiente a serem acessadas pelo aplicativo quando ele é executado no desenvolvimento local.

Esse método permite que você atribua as permissões de recursos específicas necessárias para o aplicativo aos objetos principais de serviço usados pelos desenvolvedores durante o desenvolvimento local. Essa prática garante que o aplicativo tenha acesso apenas aos recursos específicos de que precisa e replica as permissões que o aplicativo terá na produção.

A desvantagem dessa abordagem é a necessidade de criar objetos de entidade de serviço separados para cada desenvolvedor que trabalha em um aplicativo.

Autentique o aplicativo no Azure usando as credenciais do desenvolvedor durante o desenvolvimento local. Neste método, um programador tem de ter sessão iniciada no Azure a partir da CLI do Azure ou da CLI do Azure Developer na sua estação de trabalho local. Em seguida, o aplicativo pode acessar as credenciais do desenvolvedor do repositório de credenciais e usar essas credenciais para acessar os recursos do Azure a partir do aplicativo.

Esse método tem a vantagem de facilitar a configuração porque um desenvolvedor só precisa entrar em sua conta do Azure por meio de uma das ferramentas de desenvolvedor acima mencionadas. A desvantagem dessa abordagem é que a conta do desenvolvedor provavelmente tem mais permissões do que o exigido pelo aplicativo. Como resultado, o aplicativo não replica com precisão as permissões com as quais será executado em produção.

Usar DefaultAzureCredential em um aplicativo

DefaultAzureCredential é uma sequência opinativa e ordenada de mecanismos para autenticação no Microsoft Entra ID. Cada mecanismo de autenticação é uma classe que implementa a interface TokenCredential e é conhecida como credencial. No tempo de execução, DefaultAzureCredential tenta autenticar usando a primeira credencial. Se essa credencial não conseguir adquirir um token de acesso, a próxima credencial na sequência será tentada, e assim por diante, até que um token de acesso seja obtido com êxito. Dessa forma, seu aplicativo pode usar credenciais diferentes em ambientes diferentes sem escrever código específico do ambiente.

Para usar DefaultAzureCredential em um aplicativo Go, adicione o pacote azidentity ao seu aplicativo.

go get github.com/Azure/azure-sdk-for-go/sdk/azidentity

O exemplo de código a seguir mostra como criar uma instância do cliente SDK do Azure com DefaultAzureCredential. Nesse caso, é o cliente azblob utilizado para aceder ao Armazenamento Blob do Azure.

import (
	"context"

	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

const (
	account       = "https://<replace_with_your_storage_account_name>.blob.core.windows.net/"
	containerName = "sample-container"
	blobName      = "sample-blob"
	sampleFile    = "path/to/sample/file"
)

func main() {
    // create a credential
    cred, err := azidentity.NewDefaultAzureCredential(nil)
    if err != nil {
      // TODO: handle error
    }
    
    // create a client for the specified storage account
    client, err := azblob.NewClient(account, cred, nil)
    if err != nil {
      // TODO: handle error
    }
    
    // TODO: perform some action with the azblob Client
    // _, err = client.DownloadFile(context.TODO(), <containerName>, <blobName>, <target_file>, <DownloadFileOptions>)
}

Quando o código anterior é executado na sua estação de trabalho de desenvolvimento local, o código procura nas variáveis de ambiente um principal de serviço da aplicação ou em ferramentas de desenvolvedor instaladas localmente, como a CLI do Azure, para localizar um conjunto de credenciais de desenvolvedor. Qualquer uma das abordagens pode ser usada para autenticar o aplicativo nos recursos do Azure durante o desenvolvimento local.

Quando implantado no Azure, esse mesmo código também pode autenticar seu aplicativo nos recursos do Azure. DefaultAzureCredential pode recuperar configurações de ambiente e configurações de identidade gerenciada para autenticar nos serviços do Azure automaticamente.