Compartilhar via


Autenticar aplicativos Python para serviços do Azure durante o desenvolvimento local usando contas de desenvolvedor

Ao desenvolver aplicativos de nuvem, os desenvolvedores normalmente criam, testam e depuram seu código localmente antes de implantá-lo no Azure. No entanto, mesmo durante o desenvolvimento local, o aplicativo precisa se autenticar com todos os serviços do Azure com os quais interage, como Key Vault, Armazenamento ou bancos de dados.

Este artigo mostra como configurar seu aplicativo para usar as credenciais do Azure do desenvolvedor para autenticação durante o desenvolvimento local. Essa abordagem permite uma experiência de desenvolvimento perfeita e segura sem inserir segredos ou escrever lógica específica do ambiente.

Visão geral da autenticação de desenvolvimento local usando contas de desenvolvedor

Ao desenvolver um aplicativo que usa a biblioteca de Identidade do Azure para Python, você pode se autenticar nos serviços do Azure durante o desenvolvimento local usando a conta do Azure do desenvolvedor. Essa abordagem geralmente é a maneira mais simples de se autenticar nos serviços do Azure durante o desenvolvimento local, pois não requer a criação e o gerenciamento de segredos ou entidades de serviço.

Um diagrama mostrando como um aplicativo Python durante o desenvolvimento local usa as credenciais do desenvolvedor para se conectar ao Azure obtendo essas credenciais de ferramentas de desenvolvimento instaladas localmente.

Para permitir que um aplicativo se autentique no Azure durante o desenvolvimento local usando as próprias credenciais do Azure do desenvolvedor, o desenvolvedor deve primeiro entrar usando uma das ferramentas de linha de comando com suporte:

  • CLI do Azure (az login)
  • CLI do Desenvolvedor do Azure (azd login)
  • Azure PowerShell (Connect-AzAccount)

Depois de conectado, a biblioteca de Identidade do Azure para Python pode detectar automaticamente a sessão ativa e recuperar os tokens necessários do cache de credenciais. Essa funcionalidade permite que o aplicativo se autentique nos serviços do Azure como o usuário conectado, sem exigir nenhuma configuração adicional ou segredos codificados.

Esse comportamento é habilitado ao usar DefaultAzureCredential, o que retorna de forma transparente às credenciais baseadas em CLI em ambientes locais.

Usar as credenciais do Azure assinadas por um desenvolvedor é a configuração mais fácil para o desenvolvimento local. Ele aproveita a conta existente do Azure de cada membro da equipe, permitindo o acesso contínuo aos serviços do Azure sem a necessidade de configuração adicional.

No entanto, as contas de desenvolvedor normalmente têm permissões mais amplas do que o aplicativo deve ter em produção. Essas permissões mais amplas podem levar a inconsistências em testes ou permitir operações inadvertidamente que o aplicativo não estaria autorizado a executar em um ambiente de produção. Para espelhar de perto as permissões de produção e melhorar a postura de segurança, você pode criar entidades de serviço específicas do aplicativo para desenvolvimento local. Estas identidades:

  • Pode ser atribuído apenas às funções e permissões de que o aplicativo precisa
  • Apoiar o princípio do privilégio mínimo
  • Oferecer testes consistentes de comportamento relacionado ao acesso em ambientes

Os desenvolvedores podem configurar o ambiente local para usar o principal de serviço por meio de variáveis de ambiente, e DefaultAzureCredential o detecta automaticamente. Para obter mais informações, consulte o artigo Autenticar aplicativos Python nos serviços do Azure durante o desenvolvimento local usando entidades de serviço.

1 – Criar grupo de segurança do Microsoft Entra para desenvolvimento local

Na maioria dos cenários de desenvolvimento, vários desenvolvedores contribuem para o mesmo aplicativo. Para simplificar o controle de acesso e garantir permissões consistentes em toda a equipe, recomendamos que você primeiro crie um grupo de segurança do Microsoft Entra especificamente para as necessidades de desenvolvimento local do aplicativo.

