Partilhar via


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

Ao desenvolver aplicativos na 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 quaisquer serviços do Azure com os quais interage, como Cofre de Chaves, 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 incorporar 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 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 autenticar nos serviços do Azure durante o desenvolvimento local, pois não requer a criação e o gerenciamento de entidades de serviço ou segredos.

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 credenciais do Azure do próprio desenvolvedor, o desenvolvedor deve primeiro entrar usando uma das ferramentas de linha de comando suportadas:

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

Uma vez conectado, a biblioteca de Identidade do Azure para Python pode detetar automaticamente a sessão ativa e recuperar os tokens necessários do cache de credenciais. Esse recurso 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.

Este comportamento é ativado ao usar DefaultAzureCredential, que recorre de forma transparente às credenciais baseadas em CLI em ambientes locais.

Usar as credenciais do Azure autenticadas 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 exigir configuração adicional.

No entanto, as contas de desenvolvedor normalmente têm permissões mais amplas do que o aplicativo deveria ter em produção. Essas permissões mais amplas podem levar a inconsistências nos testes ou permitir inadvertidamente operações 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, em vez disso, criar entidades de serviço específicas do aplicativo para o desenvolvimento local. Estas identidades:

  • Podem ser atribuídas apenas as funções e permissões de que o aplicativo precisa
  • Apoiar o princípio do menor privilégio
  • Oferecer testes consistentes de comportamento relacionado ao acesso em todos os ambientes

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

1 - Criar grupo de segurança 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.

A atribuição de funções do Azure no nível do grupo, em vez de a 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. Não é necessário atualizar permissões de usuário individuais.

  • Integração fácil

    Novos desenvolvedores podem receber as permissões necessárias simplesmente adicionando-os ao grupo. Não são necessárias atribuições manuais de funções.

Se a sua organização já tiver um grupo de segurança Microsoft Entra adequado para a equipa de desenvolvimento, pode reutilizá-lo. Caso contrário, você pode 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 Azure CLI.

Este comando requer os seguintes parâmetros:

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

--mail-nickname: Um identificador único usado para e-mail 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 comando az ad group create, copie o valor da propriedade id da saída do comando. Você precisa do Object ID grupo de segurança Microsoft Entra para atribuir funções em etapas posteriores neste 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 aos 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ê pode 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>

Nota

Por padrão, a criação de grupos de segurança do Microsoft Entra é limitada a determinadas funções privilegiadas em um diretório. Se não conseguir criar um grupo, contacte um administrador do seu diretório. Se não conseguir adicionar membros a um grupo existente, contacte o proprietário do grupo ou um administrador de diretório. Para saber mais, consulte Gerenciar grupos do Microsoft Entra e associação a grupos.

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 requer e atribuir essas funções ao grupo no escopo apropriado.

  • Determinar funções necessárias

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

    • Key Vault Secrets User – para ler os segredos do Azure Key Vault
    • Contribuidor de Dados da Fila de Armazenamento – para enviar mensagens para o Armazenamento de Filas do Azure

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

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

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

    • Nível de recursos (por exemplo, um único Cofre de Chaves ou 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, atribuímos funções no escopo do grupo de recursos, que é típico quando todos os recursos do aplicativo são agrupados em um grupo de recursos.

Um usuário, grupo ou entidade de serviço de aplicativo recebe uma função no Azure usando o comando az role assignment create . Você pode especificar um grupo com o 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 de 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 seu grupo de segurança 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 - Entre no Azure usando a CLI do Azure, o Azure PowerShell, a CLI do Azure Developer 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 a partir da CLI do Azure.

az login

4 - Implementar DefaultAzureCredential em seu aplicativo

Para autenticar objetos cliente do SDK do Azure com o Azure, a sua aplicação deve usar a classe DefaultAzureCredentialazure-identity do pacote. Este é o método de autenticação recomendado para implantações de desenvolvimento local 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 (azd auth login)

Se o desenvolvedor estiver conectado ao Azure usando qualquer uma dessas ferramentas, DefaultAzureCredential detetará 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 o 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 de cliente do SDK do Azure em seu aplicativo, você deseja:

  1. Importe a DefaultAzureCredential classe do azure.identity módulo.
  2. Crie um DefaultAzureCredential objeto.
  3. Passe o DefaultAzureCredential objeto para o construtor de objeto de 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)