Autorización en las bibliotecas de SDK de Azure para Python

La autorización en Azure determina qué acciones pueden realizar los usuarios o servicios autenticados en los recursos. En este artículo se explora cómo implementar la autorización mediante el SDK de Azure para Python, que abarca modelos, implementación, solución de problemas y procedimientos recomendados. Para obtener una configuración de autenticación detallada, consulte Autenticación de aplicaciones de Python en Azure.

Introducción

La autenticación (AuthN) comprueba la identidad de un usuario o servicio, mientras que la autorización (AuthZ) define lo que pueden hacer. En Azure, la autorización garantiza el acceso seguro a los recursos, fundamental para proteger las aplicaciones y los datos. Los desarrolladores pueden implementar una autorización sólida con el SDK de Azure para Python para controlar el acceso en varios flujos de trabajo, desde la administración de recursos hasta el acceso a datos específicos del servicio.

Modelos de autorización de Azure

Azure proporciona varios mecanismos de autorización para administrar el acceso. Comprender estos modelos es esencial para un control de acceso eficaz.

Control de Acceso Basado en Roles de Azure

Azure Role-Based Access Control (RBAC) asigna roles a identidades en ámbitos como suscripciones o grupos de recursos. Los roles integrados incluyen Propietario, Colaborador y Lector, mientras que los roles personalizados permiten permisos personalizados. Al asignar un rol en un ámbito específico, la identidad (como un usuario o servicio) obtiene permisos para todos los recursos dentro de ese ámbito y sus ámbitos secundarios. Por ejemplo, asignar el rol Colaborador en el nivel de suscripción permite la administración de todos los recursos de esa suscripción. Consulte Descripción del ámbito de RBAC de Azure.

Mecanismos específicos del servicio

Algunos servicios de Azure ofrecen métodos de autorización únicos:

  • Azure Storage: usa firmas de acceso compartido (SAS) y listas de control de acceso (ACL) para el acceso a datos. Consulte Notas de autorización específicas del servicio para Azure Storage.
  • Azure Key Vault: recomienda el uso de RBAC en lugar de las directivas de acceso heredadas. Consulte Notas de autorización específicas del servicio para Azure Key Vault.
  • Microsoft Graph: emplea ámbitos y permisos de aplicación de OAuth 2.0. Consulte notas de autorización específicas del servicio para Microsoft Graph.

Uso de la autorización en SDK de Azure para Python

El SDK de Azure para Python proporciona compatibilidad integrada para controlar la autenticación y la autorización a través del azure-identity paquete. La DefaultAzureCredential clase admite varios mecanismos de autenticación, como identidades administradas y entidades de servicio, que se adaptan a diferentes entornos.

Ejemplo: Enumeración de grupos de recursos

En este ejemplo se muestra cómo el SDK de Azure para Python usa una credencial (a través DefaultAzureCredentialde ) para autenticarse y cómo la autorización determina si la identidad puede enumerar correctamente los grupos de recursos. Si la identidad no dispone del rol Lector o superior en el ámbito de la suscripción o del grupo de recursos, esta llamada devuelve un error 403 Prohibido.

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)

Reemplace <subscription-id> por el identificador de suscripción de Azure, que normalmente está en forma de 00000000-0000-0000-0000-000000000000.

Microsoft Graph con ámbitos

Para acceder a Microsoft Graph, use el SDK oficial de Microsoft Graph para Python, que admite permisos delegados y de aplicación.

En este ejemplo se muestra cómo usa el SDK una credencial para solicitar un token de acceso con el ámbito https://graph.microsoft.com/.default de autorización necesario y acceder a los recursos de Microsoft Graph. La identidad debe estar autorizada en Microsoft Entra ID con los permisos de aplicación adecuados (como User.Read.All) para recuperar los datos de usuario; de lo contrario, la solicitud falla con un 403 Forbidden.

Importante

Asegúrese de que la aplicación o la identidad tenga User.Read.All u otros permisos necesarios en 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"])

Obtenga más información sobre este SDK en el tutorial oficial Compilación de aplicaciones de Python con Microsoft Graph .

Diagnóstico de errores de autorización

