Compartir a través de


Autenticación de aplicaciones Python en servicios de Azure durante el desarrollo local mediante cuentas de desarrollador

Al desarrollar aplicaciones en la nube, los desarrolladores suelen compilar, probar y depurar su código localmente antes de implementarlo en Azure. Sin embargo, incluso durante el desarrollo local, la aplicación debe autenticarse con cualquier servicio de Azure con el que interactúe, como Key Vault, Storage o bases de datos.

En este artículo se muestra cómo configurar la aplicación para usar las credenciales de Azure del desarrollador para la autenticación durante el desarrollo local. Este enfoque permite una experiencia de desarrollo sin problemas y segura sin insertar secretos ni escribir lógica específica del entorno.

Introducción a la autenticación de desarrollo local mediante cuentas de desarrollador

Al desarrollar una aplicación que use la biblioteca de identidades de Azure para Python, puede autenticarse en los servicios de Azure durante el desarrollo local mediante la cuenta de Azure del desarrollador. Este enfoque suele ser la manera más sencilla de autenticarse en los servicios de Azure durante el desarrollo local, ya que no requiere crear ni administrar entidades de servicio ni secretos.

Diagrama que muestra cómo una aplicación de Python durante el desarrollo local usa las credenciales del desarrollador para conectarse a Azure mediante la obtención de esas credenciales de las herramientas de desarrollo instaladas localmente.

Para permitir que una aplicación se autentique en Azure durante el desarrollo local mediante las propias credenciales de Azure del desarrollador, el desarrollador primero debe iniciar sesión con una de las herramientas de línea de comandos compatibles:

  • CLI de Azure (az login)
  • CLI para desarrolladores de Azure (azd login)
  • Azure PowerShell (Connect-AzAccount)

Una vez iniciada la sesión, la biblioteca de identidades de Azure para Python puede detectar automáticamente la sesión activa y recuperar los tokens necesarios de la memoria caché de credenciales. Esta funcionalidad permite que la aplicación se autentique en los servicios de Azure como el usuario que ha iniciado sesión, sin necesidad de ninguna configuración adicional ni secretos codificados.

Este comportamiento se habilita cuando se usa DefaultAzureCredential, que recurre de forma transparente a las credenciales basadas en CLI en entornos locales.

El uso de las credenciales de Azure de un desarrollador que ha iniciado sesión es la configuración más sencilla para el desarrollo local. Aprovecha la cuenta de Azure existente de cada miembro del equipo, lo que permite el acceso sin problemas a los servicios de Azure sin necesidad de configuración adicional.

Sin embargo, las cuentas de desarrollador suelen tener permisos más amplios que la aplicación en producción. Estos permisos más amplios pueden provocar incoherencias en las pruebas o permitir accidentalmente las operaciones que la aplicación no estaría autorizada para realizar en un entorno de producción. Para reflejar estrechamente los permisos de producción y mejorar la posición de seguridad, puede crear entidades de servicio específicas de la aplicación para el desarrollo local. Estas identidades:

  • Solo se pueden asignar los roles y permisos que necesita la aplicación.
  • Principio de privilegios mínimos
  • Ofrecer pruebas coherentes del comportamiento relacionado con el acceso entre entornos

Los desarrolladores pueden configurar el entorno local para usar el principal de servicio a través de variables de entorno y DefaultAzureCredential lo detecta automáticamente. Para más información, consulte el artículo Autenticación de aplicaciones de Python en servicios de Azure durante el desarrollo local mediante entidades de servicio.

1 - Creación de un grupo de seguridad de Microsoft Entra para el desarrollo local

En la mayoría de los escenarios de desarrollo, varios desarrolladores contribuyen a la misma aplicación. Para simplificar el control de acceso y garantizar permisos coherentes en todo el equipo, se recomienda crear primero un grupo de seguridad de Microsoft Entra específicamente para las necesidades de desarrollo local de la aplicación.