Atribuir funções do Azure no nível do grupo, em vez de usuários individuais, oferece vários benefícios importantes:

  • Atribuições de função consistentes

    Todos os desenvolvedores do grupo herdam automaticamente as mesmas funções e permissões, garantindo um ambiente de desenvolvimento uniforme.

  • Gerenciamento simplificado de funções

    Quando o aplicativo requer uma nova função, você só precisa adicioná-la uma vez ao grupo. Você não precisa atualizar permissões de usuário individuais.

  • Integração fácil

    Novos desenvolvedores podem receber as permissões necessárias simplesmente adicionando-as ao grupo. Nenhuma atribuição de função manual é necessária.

Se sua organização já tiver um grupo de segurança do Microsoft Entra adequado para a equipe de desenvolvimento, você poderá reutilizá-lo. Caso contrário, você poderá criar um novo grupo especificamente para o aplicativo.

Para criar um grupo de segurança no Microsoft Entra ID, use o comando az ad group createe CLI do Azure.

Esse comando requer os seguintes parâmetros:

--display-name: um nome amigável para o grupo

--mail-nickname: um identificador exclusivo usado para email e referência interna

Recomendamos que você baseie o nome do grupo no nome do aplicativo e inclua um sufixo como -local-dev para indicar claramente sua finalidade.

#!/bin/bash
az ad group create \
    --display-name MyDisplay \
    --mail-nickname MyDisplay  \
    --description "<group-description>"
# PowerShell syntax
az ad group create `
    --display-name MyDisplay `
    --mail-nickname MyDisplay `
    --description "<group-description>"

Depois de executar o az ad group create comando, copie o valor da id propriedade da saída do comando. Você precisa do identificador Object ID do grupo de segurança do Microsoft Entra para atribuir funções nas etapas posteriores deste artigo. Para recuperar o Object ID novamente mais tarde, use o seguinte comando az ad group show: az ad group show --group "my-app-local-dev" --query id --output tsv.

Para adicionar um usuário ao grupo, primeiro você precisa obter a Object ID conta de usuário do Azure que deseja adicionar. Use o comando az ad user list com o --filter parâmetro para pesquisar um usuário específico por nome de exibição. O --query parâmetro ajuda a limitar a saída a campos relevantes:

#!/bin/bash
az ad user list \
--filter "startswith(displayName, 'Bob')" \
--query "[].{objectId:id, displayName:displayName}" \
--output table
# PowerShell syntax
az ad user list `
    --filter "startswith(displayName, 'Bob')" `
    --query "[].{objectId:id, displayName:displayName}" `
    --output table

Depois de ter o Object ID do usuário, você poderá adicioná-lo ao grupo usando o comando az ad group member add.

#!/bin/bash
az ad group member add \
    --group <group-name> \
    --member-id <object-id>
# PowerShell syntax
az ad group member add `
    --group <group-name> `
    --member-id <object-id>

Observação

Por padrão, a criação de grupos de segurança do Microsoft Entra é limitada a determinadas funções com privilégio em um diretório. Se não for possível criar um grupo, entre em contato com um administrador do seu diretório. Se você não puder adicionar membros a um grupo existente, entre em contato com o proprietário do grupo ou com um administrador de diretório. Para saber mais, consulte Gerenciar grupos do Microsoft Entra e associação de grupo.

2 – Atribuir funções ao grupo Microsoft Entra

Depois de criar seu grupo de segurança do Microsoft Entra e adicionar membros, a próxima etapa é determinar quais funções (permissões) seu aplicativo exige e atribuir essas funções ao grupo no escopo apropriado.

  • Determinar as funções necessárias

    Identifique as funções que seu aplicativo precisa para funcionar. Exemplos comuns incluem:

    • Usuário de segredos do Key Vault – para ler segredos do Azure Key Vault
    • Contribuidor de Dados da Fila de Armazenamento – para enviar mensagens no Armazenamento de Filas do Azure

    Consulte as definições de função internas para obter mais opções.

  • Escolher um escopo para a atribuição de função

    As funções podem ser atribuídas em escopos diferentes:

    • Nível de recurso (por exemplo, uma única Key Vault ou uma conta de armazenamento)
    • Nível do grupo de recursos (recomendado para a maioria dos aplicativos)
    • Nível de assinatura (use com cuidado – acesso mais amplo)