Los problemas de autorización suelen provocar errores http 403 prohibidos, lo que indica permisos insuficientes. Para diagnosticar estos problemas:

  • Comprobar mensajes de error: revise la respuesta para obtener más información sobre los permisos que faltan.

  • Activar el registro: Use el registro de Python para inspeccionar solicitudes y respuestas.

    import logging
    logging.basicConfig(level=logging.DEBUG)
    
  • Comprobar el acceso: use CLI de Azure o el portal de Azure para comprobar las asignaciones de roles.

    az role assignment list --assignee <principal-id> --scope <scope>
    

    Reemplace <principal-id> por el identificador de objeto del usuario, la entidad de servicio o la identidad administrada. Reemplace por <scope> un ámbito de recursos de Azure, como un identificador de suscripción, un nombre de grupo de recursos o un recurso. Consulte Trabajo con ámbitos.

Trabajo con ámbitos

A menudo, es necesario proporcionar un alcance, como en el siguiente ejemplo:

az role assignment list \
    --assignee <principal-id> \
    --scope <scope>

Estos son algunos formatos de alcance comunes:

Nivel de ámbito Valor de ejemplo
Subscription /subscriptions/<subscription-id>
Grupo de recursos /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>
Nombre de recurso /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/<provider-namespace>/<resource-type>/<resource-name>

Por ejemplo, para enumerar todas las asignaciones de roles de una identidad administrada en el nivel de grupo de recursos:

az role assignment list \
  --assignee 12345678-90ab-cdef-1234-567890abcdef \
  --scope /subscriptions/<subscription-id>/resourceGroups/my-resource-group

O bien, en el nivel de suscripción:

az role assignment list \
  --assignee 12345678-90ab-cdef-1234-567890abcdef \
  --scope /subscriptions/<subscription-id>

Para recuperar el identificador de objeto (<principal-id>) de un usuario o una identidad administrada, use:

az ad user show --id <user-email> --query id
az identity show --name <identity-name> --resource-group <rg-name> --query principalId

Administración del acceso

Administre el acceso a través de asignaciones de roles mediante:

  • portal de Azure: agregue roles a través del menú del servicio Control de acceso (IAM).

  • CLI de Azure:

    az role assignment create --assignee <principal-id> --role <role-name> --scope <scope>
    

    Reemplace <principal-id> por el identificador de objeto del usuario, la entidad de servicio o la identidad administrada. Reemplace por <scope> un ámbito de recurso de Azure, como un identificador de suscripción, un nombre de grupo de recursos o un nombre de recurso. Consulte Trabajo con ámbitos.

  • Plantillas de ARM: se usa para la administración declarativa.

En el caso de las identidades administradas, asigne roles a la identidad asociada a recursos como máquinas virtuales. Use la característica Comprobar acceso del portal de Azure o la CLI de Azure para comprobar los permisos efectivos.

Notas de autorización específicas del servicio

En la sección Mecanismos específicos del servicio, ha aprendido que algunos servicios de Azure ofrecen métodos de autorización únicos. En esta sección se proporcionan más detalles para cada uno de los tres servicios de Azure mencionados.

Azure Storage

  • RBAC: administra las operaciones del plano de control.
  • SAS y ACLs: control del acceso al plano de datos, y también se admite la autenticación de Microsoft Entra.

Ejemplo: Obtener acceso a blobs con 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)

Reemplace por <account-name> el nombre de la cuenta de Azure Storage.

Azure Key Vault

Use RBAC en lugar de directivas de acceso heredadas para la coherencia. Las directivas de acceso siguen siendo compatibles, pero no se prefieren.

Ejemplo: Recuperar un secreto

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)

Reemplace <vault-name> por el nombre de su recurso de Key Vault.

Microsoft Graph

Usa ámbitos de OAuth 2.0 para permisos delegados y permisos de aplicación para aplicaciones en segundo plano. Especifique ámbitos como se muestra en el ejemplo anterior.

procedimientos recomendados

  • Privilegios mínimos: asigne solo los permisos necesarios, como Lector en lugar de Colaborador.
  • Preferir RBAC: especialmente para Key Vault, para el control de acceso unificado.
  • Usar identidades administradas: evite administrar credenciales en el código.
  • Limitar los permisos de Graph: solicite ámbitos específicos para minimizar los riesgos.

Pasos siguientes