La asignación de roles de Azure en el nivel de grupo, en lugar de a usuarios individuales, ofrece varias ventajas clave:

  • Asignaciones de roles coherentes

    Todos los desarrolladores del grupo heredan automáticamente los mismos roles y permisos, lo que garantiza un entorno de desarrollo uniforme.

  • Administración simplificada de roles

    Cuando la aplicación requiere un nuevo rol, solo tiene que agregarlo una vez al grupo. No es necesario actualizar los permisos de usuario individuales.

  • Incorporación sencilla

    A los nuevos desarrolladores se les pueden conceder los permisos necesarios simplemente agregándolos al grupo. No se requieren asignaciones de roles manuales.

Si su organización ya tiene un grupo de seguridad de Microsoft Entra adecuado para el equipo de desarrollo, puede reutilizarlo. De lo contrario, puede crear un nuevo grupo específicamente para la aplicación.

Para crear un grupo de seguridad en Microsoft Entra ID, use el comando az ad group create en Azure CLI.

Este comando requiere los parámetros siguientes:

--display-name: un nombre fácil de usar para el grupo.

--mail-nickname: un identificador único usado para el correo electrónico y la referencia interna

Se recomienda basar el nombre del grupo en el nombre de la aplicación e incluir un sufijo como -local-dev para indicar claramente su propósito.

#!/bin/bash
az ad group create \
    --display-name MyDisplay \
    --mail-nickname MyDisplay  \
    --description "<group-description>"
# PowerShell syntax
az ad group create `
    --display-name MyDisplay `
    --mail-nickname MyDisplay `
    --description "<group-description>"

Después de ejecutar el az ad group create comando, copie el valor de la id propiedad desde la salida del comando. Necesita el Object ID del grupo de seguridad de Microsoft Entra para asignar roles en pasos posteriores de este artículo. Para recuperar de nuevo Object ID más tarde, use el siguiente comando az ad group show: az ad group show --group "my-app-local-dev" --query id --output tsv.

Para agregar un usuario al grupo, primero debe obtener la Object ID de la cuenta de usuario de Azure que desea agregar. Use el comando az ad user list con el parámetro --filter para buscar un usuario específico por nombre visible. El --query parámetro ayuda a limitar la salida a los campos pertinentes:

#!/bin/bash
az ad user list \
--filter "startswith(displayName, 'Bob')" \
--query "[].{objectId:id, displayName:displayName}" \
--output table
# PowerShell syntax
az ad user list `
    --filter "startswith(displayName, 'Bob')" `
    --query "[].{objectId:id, displayName:displayName}" `
    --output table

Una vez que tenga el Object ID del usuario, puede agregarlos al grupo mediante el comando az ad group member add .

#!/bin/bash
az ad group member add \
    --group <group-name> \
    --member-id <object-id>
# PowerShell syntax
az ad group member add `
    --group <group-name> `
    --member-id <object-id>

Nota:

De forma predeterminada, la creación de grupos de seguridad de Microsoft Entra se limita a determinados roles con privilegios en un directorio. Si no puede crear un grupo, póngase en contacto con un administrador del directorio. Si no puede agregar miembros a un grupo existente, póngase en contacto con el propietario del grupo o con un administrador de directorios. Para obtener más información, consulte Administración de grupos de Microsoft Entra y pertenencia a grupos.

2: Asignación de roles al grupo de Microsoft Entra

Después de crear el grupo de seguridad de Microsoft Entra y agregar miembros, el siguiente paso es determinar qué roles (permisos) requiere la aplicación y asignar esos roles al grupo en el ámbito adecuado.

  • Determinación de los roles necesarios

    Identifique los roles que la aplicación necesita para funcionar. Algunos ejemplos comunes son:

    • Usuario de Azure Key Vault Secrets: para leer secretos de Azure Key Vault
    • Colaborador de datos de cola de Storage: para enviar mensajes a Azure Queue Storage

    Consulte las definiciones de roles integradas para obtener más opciones.

  • Elegir un ámbito para la asignación de roles

    Los roles se pueden asignar en distintos ámbitos:

    • Nivel de recurso (por ejemplo, una sola bóveda de claves o cuenta de almacenamiento)
    • Nivel de grupo de recursos (recomendado para la mayoría de las aplicaciones)
    • Nivel de suscripción (use con precaución: acceso más amplio)

