Compartir vía


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 las 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 con las credenciales de Azure del desarrollador, un desarrollador debe haber iniciado sesión en Azure desde la CLI de Azure, Azure PowerShell o la CLI de desarrollador de Azure. El SDK de Azure para Python es capaz de 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 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 pueden limitar para tener solo el acceso necesario para la aplicación.

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

Dado 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 necesita la aplicación 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 es necesario agregarlo al grupo 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 su equipo de desarrollo, puede usar ese grupo. De lo contrario, siga estos pasos 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 propiedad id en la salida del comando. Es el identificador de objeto del grupo. Lo necesitará 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 parámetro --query 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 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

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 el á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 el rol en Azure con 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 roles 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 con un ID de objeto de bbbbbbbb-1111-2222-3333-cccccccccccc lea, escriba y elimine el acceso a los contenedores y datos de blobs de Azure Storage para todas las cuentas de almacenamiento del grupo de recursos msdocs-python-sdk-auth-example en la suscripción con ID aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e, asignaría el rol de Colaborador de datos de blobs de almacenamiento al grupo mediante el siguiente comando.

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

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 clase DefaultAzureCredential del paquete azure.identity. 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 Python que cree un objeto de cliente del SDK de Azure en la aplicación, querrá:

  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)