Compartilhar via


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

Quando os desenvolvedores criam aplicativos em nuvem, eles normalmente depuram e testam aplicativos em sua estação de trabalho local. Quando um aplicativo é executado na estação de trabalho de um desenvolvedor durante o desenvolvimento local, deve ser feita a autenticação em todos os serviços do Azure usados pelo aplicativo. Este artigo trata de como usar as credenciais do Azure de um desenvolvedor para autenticar o aplicativo no Azure durante o desenvolvimento local.

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

Para que um aplicativo se autentique no Azure durante o desenvolvimento local usando as credenciais do Azure do desenvolvedor, um desenvolvedor deve estar conectado ao Azure a partir da CLI do Azure, do Azure PowerShell ou da CLI do Desenvolvedor do Azure. O SDK do Azure para Python é capaz de detectar que o desenvolvedor está conectado a partir de uma dessas ferramentas e, em seguida, obter as credenciais necessárias do cache de credenciais para autenticar o aplicativo no Azure como o usuário conectado.

Essa abordagem é mais fácil de configurar para uma equipe de desenvolvimento, pois aproveita as contas existentes do Azure dos desenvolvedores. No entanto, a conta de um desenvolvedor provavelmente terá mais permissões do que o exigido pelo aplicativo, o que excede as permissões com as quais o aplicativo será executado em produção. Como alternativa, você pode criar entidades de serviço de aplicativo para usar durante o desenvolvimento local, que podem ter o escopo definido para ter apenas o acesso necessário para o aplicativo.

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

Como quase sempre há vários desenvolvedores que trabalham em um aplicativo, é recomendável primeiro criar um grupo de segurança do Microsoft Entra para encapsular as funções (permissões) de que o aplicativo precisa no desenvolvimento local. Essa abordagem oferece as seguintes vantagens.

  • Cada desenvolvedor deve ter as mesmas funções atribuídas, já que as funções são 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 Microsoft Entra para o aplicativo.
  • Se um novo desenvolvedor ingressar na equipe, ele simplesmente deverá ser adicionado ao grupo correto do Microsoft Entra para obter as permissões corretas para trabalhar no aplicativo.

Se você tiver um grupo de segurança existente do Microsoft Entra para sua equipe de desenvolvimento, poderá usar esse grupo. Caso contrário, conclua as etapas a seguir para criar um grupo de segurança do Microsoft Entra.

O comando az ad group create é usado para criar grupos no Microsoft Entra ID. Os parâmetros --display-name e --main-nickname são obrigatórios. O nome fornecido ao grupo deve ter como base o nome do aplicativo. Também é interessante incluir uma frase como “desenvolvimento local” no nome do grupo para indicar a finalidade do grupo.

az ad group create \
    --display-name MyDisplay \
    --mail-nickname MyDisplay  \
    --description "<group-description>"

Copie o id valor da propriedade na saída do comando. Esta é a ID do objeto para o grupo. Você precisa dele em etapas posteriores. Você também pode usar o comando az ad group show para recuperar essa propriedade.

Para adicionar membros ao grupo, você precisa da ID do objeto do usuário do Azure. Use a lista de usuários do az ad para listar as entidades de serviço disponíveis. O comando de parâmetro --filter aceita filtros de estilo OData e pode ser usado para filtrar a lista no nome de exibição do usuário, conforme mostrado. O --query parâmetro limita a saída a colunas de interesse.

az ad user list \
    --filter "startswith(displayName, 'Bob')" \
    --query "[].{objectId:id, displayName:displayName}" \
    --output table

O comando az ad group member add pode ser usado para adicionar membros a grupos.

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 privilegiadas em um diretório. Se você não conseguir criar um grupo, entre em contato com um administrador do diretório. Se você não conseguir 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 e associação de grupos do Microsoft Entra.

2 - Atribuir funções ao grupo Microsoft Entra

Em seguida, você precisa determinar as funções (permissões) de que seu aplicativo precisa em quais recursos e atribuir essas funções ao seu aplicativo. Neste exemplo, as funções serão atribuídas ao grupo Microsoft Entra criado na etapa 1. As funções podem ser atribuídas em um escopo de recurso, grupo de recursos ou assinatura. Este exemplo mostra como atribuir funções no escopo do grupo de recursos, já que a maioria dos aplicativos agrupa todos os recursos do Azure em um único 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 sua ID de objeto.

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 .

az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table

Por exemplo, para permitir que os membros de um grupo com uma ID de objeto de leitura, gravação e exclusão acessem contêineres de blob e 00000000-0000-0000-0000-000000000000 dados do Armazenamento do Azure em todas as contas de armazenamento no grupo de recursos msdocs-python-sdk-auth-example na assinatura com ID 11111111-1111-1111-1111-111111111111, você atribuiria a função Colaborador de Dados de Blob de Armazenamento ao grupo usando o comando a seguir.

az role assignment create --assignee 00000000-0000-0000-0000-000000000000 \
    --scope /subscriptions/11111111-1111-1111-1111-111111111111/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, confira 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 Desenvolvedor do Azure ou em um navegador

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 de cliente do SDK do Azure no Azure, seu aplicativo deve usar a DefaultAzureCredentialazure.identity classe do pacote. Nesse cenário, DefaultAzureCredential verificará sequencialmente se o desenvolvedor entrou no Azure usando a CLI do Azure, o Azure PowerShell ou a CLI do desenvolvedor do Azure. Se o desenvolvedor estiver conectado ao Azure usando qualquer uma dessas ferramentas, as credenciais usadas para entrar na ferramenta serão usadas pelo aplicativo para autenticar no Azure.

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ê desejará:

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