Autenticar aplicativos Python nos serviços do Azure usando o SDK do Azure para Python

Quando um aplicativo precisa acessar um recurso do Azure, como o Armazenamento do Azure, o Cofre de Chaves do Azure ou os serviços de IA do Azure, o aplicativo deve ser autenticado no Azure. Esse requisito é verdadeiro 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 Python.

Use a autenticação baseada em token em vez de cadeias de conexão para seus aplicativos quando eles se autenticarem nos recursos do Azure. O SDK do Azure para Python fornece classes que oferecem suporte à autenticação baseada em token. Os aplicativos podem se autenticar perfeitamente nos recursos do Azure, independentemente de o aplicativo estar 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.

A diagram that shows the recommended token-based authentication strategies for an app depending on where it's running.

  • 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. Essa opção é discutida na seção Autenticação em ambientes de servidor.
  • Quando um aplicativo é hospedado e implantado local: o aplicativo se autentica nos recursos do Azure usando uma entidade de serviço de aplicativo. Essa opção é discutida na seção Autenticação em ambientes de servidor.

DefaultAzureCredential

A classe DefaultAzureCredential fornecida pelo SDK do Azure permite que os aplicativos usem métodos de autenticação diferentes, dependendo do ambiente em que são executados. 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 detecta DefaultAzureCredential e usa automaticamente esse método de autenticação. O uso de é preferível à codificação manual de lógica condicional ou sinalizadores de recurso para usar métodos de DefaultAzureCredential autenticação diferentes em ambientes diferentes.

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

Vantagens da autenticação baseada em token

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 token descritos neste artigo permitem que você estabeleça as permissões específicas necessárias para o aplicativo no recurso do Azure. Essa 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á cadeia de conexão ou segredo de aplicativo que possa ser comprometido.
  • O pacote azure.identity no Azure SDK gerencia tokens para você nos bastidores. Os tokens gerenciados tornam o uso da autenticação baseada em token tão fácil de usar quanto uma cadeia de conexão.

Limite o uso de cadeias de conexão a aplicativos de prova de conceito iniciais ou protótipos de desenvolvimento que não acessam dados confidenciais ou de produção. Caso contrário, as classes de autenticação baseadas em token disponíveis no SDK do Azure serão sempre preferidas quando estiverem autenticando nos recursos do Azure.

Autenticação em ambientes de servidor

Quando você está hospedando em um ambiente de servidor, cada aplicativo recebe uma identidade de aplicativo exclusiva por ambiente em que o aplicativo é executado. No Azure, uma identidade de aplicativo é 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 usado para seu aplicativo depende de onde seu aplicativo está sendo executado:

Método de autenticação Descrição
Aplicativos hospedados no Azure Os aplicativos hospedados no Azure devem usar uma entidade de serviço de identidade gerenciada. 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 Django hospedado no Serviço de Aplicativo 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 de 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)
Os aplicativos hospedados fora do Azure (por exemplo, aplicativos locais) que precisam se conectar aos serviços do Azure devem usar uma entidade de serviço de aplicativo. Uma entidade de serviço de aplicativo representa a identidade do aplicativo no Azure e é criada por meio do processo de registro de aplicativo.

Por exemplo, considere um aplicativo Web Django hospedado no local que usa o Armazenamento de Blobs do Azure. Você criaria uma entidade de serviço de aplicativo para o aplicativo usando o processo de registro do aplicativo. O AZURE_CLIENT_ID, AZURE_TENANT_IDe AZURE_CLIENT_SECRET todos seriam armazenados como variáveis de ambiente a serem lidas pelo aplicativo em tempo de execução e permitir que o aplicativo se autentique no Azure usando a entidade de serviço do aplicativo.

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 de entidade de serviço de aplicativo dedicados a serem usados durante o desenvolvimento local. Nesse método, os objetos de entidade de serviço de aplicativo dedicados são configurados usando o processo de registro de aplicativo para uso durante o desenvolvimento local. A identidade da entidade de serviço é armazenada como variáveis de ambiente a serem acessadas pelo aplicativo quando ele é executado no desenvolvimento local.

Esse método permite atribuir as permissões de recurso específicas necessárias pelo aplicativo aos objetos da entidade 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á em 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. Nesse método, um desenvolvedor deve estar conectado ao Azure a partir da CLI do Azure, do Azure PowerShell ou da CLI do Desenvolvedor do Azure em sua estação de trabalho local. Em seguida, o aplicativo pode acessar as credenciais do desenvolvedor no repositório de credenciais e usar essas credenciais para acessar os recursos do Azure do aplicativo.

