Partilhar via


Autenticar aplicações Python em serviços Azure durante o desenvolvimento local usando princípios de serviço

Durante o desenvolvimento local, as aplicações precisam de se autenticar no Azure para aceder a vários serviços do Azure. Este artigo explica como usar um principal de serviço de aplicação como uma das duas abordagens comuns para autenticação local.

  • Como registar uma aplicação na plataforma Microsoft Entra para criar um principal de serviço
  • Como usar grupos Microsoft Entra para gerir permissões de forma eficiente
  • Como atribuir funções às permissões de âmbito
  • Como autenticar usando um principal de serviço a partir do código da sua aplicação

Utilizar princípios dedicados de serviços de aplicação permite-lhe aderir ao princípio do menor privilégio ao aceder aos recursos do Azure. As permissões estão limitadas aos requisitos específicos da aplicação durante o desenvolvimento, evitando o acesso acidental a recursos do Azure destinados a outras aplicações ou serviços. Essa abordagem também ajuda a evitar problemas quando o aplicativo é movido para produção, garantindo que ele não seja excessivamente privilegiado no ambiente de desenvolvimento.

Um diagrama que mostra como uma aplicação a funcionar no ambiente de desenvolvimento local obtém do ficheiro .env o principal de serviço da aplicação e usa essa identidade para ligar-se aos recursos do Azure.

Quando a aplicação é registada no Azure, é criado um principal de serviço de aplicação. Para o desenvolvimento local:

  • Crie um registro de aplicativo separado para cada desenvolvedor que trabalha no aplicativo para garantir que cada desenvolvedor tenha sua própria entidade de serviço de aplicativo, evitando a necessidade de compartilhar credenciais.
  • Crie um registro de aplicativo separado para cada aplicativo para limitar as permissões do aplicativo apenas ao necessário.

Durante o desenvolvimento local, as variáveis de ambiente são definidas com a identidade principal do serviço do aplicativo. A biblioteca Azure Identity lê estas variáveis de ambiente para autenticar a aplicação aos recursos necessários do Azure.

Registe a aplicação no Azure

Os objetos principais de serviço de aplicação são criados através de um registo de aplicação no Azure, utilizando o portal do Azure ou o Azure CLI.

  1. No portal Azure, use a barra de pesquisa para navegar até à página App registrations.

  2. Na página App registrations, selecione + Nova inscrição.

  3. Na página de Registar uma candidatura

    • Para o campo Nome, insira um valor descritivo que inclua o nome do aplicativo e o ambiente de destino.
    • Para o Tipos de conta suportados, selecione Contas apenas neste diretório organizacional (Somente Liderado pelo Cliente Microsoft - Locatário único)ou a opção que melhor atenda às suas necessidades.
  4. Selecione Registrar para registar a sua aplicação e criar o principal de serviço.

    Uma captura de ecrã que mostra como criar um registo de aplicação no portal Azure.

  5. Na página de registro do aplicativo para seu aplicativo, copie o ID do aplicativo (cliente) e ID do diretório (locatário) e cole-os em um local temporário para uso posterior nas configurações de código do aplicativo.

  6. Selecione Adicionar um certificado ou secreto para configurar credenciais para seu aplicativo.

  7. Na página Certificados & segredos, selecione + Novo segredo de cliente.

  8. No Adicionar um segredo de cliente no painel suspenso que se abre:

    • Para a Descrição, insira um valor de Current.
    • Para o valor expira, deixe o valor padrão recomendado de 180 dias.
    • Selecione Adicionar para adicionar o segredo.
  9. Na página Certificados & segredos, copie a propriedade Value do segredo do cliente para uso em uma etapa futura.

    Nota

    O valor secreto do cliente só é exibido uma vez após a criação do registro do aplicativo. Você pode adicionar mais segredos de cliente sem invalidar esse segredo de cliente, mas não há como exibir esse valor novamente.

Crie um grupo Microsoft Entra para desenvolvimento local

Crie um grupo Microsoft Entra para encapsular os papéis (permissões) que a aplicação necessita no desenvolvimento local, em vez de atribuir os papéis a objetos principais de serviço individuais. Esta abordagem oferece as seguintes vantagens:

  • Cada desenvolvedor tem as mesmas funções atribuídas no nível do grupo.
  • Se uma nova função for necessária para o aplicativo, ela só precisará ser adicionada ao grupo do aplicativo.
  • Se um novo programador ingressar na equipa, um novo principal de serviço da aplicação será criado para o programador e adicionado ao grupo, garantindo que o programador tenha as permissões certas para trabalhar na aplicação.
  1. Navegue até à página de visão geral Microsoft Entra ID no portal Azure.

  2. Selecione Todos os grupos no menu à esquerda.

  3. Na página Grupos , selecione Novo grupo.

  4. Na página Novo de grupo, preencha os seguintes campos de formulário:

    • Tipo de grupo: Selecione Segurança.
    • Nome do grupo: insira um nome para o grupo que inclua uma referência ao nome do aplicativo ou ambiente.
    • Descrição do grupo: insira uma descrição que explique a finalidade do grupo.

    Uma captura de ecrã que mostra como criar um grupo no portal Azure.

  5. Selecione o link Sem membros selecionados em Membros para adicionar membros ao grupo.

  6. No painel suspenso que se abre, procure o principal de serviço que criou anteriormente e selecione-o nos resultados filtrados. Escolha o botão Selecionar na parte inferior do painel para confirmar sua seleção.

  7. Selecione Criar na parte inferior da página Novo grupo para criar o grupo e retornar à página Todos os grupos . Se não vir o novo grupo listado, aguarde um momento e atualize a página.