Neste exemplo, atribuimos funções no escopo do grupo de recursos, o que é típico quando todos os recursos do aplicativo são agrupados em um grupo de recursos.

Um usuário, grupo ou principal de serviço de aplicativo recebe uma função no Azure usando o comando az role assignment create. Você pode especificar um grupo com seu Object ID.

#!/bin/bash
az role assignment create --assignee <objectId> \
    --scope /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName> \
    --role "<roleName>" 
# PowerShell syntax
az role assignment create `
    --assignee <objectId> `
    --scope /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName> `
    --role "<roleName>"

Para obter os nomes de função que podem ser atribuídos, use o comando az role definition list.

#!/bin/bash
az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table
# PowerShell syntax
az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table

Para conceder acesso de leitura, gravação e exclusão a contêineres e dados de blob do Armazenamento do Azure para todas as contas de armazenamento em um grupo de recursos específico, atribua a função de Colaborador de Dados de Blob de Armazenamento ao grupo de segurança no Microsoft Entra.

#!/bin/bash
az role assignment create --assignee bbbbbbbb-1111-2222-3333-cccccccccccc \
    --scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-python-sdk-auth-example \
    --role "Storage Blob Data Contributor"
# PowerShell syntax
az role assignment create --assignee bbbbbbbb-1111-2222-3333-cccccccccccc `
    --scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-python-sdk-auth-example `
    --role "Storage Blob Data Contributor"

Para obter informações sobre como atribuir permissões no nível de recurso ou assinatura usando a CLI do Azure, consulte o artigo Atribuir funções do Azure usando a CLI do Azure.

3 – Entrar no Azure usando a CLI do Azure, o Azure PowerShell, a CLI do Desenvolvedor do Azure ou em um navegador

Para autenticar com sua conta do Azure, escolha um dos seguintes métodos:

Abra um terminal na estação de trabalho do desenvolvedor e entre no Azure com a CLI do Azure.

az login

4 – Implementar DefaultAzureCredential no seu aplicativo

Para autenticar objetos cliente do SDK do Azure com o Azure, seu aplicativo deve usar a DefaultAzureCredential classe do azure-identity pacote. Esse é o método de autenticação recomendado para implantações locais de desenvolvimento e produção.

Em um cenário de desenvolvimento local, DefaultAzureCredential funciona verificando sequencialmente as fontes de autenticação disponíveis. Especificamente, ele procura sessões ativas nas seguintes ferramentas:

  • CLI do Azure (az login)
  • Azure PowerShell (Connect-AzAccount)
  • CLI do Desenvolvedor do Azure (logon de autenticação do azd)

Se o desenvolvedor estiver conectado ao Azure usando qualquer uma dessas ferramentas, DefaultAzureCredential detectará automaticamente a sessão e usará essas credenciais para autenticar o aplicativo com os serviços do Azure. Isso permite que os desenvolvedores se autentiquem com segurança sem armazenar segredos ou modificar código para ambientes diferentes.

Comece adicionando o pacote azure.identity ao seu aplicativo.

pip install azure-identity

Em seguida, para qualquer código Python que crie um objeto cliente do SDK do Azure em seu aplicativo, você deseja:

  1. Importar a classe DefaultAzureCredential do módulo azure.identity.
  2. Crie um objeto DefaultAzureCredential.
  3. Passe o objeto DefaultAzureCredential ao construtor de objetos do cliente do SDK do Azure.

Um exemplo dessas etapas é mostrado no segmento de código a seguir.

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

# Acquire a credential object
token_credential = DefaultAzureCredential()

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