Esse método tem a vantagem de uma configuração mais fácil porque um desenvolvedor só precisa entrar em sua conta do Azure por meio de uma das ferramentas de desenvolvedor mencionadas acima. A desvantagem dessa abordagem é que provavelmente a conta do desenvolvedor 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

Para usar DefaultAzureCredential em um aplicativo Python, adicione o pacote azure.identity ao seu aplicativo.

pip install azure-identity

O exemplo de código a seguir mostra como instanciar um DefaultAzureCredential objeto e usá-lo com uma classe de cliente do SDK do Azure. Nesse caso, é um BlobServiceClient objeto usado para acessar o Armazenamento de Blobs do Azure.

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

# Acquire a credential object
credential = DefaultAzureCredential()

blob_service_client = BlobServiceClient(
        account_url="https://<my_account_name>.blob.core.windows.net",
        credential=credential)

O DefaultAzureCredential objeto detecta automaticamente o mecanismo de autenticação configurado para o aplicativo e obtém os tokens necessários para autenticar o aplicativo no Azure. Se um aplicativo fizer uso de mais de um cliente SDK, você poderá usar o mesmo objeto de credencial com cada objeto de cliente SDK.

Sequência de métodos de autenticação ao usar DefaultAzureCredential

Internamente, DefaultAzureCredential implementa uma cadeia de provedores de credenciais para autenticar aplicativos em recursos do Azure. Cada provedor de credenciais pode detectar se credenciais desse tipo estão configuradas para o aplicativo. O DefaultAzureCredential objeto verifica sequencialmente cada provedor em ordem e usa as credenciais do primeiro provedor que tem credenciais configuradas.

A ordem em que DefaultAzureCredential procura credenciais é mostrada no diagrama e tabela a seguir:

A diagram that shows the sequence in which DefaultAzureCredential checks to see what authentication source is configured for an application.

Tipo de credencial Descrição
Ambiente O DefaultAzureCredential objeto lê um conjunto de variáveis de ambiente para determinar se uma entidade de serviço do aplicativo (usuário do aplicativo) foi definida para o aplicativo. Nesse caso, DefaultAzureCredential usa esses valores para autenticar o aplicativo no Azure.

Esse método é usado com mais frequência em ambientes de servidor, mas você também pode usá-lo ao desenvolver localmente.
Identidade da carga de trabalho Se o aplicativo for implantado no Serviço de Kubernetes do Azure (AKS) com identidade gerenciada habilitada, DefaultAzureCredential autenticará o aplicativo no Azure usando essa identidade gerenciada. A identidade de carga de trabalho representa uma relação de confiança entre uma identidade gerenciada atribuída pelo usuário e uma conta de serviço AKS. A autenticação usando uma identidade de carga de trabalho é discutida no artigo do AKS Usar a ID de Carga de Trabalho do Microsoft Entra com o Serviço de Kubernetes do Azure.
Identidade gerenciada Se o aplicativo for implantado em um host do Azure com identidade gerenciada habilitada, DefaultAzureCredential autenticará o aplicativo no Azure usando essa identidade gerenciada. A autenticação usando uma identidade gerenciada é discutida na seção Autenticação em ambientes de servidor.

Esse método só está disponível quando um aplicativo é hospedado no Azure usando um serviço como o Serviço de Aplicativo do Azure, o Azure Functions ou as Máquinas Virtuais do Azure.
CLI do Azure Se você se autenticou no Azure usando o az login comando na CLI do Azure, DefaultAzureCredential autentica o aplicativo no Azure usando essa mesma conta.
PowerShell do Azure Se você se autenticou no Azure usando o Connect-AzAccount cmdlet do Azure PowerShell, DefaultAzureCredential autentica o aplicativo no Azure usando essa mesma conta.
CLI do Desenvolvedor do Azure Se você se autenticou no Azure usando o azd auth login comando na CLI do Desenvolvedor do Azure, DefaultAzureCredential autentica o aplicativo no Azure usando essa mesma conta.
Interativo Se habilitado, DefaultAzureCredential autentica você interativamente por meio do navegador padrão do sistema atual. Por padrão, essa opção está desabilitada.

Observação

Devido a um problema conhecido, VisualStudioCodeCredential foi removido da cadeia de DefaultAzureCredential tokens. Quando o problema for resolvido em uma versão futura, essa alteração será revertida. Para obter mais informações, consulte Biblioteca de cliente do Azure Identity para Python.