Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A autorização no Azure determina quais ações usuários ou serviços autenticados podem executar em recursos. Este artigo explora como implementar a autorização usando o SDK do Azure para Python, abrangendo modelos, implementação, solução de problemas e práticas recomendadas. Para obter uma configuração de autenticação detalhada, consulte Autenticar aplicativos Python no Azure.
Introdução
A autenticação (AuthN) verifica a identidade de um usuário ou serviço, enquanto a autorização (AuthZ) define o que ele pode fazer. No Azure, a autorização garante o acesso seguro aos recursos, essencial para proteger aplicativos e dados. Os desenvolvedores podem implementar uma autorização robusta com o SDK do Azure para Python para controlar o acesso em vários fluxos de trabalho, desde o gerenciamento de recursos até o acesso a dados específicos do serviço.
Modelos de autorização do Azure
O Azure fornece vários mecanismos de autorização para gerenciar o acesso. Entender esses modelos é essencial para um controle de acesso eficaz.
Controle de Acesso Baseado em Funções do Azure
O Controle de Acesso Baseado em Funções (RBAC) do Azure atribui funções a identidades em escopos como assinaturas ou grupos de recursos. As funções internas incluem Proprietário, Colaborador e Leitor, enquanto as funções personalizadas permitem permissões personalizadas. Quando você atribui uma função em um escopo específico, a identidade (como no caso de um usuário ou serviço) obtém permissões para todos os recursos dentro desse escopo e de seus escopos subordinados. Por exemplo, atribuir a função Colaborador no nível da assinatura permite o gerenciamento de todos os recursos nessa assinatura. Consulte Compreender o escopo do RBAC do Azure.
Mecanismos específicos do serviço
Alguns serviços do Azure oferecem métodos de autorização exclusivos:
- Armazenamento do Azure: usa SAS (Assinaturas de Acesso Compartilhado) e ACLs (Listas de Controle de Acesso) para acesso a dados. Consulte Notas de Autorização Específicas do Serviço para Armazenamento do Azure.
- Azure Key Vault: recomenda o RBAC em relação às políticas de acesso herdadas. Consulte Notas de Autorização Específicas do Serviço do Azure Key Vault.
- Microsoft Graph: emprega escopos OAuth 2.0 e permissões de aplicativo. Consulte as Notas de Autorização Específicas do Serviço para o Microsoft Graph.
Usar autorização no SDK do Azure para Python
O SDK do Azure para Python fornece suporte interno para lidar com autenticação e autorização por meio do azure-identity pacote. A DefaultAzureCredential classe dá suporte a vários mecanismos de autenticação, como identidades gerenciadas e entidades de serviço, adaptando-se a ambientes diferentes.
Exemplo: listar grupos de recursos
Este exemplo mostra como o SDK do Azure para Python usa uma credencial (via DefaultAzureCredential) para autenticar e como a autorização determina se a identidade pode listar grupos de recursos com êxito. Se a identidade não tiver a função Leitor ou superior no escopo da assinatura ou do grupo de recursos, essa chamada retornará um erro 403 Proibido.
from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient
credential = DefaultAzureCredential()
client = ResourceManagementClient(credential, "<subscription-id>")
resource_groups = client.resource_groups.list()
for rg in resource_groups:
print(rg.name)
Substitua <subscription-id> por sua ID de assinatura do Azure, que geralmente está na forma de 00000000-0000-0000-0000-000000000000.
Microsoft Graph com escopos
Para acessar o Microsoft Graph, use o SDK oficial do Microsoft Graph para Python, que dá suporte a permissões delegadas e de aplicativo.
Este exemplo demonstra como o SDK usa uma credencial para solicitar um token de acesso com o escopo https://graph.microsoft.com/.default de autorização necessário e acessar recursos do Microsoft Graph. A identidade deve ser autorizada na ID do Microsoft Entra com permissões de aplicativo apropriadas (como User.Read.All) para recuperar dados do usuário; caso contrário, a solicitação falhará com um 403 Proibido.
Importante
Verifique se seu aplicativo ou identidade possui as User.Read.All ou outras permissões necessárias concedidas no Microsoft Entra ID.
from azure.identity import DefaultAzureCredential
from msgraph.core import GraphClient
credential = DefaultAzureCredential()
client = GraphClient(credential=credential, scopes=["https://graph.microsoft.com/.default"])
response = client.get("/users")
users = response.json().get("value", [])
for user in users:
print(user["displayName"])
Saiba mais sobre esse SDK no tutorial oficial criar aplicativos Python com o Microsoft Graph .
Diagnosticar erros de autorização
Problemas de autorização geralmente causam erros HTTP 403 Forbidden, que indicam permissões insuficientes. Para diagnosticar esses problemas:
Verificar mensagens de erro: examine a resposta para obter detalhes sobre permissões ausentes.
Habilitar o logging: Use o logging do Python para inspecionar solicitações e respostas.
import logging logging.basicConfig(level=logging.DEBUG)Verificar o acesso: use CLI do Azure ou o Portal do Azure para verificar as atribuições de função.
az role assignment list --assignee <principal-id> --scope <scope>Substitua
<principal-id>pela ID do objeto do usuário, da entidade de serviço ou da identidade gerenciada. Substitua<scope>por um escopo de recurso do Azure, como uma ID de assinatura, um nome de grupo de recursos ou um recurso. Consulte Trabalhar com escopos.
Trabalhar com escopos
Muitas vezes, você precisa fornecer um escopo, como no exemplo a seguir:
az role assignment list \
--assignee <principal-id> \
--scope <scope>
Aqui estão alguns formatos de escopo comuns:
| Nível de Escopo | Exemplo de valor |
|---|---|
| Subscription | /subscriptions/<subscription-id> |
| Grupo de Recursos | /subscriptions/<subscription-id>/resourceGroups/<resource-group-name> |
| Nome do recurso | /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/<provider-namespace>/<resource-type>/<resource-name> |
Por exemplo, para listar todas as atribuições de função para uma identidade gerenciada no nível do grupo de recursos:
az role assignment list \
--assignee 12345678-90ab-cdef-1234-567890abcdef \
--scope /subscriptions/<subscription-id>/resourceGroups/my-resource-group
Ou no nível da assinatura:
az role assignment list \
--assignee 12345678-90ab-cdef-1234-567890abcdef \
--scope /subscriptions/<subscription-id>
Para recuperar a ID do objeto (<principal-id>) de um usuário ou identidade gerenciada, use:
az ad user show --id <user-email> --query id
az identity show --name <identity-name> --resource-group <rg-name> --query principalId
Gerenciar acesso
Gerencie o acesso por meio de atribuições de função usando:
Azure portal: adicionar funções por meio do menu de serviço do controle de acesso (IAM).
CLI do Azure:
az role assignment create --assignee <principal-id> --role <role-name> --scope <scope>Substitua
<principal-id>pela ID do objeto do usuário, da entidade de serviço ou da identidade gerenciada. Substitua<scope>por um escopo de recurso do Azure, como uma ID de assinatura, um nome de grupo de recursos ou um nome de recurso. Consulte Trabalhar com escopos.Modelos ARM: use para gerenciamento declarativo.
Para identidades gerenciadas, atribua funções à identidade associada a recursos como máquinas virtuais. Use o recurso De verificação de acesso do portal Azure ou o CLI do Azure para verificar permissões efetivas.
Notas de autorização específicas do serviço
Na seção Mecanismos específicos do serviço, você aprendeu que alguns serviços Azure oferecem métodos de autorização exclusivos. Esta seção fornece mais detalhes para cada um dos três serviços do Azure mencionados.
Armazenamento do Azure
- RBAC: gerencia operações do plano de controle.
- SAS e ACLs: controle o acesso ao plano de dados, com suporte também à autenticação do Microsoft Entra.
Exemplo: Acessar blobs com Microsoft Entra ID
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
credential = DefaultAzureCredential()
client = BlobServiceClient(account_url="https://<account-name>.blob.core.windows.net", credential=credential)
containers = client.list_containers()
for container in containers:
print(container.name)
Substitua <account-name> pelo nome da conta de Armazenamento do Azure.
Azure Key Vault
Use RBAC em vez de políticas de acesso herdadas para consistência. As políticas de acesso ainda têm suporte, mas não são preferenciais.
Exemplo: recuperar um segredo
from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient
credential = DefaultAzureCredential()
client = SecretClient(vault_url="https://<vault-name>.vault.azure.net", credential=credential)
secret = client.get_secret("my-secret")
print(secret.value)
Substitua <vault-name> pelo nome do recurso do Key Vault.
Microsoft Graph
Usa escopos OAuth 2.0 para permissões delegadas e permissões de aplicativo para aplicativos daemon. Especifique escopos, conforme mostrado no exemplo anterior.
Práticas recomendadas
- Privilégio mínimo: atribua somente permissões necessárias, como Leitor em vez de Colaborador.
- Prefira RBAC: especialmente para o Key Vault, para controle de acesso unificado.
- Use identidades gerenciadas: evite gerenciar credenciais no código.
- Limitar permissões do Graph: solicite escopos específicos para minimizar os riscos.