Atribuir funções ao grupo

De seguida, determina que funções (permissões) a tua aplicação precisa sobre que recursos e atribui esses papéis ao grupo Microsoft Entra que criaste. Os grupos podem receber uma função em um recurso, num grupo de recursos ou no âmbito de uma assinatura. Este exemplo mostra como atribuir papéis no âmbito do grupo de recursos, uma vez que a maioria das aplicações agrupa todos os seus recursos do Azure num único grupo de recursos.

  1. No portal Azure, navegue até à página Overview do grupo de recursos que contém a sua aplicação.

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

  3. Na página Controle de acesso (IAM), selecione + Adicionar e escolha Adicionar atribuição de função no menu suspenso. A página Adicionar atribuição de função fornece várias guias para configurar e atribuir funções.

  4. Na guia Função , use a caixa de pesquisa para localizar a função que você deseja atribuir. Selecione a função e, em seguida, escolha Avançar.

  5. Na aba Membros

    • Para o valor Atribuir acesso a , selecione Usuário, grupo ou entidade de serviço .
    • Para o valor Membros, escolha + Selecionar membros para abrir o painel flutuante Selecionar membros.
    • Procura o grupo Microsoft Entra que criaste anteriormente e seleciona-o nos resultados filtrados. Escolha e depois selecione para selecionar o grupo e fechar o painel de pop-up.
    • Selecione Revisar + atribuir no fundo do separador Membros.

    Uma captura de ecrã que mostra como atribuir um papel ao grupo Microsoft Entra.

  6. No separador Rever + atribuir, selecione Rever + atribuir na parte de baixo da página.

Definir as variáveis de ambiente do aplicativo

Em tempo de execução, certas credenciais da biblioteca de identidade Azure, como DefaultAzureCredential, EnvironmentCredential e ClientSecretCredential, pesquisam informação do principal de serviço por convenção nas variáveis de ambiente. Existem várias formas de configurar variáveis de ambiente ao trabalhar com Python, dependendo das suas ferramentas e ambiente.

Independentemente da abordagem escolhida, configure as seguintes variáveis de ambiente para um principal de serviço:

  • AZURE_CLIENT_ID: O ID da aplicação registada na Azure.
  • AZURE_TENANT_ID: O ID do tenant da Microsoft Entra.
  • AZURE_CLIENT_SECRET: A credencial secreta do cliente para a aplicação.

Como a maioria dos programadores trabalha em múltiplas aplicações, recomenda-se a utilização de um pacote como python-dotenv para aceder a variáveis de ambiente a partir de um .env ficheiro armazenado no diretório da aplicação durante o desenvolvimento. Esta abordagem abrange as variáveis do ambiente para que só esta aplicação as possa utilizar.

O ficheiro .env nunca é registado no sistema de controlo de versão, pois contém a chave secreta da aplicação do Azure. O ficheiro padrão .gitignore para Python exclui automaticamente o ficheiro .env do check-in.

Para usar o python-dotenv pacote, instale-o primeiro na sua aplicação:

pip install python-dotenv

Em seguida, crie um .env arquivo no diretório raiz do aplicativo. Defina os valores das variáveis de ambiente com os valores obtidos no processo de registo da aplicação:

AZURE_CLIENT_ID=<your-client-id>
AZURE_TENANT_ID=<your-tenant-id>
AZURE_CLIENT_SECRET=<your-client-secret>

Finalmente, no código de arranque da sua aplicação, use a python-dotenv biblioteca para ler as variáveis de ambiente do .env ficheiro no arranque:

from dotenv import load_dotenv

load_dotenv()

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

A biblioteca azure-identity fornece várias implementações credenciais — implementações de TokenCredential adaptadas para suportar diferentes cenários e fluxos de autenticação Microsoft Entra. Os passos seguintes demonstram como usar ClientSecretCredential ao trabalhar com entidades de serviço localmente e em produção.

Implementar o código

Comece por adicionar o pacote à sua candidatura.

pip install azure-identity

De seguida, para qualquer código Python que crie um objeto cliente do Azure SDK na sua aplicação, deve:

  1. Importe a ClientSecretCredential classe do azure.identity módulo.
  2. Importa o os módulo para ler variáveis de ambiente.
  3. Leia as variáveis de ambiente para obter o ID do cliente, o ID do tenant e o segredo do cliente.
  4. Crie um ClientSecretCredential objeto que passe o ID do inquilino, o ID do cliente e o segredo do cliente.
  5. Passe o objeto ClientSecretCredential para o construtor do objeto cliente do Azure SDK.

Um exemplo dessa abordagem é mostrado no segmento de código a seguir.

import os
from azure.identity import ClientSecretCredential
from azure.storage.blob import BlobServiceClient

tenant_id = os.environ.get("AZURE_TENANT_ID")
client_id = os.environ.get("AZURE_CLIENT_ID")
client_secret = os.environ.get("AZURE_CLIENT_SECRET")

credential = ClientSecretCredential(tenant_id, client_id, client_secret)

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