Partilhar via


Autenticar aplicativos Go hospedados no Azure para recursos do Azure usando uma identidade gerenciada atribuída pelo usuário

A abordagem recomendada para autenticar um aplicativo hospedado no Azure em outros recursos do Azure é usar uma identidade gerenciada. Essa abordagem é suportada para a maioria dos serviços do Azure, incluindo aplicativos hospedados no Serviço de Aplicativo do Azure, Aplicativos de Contêiner do Azure e Máquinas Virtuais do Azure. Descubra mais sobre diferentes técnicas e abordagens de autenticação na página de visão geral da autenticação . Nas seções a seguir, você aprenderá:

  • Conceitos essenciais de identidade gerenciada
  • Como criar uma identidade gerenciada atribuída pelo usuário para seu aplicativo
  • Como atribuir funções à identidade gerenciada atribuída pelo usuário
  • Como autenticar usando a identidade gerenciada atribuída pelo usuário a partir do código do seu aplicativo

Conceitos essenciais de identidade gerenciada

Uma identidade gerenciada permite que seu aplicativo se conecte com segurança a outros recursos do Azure sem o uso de chaves secretas ou outros segredos de aplicativo. Internamente, o Azure rastreia a identidade e os recursos aos quais ele pode se conectar. O Azure usa essas informações para obter automaticamente tokens do Microsoft Entra para o aplicativo para permitir que ele se conecte a outros recursos do Azure.

Há dois tipos de identidades gerenciadas a serem consideradas ao configurar seu aplicativo hospedado:

  • As identidades gerenciadas atribuídas ao sistema são habilitadas diretamente em um recurso do Azure e vinculadas ao seu ciclo de vida. Quando o recurso é excluído, o Azure exclui automaticamente a identidade para você. As identidades atribuídas pelo sistema fornecem uma abordagem minimalista para o uso de identidades gerenciadas.
  • As identidades gerenciadas atribuídas pelo usuário são criadas como recursos autônomos do Azure e oferecem maior flexibilidade e recursos. Eles são ideais para soluções que envolvem vários recursos do Azure que precisam compartilhar a mesma identidade e permissões. Por exemplo, se várias máquinas virtuais precisarem acessar o mesmo conjunto de recursos do Azure, uma identidade gerenciada atribuída pelo usuário fornecerá reutilização e gerenciamento otimizado.

Sugestão

Saiba mais sobre como selecionar e gerenciar identidades gerenciadas atribuídas pelo sistema e pelo usuário no artigo Recomendações de práticas recomendadas de identidade gerenciada .

As seções a seguir descrevem as etapas para habilitar e usar uma identidade gerenciada atribuída pelo usuário para um aplicativo hospedado no Azure. Se você precisar usar uma identidade gerenciada atribuída pelo sistema, visite o artigo Identidades gerenciadas atribuídas pelo sistema para obter mais informações.

Criar uma identidade gerenciada atribuída pelo usuário

As identidades gerenciadas atribuídas pelo usuário são criadas como recursos autônomos em sua assinatura do Azure usando o portal do Azure ou a CLI do Azure. Os comandos da CLI do Azure podem ser executados no Azure Cloud Shell ou em uma estação de trabalho com a CLI do Azure instalada.

  1. No portal do Azure, insira Identidades gerenciadas na barra de pesquisa principal e selecione o resultado correspondente na seção Serviços .

  2. Na página Identidades Gerenciadas , selecione + Criar.

    Uma captura de tela mostrando a página para gerenciar identidades gerenciadas atribuídas pelo usuário.

  3. Na página Criar Identidade Gerenciada Atribuída ao Usuário , selecione uma assinatura, um grupo de recursos e uma região para a identidade gerenciada atribuída pelo usuário e forneça um nome.

  4. Selecione Rever + criar para rever e validar as suas entradas.

    Uma captura de tela mostrando o formulário para criar uma identidade gerenciada atribuída pelo usuário.

  5. Selecione Criar para criar a identidade gerenciada atribuída pelo usuário.

  6. Depois que a identidade for criada, selecione Ir para o recurso.

  7. Na página Visão geral da nova identidade, copie o valor da ID do Cliente para usar mais tarde ao configurar o código do aplicativo.

