Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A autorização no Azure determina que ações os utilizadores ou serviços autenticados podem realizar nos recursos. Este artigo explora como implementar autorização usando o SDK do Azure para Python, abrangendo modelos, implementação, resolução de problemas e boas práticas. Para uma configuração detalhada de autenticação, consulte Autenticar aplicações Python no Azure.
Introdução
A autenticação (AuthN) verifica a identidade de um utilizador ou serviço, enquanto a autorização (AuthZ) define o que podem fazer. No Azure, a autorização garante acesso seguro aos recursos, crítico para proteger aplicações e dados. Os programadores podem implementar autorizações robustas com o SDK do Azure para Python para controlar o acesso em vários fluxos de trabalho, desde a gestão de recursos até ao acesso a dados específicos do serviço.
Modelos de autorização do Azure
O Azure fornece múltiplos mecanismos de autorização para gerir o acesso. Compreender estes modelos é essencial para um controlo eficaz de acessos.
Azure Controlo de Acesso Baseado em Funções
O Azure Role-Based Controlo de Acesso (RBAC) atribui papéis a identidades em ambitos como subscrições ou grupos de recursos. Os papéis incorporados incluem Proprietário, Contribuidor e Leitor, enquanto papéis personalizados permitem permissões personalizadas. Quando atribuis um papel num determinado âmbito, a identidade (como um utilizador ou serviço) recebe permissões para todos os recursos dentro desse âmbito e para os seus subescopos. Por exemplo, atribuir o papel de Contribuinte ao nível da subscrição permite a gestão de todos os recursos dessa subscrição. Veja Compreenda o âmbito do Azure RBAC.
Mecanismos específicos de serviço
Alguns serviços Azure oferecem métodos de autorização únicos:
- Armazenamento do Azure: Utiliza Assinaturas de Acesso Partilhadas (SAS) e Listas de Controlo de Acesso (ACLs) para acesso aos dados. Consulte Notas de Autorização Específicas ao Serviço para Armazenamento do Azure.
- Azure Key Vault: Recomenda RBAC em vez de políticas de acesso legadas. Consulte Notas de Autorização Específicas do Serviço sobre Azure Key Vault.
- Microsoft Graph: Utiliza escopos OAuth 2.0 e permissões de aplicação. Veja Notas de Autorização Específicas do Serviço para Microsoft Graph.
Utilize a autorização no SDK do Azure para Python
O SDK do Azure para Python fornece suporte incorporado para gerir autenticação e autorização através do azure-identity pacote. A DefaultAzureCredential classe suporta vários mecanismos de autenticação, como identidades geridas e princípios de serviço, adaptando-se a diferentes ambientes.
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 consegue listar com sucesso grupos de recursos. Se a identidade não tiver o papel de Leitor ou superior no âmbito da subscrição ou do grupo de recursos, esta chamada retorna um erro 403 Forbidden.
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> pelo seu ID de subscrição Azure, que normalmente está na forma de 00000000-0000-0000-0000-000000000000.
Microsoft Graph com escopos
Para aceder ao Microsoft Graph, utilize o Microsoft Graph SDK oficial para Python, que suporta permissões tanto delegadas como de aplicação.
Este exemplo demonstra como o SDK utiliza uma credencial para solicitar um token de acesso com o âmbito https://graph.microsoft.com/.default de autorização necessário e aceder aos recursos Microsoft Graph. A identidade deve ser autorizada no ID Microsoft Entra com permissões de aplicação apropriadas (como User.Read.All) para recuperar dados do utilizador; caso contrário, o pedido falha com um 403 Proibido.
Importante
Certifique-se de que a sua aplicação ou identidade tem as User.Read.All 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 este SDK no tutorial oficial Build Python apps with Microsoft Graph .
Diagnosticar erros de autorização
Problemas de autorização causam frequentemente erros HTTP 403 Forbidden, que indicam permissões insuficientes. Para diagnosticar estes problemas:
Verifique mensagens de erro: Consulte a resposta para detalhes sobre permissões em falta.
Ativar registos: Utilize o registo em Python para inspecionar pedidos e respostas.
import logging logging.basicConfig(level=logging.DEBUG)Verificar acesso: Use o CLI do Azure ou o portal do Azure para verificar atribuições de funções.
az role assignment list --assignee <principal-id> --scope <scope>Substitua
<principal-id>pelo ID do objeto do utilizador, da entidade de serviço ou da identidade gerida. Substitua<scope>por um âmbito de recurso Azure, como um ID de subscrição, um nome de grupo de recursos ou um recurso. Consulte Trabalhar com âmbitos.
Trabalho com telescópios
Muitas vezes, é necessário fornecer um âmbito, como no seguinte exemplo:
az role assignment list \
--assignee <principal-id> \
--scope <scope>
Aqui estão alguns formatos comuns de mira:
| Nível de âmbito | Valor de Exemplo |
|---|---|
| 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, listar todas as atribuições de funções para uma identidade gerida ao 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 ao nível da assinatura:
az role assignment list \
--assignee 12345678-90ab-cdef-1234-567890abcdef \
--scope /subscriptions/<subscription-id>
Para recuperar o ID do objeto (<principal-id>) de um utilizador ou identidade gerida, utilize:
az ad user show --id <user-email> --query id
az identity show --name <identity-name> --resource-group <rg-name> --query principalId
Gerir o acesso
Gerir o acesso através da atribuição de funções utilizando:
Portal Azure: Adicionar funções através do menu de serviços de controlo de acesso (IAM).
CLI do Azure:
az role assignment create --assignee <principal-id> --role <role-name> --scope <scope>Substitua
<principal-id>pelo ID do objeto do utilizador, da entidade de serviço ou da identidade gerida. Substitua<scope>por um âmbito de recurso Azure, como um ID de subscrição, um nome de grupo de recursos ou um nome de recurso. Consulte Trabalhar com âmbitos.Modelos ARM: Usar para gestão declarativa.
Para identidades geridas, atribui papéis à identidade associada a recursos como máquinas virtuais. Use a funcionalidade Check Access do portal do Azure ou a CLI do Azure para verificar permissões efetivas.
Notas de autorização específicas de serviço
Na secção Mecanismos específicos de serviço, aprendeu que alguns serviços do Azure oferecem métodos de autorização únicos. Esta secção fornece mais detalhes para cada um dos três serviços Azure mencionados.
Armazenamento do Azure
- RBAC: Gere as operações do plano de controlo.
- SAS e ACLs: Controla o acesso ao plano de dados, com autenticação Microsoft Entra também suportada.
Exemplo: Aceder a blobs com o 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 sua conta Armazenamento do Azure.
Azure Key Vault
Use RBAC em vez de políticas de acesso legadas para maior consistência. As políticas de acesso ainda são suportadas, mas não são preferidas.
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)
Substitui <vault-name> pelo nome do teu recurso Key Vault.
Microsoft Graph
Utiliza escopos OAuth 2.0 para permissões delegadas e permissões de aplicação para aplicações daemon. Especifique os escopos como mostrado no exemplo anterior.
Melhores práticas
- Privilégio mínimo: Atribuir apenas permissões necessárias, como Leitor em vez de Contribuidor.
- Prefiro RBAC: especialmente para Key Vault, para controlo de acesso unificado.
- Use Identidades Geridas: Evite gerir credenciais no código.
- Limitar permissões Graph: Solicitar escopos específicos para minimizar riscos.