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

Cuando los desarrolladores crean aplicaciones en la nube, normalmente depuran y prueban aplicaciones en su estación de trabajo local. Cuando se ejecuta una aplicación en la estación de trabajo de un desarrollador durante el desarrollo local, esta debe autenticarse en los servicios de Azure que usa. En este artículo se explica cómo usar las credenciales de Azure de un desarrollador para autenticar la aplicación en Azure durante el desarrollo local.

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

Para que una aplicación se autentique en Azure durante el desarrollo local mediante las credenciales de Azure del desarrollador, un desarrollador debe iniciar sesión en Azure desde la CLI de Azure, Azure PowerShell o la CLI para desarrolladores de Azure. El SDK de Azure para Python puede detectar que el desarrollador ha iniciado sesión desde una de estas herramientas y, a continuación, obtener las credenciales necesarias de la caché de credenciales para autenticar la aplicación en Azure como el usuario que ha iniciado sesión.

Este enfoque es más fácil de configurar para un equipo de desarrollo, ya que aprovecha las cuentas de Azure existentes de los desarrolladores. Sin embargo, es probable que la cuenta de un desarrollador tenga más permisos que los que requiere la aplicación, lo que supone superar los permisos con los que se ejecutará la aplicación en producción. Como alternativa, puede crear entidades de servicio de aplicación para usarlas durante el desarrollo local, que se puede limitar a tener solo el acceso necesario para la aplicación.

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

Puesto que casi siempre hay varios desarrolladores que trabajan en una aplicación, se recomienda crear primero un grupo de seguridad de Microsoft Entra para encapsular los roles (permisos) que la aplicación necesita en el desarrollo local. Este enfoque ofrece las siguientes ventajas.

  • Todos los desarrolladores están seguros de tener asignados los mismos roles, ya que los roles se asignan en el nivel de grupo.
  • Si se necesita un nuevo rol para la aplicación, solo debe agregarse al grupo De Microsoft Entra para la aplicación.
  • Si un nuevo desarrollador se une al equipo, simplemente debe agregarse al grupo correcto de Microsoft Entra para obtener los permisos correctos para trabajar en la aplicación.

Si tiene un grupo de seguridad de Microsoft Entra existente para el equipo de desarrollo, puede usar ese grupo. De lo contrario, complete los pasos siguientes para crear un grupo de seguridad de Microsoft Entra.

El comando az ad group create se usa para crear grupos en Microsoft Entra ID. Los parámetros --display-name y --main-nickname son obligatorios. El nombre proporcionado al grupo debe basarse en el nombre de la aplicación. También resulta útil incluir una cadena como “local-dev” en el nombre del grupo para indicar el propósito del grupo.

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

Copie el valor de la id propiedad en la salida del comando. Este es el identificador de objeto del grupo. Lo necesita en pasos posteriores. También puede usar el comando az ad group show para recuperar esta propiedad.

Para agregar miembros al grupo, necesita el identificador de objeto del usuario de Azure. Use az ad user list para enumerar las entidades de servicio disponibles. El comando del parámetro --filter acepta filtros de estilo OData y se puede usar para filtrar la lista por el nombre para mostrar del usuario, tal y como se muestra. El --query parámetro limita la salida a las columnas de interés.

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

El comando az ad group member add se puede usar para agregar miembros a grupos.

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 para el 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 y pertenencia a grupos de Microsoft Entra.

2- Asignar roles al grupo Microsoft Entra

A continuación, debe determinar qué roles (permisos) necesita la aplicación y en qué recursos y asignar dichos roles a la aplicación. En este ejemplo, los roles se asignarán al grupo Microsoft Entra creado en el paso 1. Los roles se pueden asignar en un ámbito de recurso, grupo de recursos o suscripción. En este ejemplo se muestra cómo asignar roles en el ámbito del grupo de recursos, ya que la mayoría de las aplicaciones agrupan todos sus recursos de Azure en un único grupo de recursos.

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

az role assignment create --assignee {objectId} \
    --scope /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName} \
    --role "{roleName}" 

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

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

Por ejemplo, para permitir que los miembros de un grupo tengan un identificador de objeto de acceso de 00000000-0000-0000-0000-000000000000 lectura, escritura y eliminación a contenedores y datos de Blob de Azure Storage en todas las cuentas de almacenamiento del grupo de recursos msdocs-python-sdk-auth-example de la suscripción con el identificador 11111111-1111-1111-1111-111111111111, asignaría el rol Colaborador de datos de Storage Blob al grupo mediante el siguiente comando.

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 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

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 en Azure, la aplicación debe usar la DefaultAzureCredential clase del azure.identity paquete. En este escenario, DefaultAzureCredential comprobará secuencialmente si el desarrollador ha iniciado sesión en Azure mediante la CLI de Azure, Azure PowerShell o la CLI para desarrolladores de Azure. Si el desarrollador ha iniciado sesión en Azure con cualquiera de estas herramientas, la aplicación usará las credenciales usadas para iniciar sesión en la herramienta para autenticarse en Azure.

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 de cliente del SDK de Azure en la aplicación, querrá:

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

En el siguiente segmento de código 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)