Atribuir a identidade gerenciada ao seu aplicativo

Uma identidade gerenciada atribuída pelo usuário pode ser associada a um ou mais recursos do Azure. Todos os recursos que usam essa identidade obtêm as permissões aplicadas por meio das funções da identidade.

  1. No portal do Azure, navegue até o recurso que hospeda o código do seu aplicativo, como um Serviço de Aplicativo do Azure ou uma instância do Aplicativo de Contêiner do Azure.

  2. Na página Visão geral do recurso, expanda Configurações e selecione Identidade na navegação.

  3. Na página Identidade, alterne para o separador Atribuído ao usuário.

  4. Selecione + Adicionar para abrir o painel Adicionar identidade gerenciada atribuída ao usuário .

  5. No painel Adicionar identidade gerenciada atribuída ao usuário , use a lista suspensa Assinatura para filtrar os resultados da pesquisa para suas identidades. Use a caixa de pesquisa Identidades gerenciadas atribuídas pelo usuário para localizar a identidade gerenciada atribuída pelo usuário que você habilitou para o recurso do Azure que hospeda seu aplicativo.

  6. Selecione a identidade e escolha Adicionar na parte inferior do painel para continuar.

    Uma captura de tela mostrando como associar uma identidade gerenciada atribuída pelo usuário a um aplicativo.

Atribuir funções à identidade gerenciada

Em seguida, determine quais funções seu aplicativo precisa e atribua essas funções à identidade gerenciada. Você pode atribuir funções a uma identidade gerenciada nos seguintes escopos:

  • Recurso: as funções atribuídas aplicam-se apenas a esse recurso específico.
  • Grupo de recursos: as funções atribuídas aplicam-se a todos os recursos contidos no grupo de recursos.
  • Assinatura: as funções atribuídas se aplicam a todos os recursos contidos na assinatura.

O exemplo a seguir mostra como atribuir funções no escopo do grupo de recursos, já que muitos aplicativos gerenciam todos os seus recursos relacionados do Azure usando um único grupo de recursos.

  1. Navegue até a página Visão geral do grupo de recursos que contém o aplicativo com a identidade gerenciada atribuída pelo usuário.

  2. Selecione Controle de acesso (IAM) na navegação à esquerda.

  3. Na página Controle de acesso (IAM), selecione + Adicionar no menu superior e escolha Adicionar atribuição de função para navegar até a página Adicionar atribuição de função .

    Uma captura de tela mostrando como acessar a página de atribuição de função de identidade.

  4. A página Adicionar atribuição de função apresenta um fluxo de trabalho com guias de várias etapas para atribuir funções a identidades. Na guia Função inicial, use a caixa de pesquisa na parte superior para localizar a função que você deseja atribuir à identidade.

  5. Selecione a função nos resultados e, em seguida, escolha Avançar para ir para a guia Membros .

  6. Para a opção Atribuir acesso a , selecione Identidade gerenciada.

  7. Para a opção Membros , escolha + Selecionar membros para abrir o painel Selecionar identidades gerenciadas .

  8. No painel Selecionar identidades gerenciadas , use os menus suspensos Assinatura e Identidade gerenciada para filtrar os resultados da pesquisa para suas identidades. Use a caixa de pesquisa Selecionar para localizar a identidade gerenciada atribuída pelo usuário que você habilitou para o recurso do Azure que hospeda seu aplicativo.

    Uma captura de tela mostrando o processo de atribuição de identidade gerenciada.

  9. Selecione a identidade e escolha Selecionar na parte inferior do painel para continuar.

  10. Selecione Rever + atribuir na parte inferior da página.

  11. Na guia final Revisão + atribuir , selecione Revisão + atribuir para concluir o fluxo de trabalho.

Autenticar nos serviços do Azure a partir da sua aplicação