En este ejemplo, asignamos roles en el ámbito del grupo de recursos, que es típico cuando todos los recursos de aplicación se agrupan en un grupo de recursos.

A un usuario, grupo o entidad de servicio de aplicación se le asigna el rol en Azure con el comando az role assignment create. Puede especificar un grupo con su Object ID.

#!/bin/bash
az role assignment create --assignee <objectId> \
    --scope /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName> \
    --role "<roleName>" 
# PowerShell syntax
az role assignment create `
    --assignee <objectId> `
    --scope /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName> `
    --role "<roleName>"

Para obtener los nombres de roles que se pueden asignar, use el comando az role definition list.

#!/bin/bash
az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table
# PowerShell syntax
az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table

Para conceder acceso de lectura, escritura y eliminación a contenedores y datos de blobs de Azure Storage para todas las cuentas de almacenamiento de un grupo de recursos específico, asigne el rol Colaborador de datos de Storage Blob al grupo de seguridad de Microsoft Entra.

#!/bin/bash
az role assignment create --assignee bbbbbbbb-1111-2222-3333-cccccccccccc \
    --scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-python-sdk-auth-example \
    --role "Storage Blob Data Contributor"
# PowerShell syntax
az role assignment create --assignee bbbbbbbb-1111-2222-3333-cccccccccccc `
    --scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-python-sdk-auth-example `
    --role "Storage Blob Data Contributor"

Para obtener información sobre cómo asignar permisos en el nivel de recurso o suscripción mediante la CLI de Azure, consulte el artículo Asignación de roles de Azure mediante la CLI de Azure.

3 - Inicio de sesión en Azure mediante la CLI de Azure, Azure PowerShell, la CLI para desarrolladores de Azure o en un explorador

Para autenticarse con su cuenta de Azure, elija uno de los métodos siguientes:

Abra un terminal en la estación de trabajo del desarrollador e inicie sesión en Azure desde la CLI de Azure.

az login

4: Implementación de DefaultAzureCredential en la aplicación

Para autenticar objetos de cliente del SDK de Azure con Azure, la aplicación debe usar la DefaultAzureCredential clase del azure-identity paquete. Este es el método de autenticación recomendado para las implementaciones de desarrollo y producción locales.

En un escenario de desarrollo local, DefaultAzureCredential funciona comprobando secuencialmente los orígenes de autenticación disponibles. En concreto, busca sesiones activas en las siguientes herramientas:

  • CLI de Azure (az login)
  • Azure PowerShell (Connect-AzAccount)
  • CLI para desarrolladores de Azure (inicio de sesión de autenticación azd)

Si el desarrollador ha iniciado sesión en Azure con cualquiera de estas herramientas, DefaultAzureCredential detecta automáticamente la sesión y usa esas credenciales para autenticar la aplicación con los servicios de Azure. Esto permite a los desarrolladores autenticarse de forma segura sin almacenar secretos ni modificar código para distintos entornos.

Empiece agregando el paquete azure.identity a la aplicación.

pip install azure-identity

A continuación, para cualquier código de Python que cree un objeto cliente del Azure SDK en tu aplicación, quieres:

  1. Importar la clase DefaultAzureCredential desde el módulo azure.identity.
  2. Crear un objeto DefaultAzureCredential.
  3. Pasar el objeto DefaultAzureCredential al constructor de objetos de cliente del SDK de Azure.

En el segmento de código siguiente se muestra un ejemplo de estos pasos.

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)