O módulo azidentity fornece várias credenciais - implementações do TokenCredential adaptadas para suportar vários cenários e fluxos de autenticação do Microsoft Entra. Como a identidade gerenciada não está disponível ao ser executada localmente, as etapas à frente demonstram qual credencial usar em qual cenário:

  • Ambiente de desenvolvimento local: somente durante o desenvolvimento local, use DefaultAzureCredential para uma cadeia de credenciais opinativa e pré-configurada. DefaultAzureCredential descobre credenciais de usuário de suas ferramentas de desenvolvimento locais, como a CLI do Azure. Ele também oferece flexibilidade e conveniência para tentativas, tempos de espera para respostas e suporte para várias opções de autenticação. Visite o artigo Autenticar nos serviços do Azure durante o desenvolvimento local para saber mais.
  • Aplicativos hospedados no Azure: quando seu aplicativo estiver sendo executado no Azure, use ManagedIdentityCredential para descobrir com segurança a identidade gerenciada configurada para seu aplicativo. Especificar esse tipo exato de credencial evita que outras credenciais disponíveis sejam coletadas inesperadamente.

Implementar o código

Adicione o módulo azidentity .

Em um terminal de sua escolha, navegue até o diretório do projeto de aplicativo e execute os seguintes comandos:

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

Os serviços do Azure são acessados usando clientes especializados das várias bibliotecas de cliente do SDK do Azure. Para qualquer código Go que instancie um cliente do SDK do Azure em seu aplicativo, você precisa:

  1. Importe o pacote azidentity.
  2. Crie uma instância do tipo DefaultAzureCredential.
  3. Passe a instância de tipo DefaultAzureCredential para o construtor do cliente do SDK do Azure.
  4. Defina a variável de ambiente AZURE_CLIENT_ID para o ID do cliente da sua identidade atribuída pelo utilizador
  5. Defina a variável de ambiente AZURE_TOKEN_CREDENTIALS para ManagedIdentityCredential para garantir que DefaultAzureCredential utilize apenas a credencial de identidade gerida. Esta prática torna a autenticação mais previsível e mais fácil de depurar quando implementada no Azure. Para mais informações, consulte Usar uma credencial específica.

Um exemplo dessas etapas é mostrado no segmento de código a seguir com um cliente de Blob de Armazenamento 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>)
}

Conforme discutido no artigo de visão geral da autenticação do SDK do Azure para Go , DefaultAzureCredential dá suporte a vários métodos de autenticação e determina o método de autenticação que está sendo usado em tempo de execução. O benefício dessa abordagem é que seu aplicativo pode usar diferentes métodos de autenticação em ambientes diferentes sem implementar código específico do ambiente. Quando o código anterior é executado na sua estação de trabalho durante o desenvolvimento local, DefaultAzureCredential usa um principal de serviço da aplicação, conforme determinado pelas configurações do ambiente, ou credenciais de ferramenta de desenvolvedor para autenticar com outros recursos do Azure. Assim, o mesmo código pode ser usado para autenticar seu aplicativo nos recursos do Azure durante o desenvolvimento local e quando implantado no Azure.

Importante

DefaultAzureCredential simplifica a autenticação ao desenvolver aplicativos que implantam no Azure combinando credenciais usadas em ambientes de hospedagem do Azure e credenciais usadas no desenvolvimento local. Na produção, é melhor usar um tipo de credencial específico para que a autenticação seja mais previsível e fácil de depurar.

Uma alternativa para DefaultAzureCredential é usar ManagedIdentityCredential. As etapas para usar ManagedIdentityCredential são as mesmas que para usar o DefaultAzureCredential tipo.

Um exemplo dessas etapas é mostrado no segmento de código a seguir com um cliente de Blob de Armazenamento do Azure.

import (
	"context"

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

const (
	// Replace placeholder text with your storage account name
	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
	clientID := azidentity.ClientID("abcd1234-...")
	opts := azidentity.ManagedIdentityCredentialOptions{ID: clientID}
	cred, err := azidentity.NewManagedIdentityCredential(&opts)
	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>)
}