Autenticación de aplicaciones de Python en servicios de Azure mediante el SDK de Azure para Python

Cuando una aplicación necesita acceder a un recurso de Azure, como Azure Storage, Azure Key Vault o servicios de Azure AI, la aplicación debe autenticarse en Azure. Este requisito es cierto para todas las aplicaciones, independientemente de si se implementan en Azure, se implementan de forma local o en desarrollo en una estación de trabajo de desarrollador local. En este artículo se describen los enfoques recomendados para autenticar una aplicación en Azure cuando se usa el SDK de Azure para Python.

Use la autenticación basada en tokens en lugar de cadena de conexión para las aplicaciones cuando se autentiquen en los recursos de Azure. El SDK de Azure para Python proporciona clases que admiten la autenticación basada en tokens. Las aplicaciones se pueden autenticar sin problemas en los recursos de Azure, tanto si la aplicación está en desarrollo local, implementada en Azure como si se implementa en un servidor local.

El tipo específico de autenticación basada en tokens que usa una aplicación para autenticarse en los recursos de Azure depende de dónde se ejecuta la aplicación. Los tipos de autenticación basada en tokens se muestran en el diagrama siguiente.

A diagram that shows the recommended token-based authentication strategies for an app depending on where it's running.

  • Cuando un desarrollador ejecuta una aplicación durante el desarrollo local: la aplicación se autentica en Azure mediante una entidad de servicio de aplicación para el desarrollo local o las credenciales de Azure del desarrollador. Estas opciones se describen en la sección Autenticación durante el desarrollo local.
  • Cuando una aplicación se hospeda en Azure: la aplicación se autentica en los recursos de Azure mediante una identidad administrada. Esta opción se describe en la sección Autenticación en entornos de servidor.
  • Cuando una aplicación se hospeda e implementa de forma local: la aplicación se autentica en los recursos de Azure mediante una entidad de servicio de aplicación. Esta opción se describe en la sección Autenticación en entornos de servidor.

DefaultAzureCredential

La clase DefaultAzureCredential proporcionada por el SDK de Azure permite a las aplicaciones usar diferentes métodos de autenticación en función del entorno en el que se ejecutan. De este modo, las aplicaciones se pueden promover desde el desarrollo local para probar entornos a producción sin cambios en el código.

Configure el método de autenticación adecuado para cada entorno y DefaultAzureCredential detecte y use automáticamente ese método de autenticación. El uso de DefaultAzureCredential se prefiere sobre la codificación manual de la lógica condicional o las marcas de características para usar diferentes métodos de autenticación en distintos entornos.

Los detalles sobre el uso de la DefaultAzureCredential clase se describen en la sección Uso de DefaultAzureCredential en una aplicación.

Ventajas de la autenticación basadas en token

Use la autenticación basada en tokens en lugar de usar cadena de conexión al compilar aplicaciones para Azure. La autenticación basada en tokens ofrece las siguientes ventajas sobre la autenticación con cadena de conexión s:

  • Los métodos de autenticación basados en tokens descritos en este artículo le permiten establecer los permisos específicos necesarios para la aplicación en el recurso de Azure. Esta práctica sigue el principio de privilegios mínimos. Por el contrario, una cadena de conexión concede derechos completos al recurso de Azure.
  • Cualquiera o cualquier aplicación con un cadena de conexión puede conectarse a un recurso de Azure, pero los métodos de autenticación basados en tokens limitan el acceso al recurso solo a las aplicaciones diseñadas para acceder al recurso.
  • Con una identidad administrada, no hay ningún secreto de aplicación que almacenar. La aplicación es más segura porque no hay ningún secreto de aplicación ni cadena de conexión que se pueda poner en peligro.
  • El paquete azure.identity del SDK de Azure administra los tokens automáticamente en segundo plano. Los tokens administrados hacen que el uso de la autenticación basada en tokens sea tan fácil de usar como cadena de conexión.

Limite el uso de cadena de conexión a aplicaciones de prueba de concepto iniciales o prototipos de desarrollo que no tengan acceso a la producción ni a los datos confidenciales. De lo contrario, las clases de autenticación basadas en tokens disponibles en el SDK de Azure siempre se prefieren cuando se autentican en los recursos de Azure.

Autenticación en entornos de servidor

Cuando se hospeda en un entorno de servidor, a cada aplicación se le asigna una identidad de aplicación única por entorno donde se ejecuta la aplicación. En Azure, una identidad de aplicación se representa mediante una entidad de servicio. Este tipo especial de entidad de seguridad identifica y autentica las aplicaciones en Azure. El tipo de entidad de servicio que se va a usar para la aplicación depende de dónde se ejecute la aplicación:

Método de autenticación Descripción
Aplicaciones hospedadas en Azure Las aplicaciones hospedadas en Azure deben usar una entidad de servicio de identidad administrada. Las identidades administradas están diseñadas para representar la identidad de una aplicación hospedada en Azure y solo se pueden usar con aplicaciones hospedadas en Azure.

Por ejemplo, una aplicación web de Django hospedada en App de Azure Service se asignaría a una identidad administrada. La identidad administrada asignada a la aplicación se usaría para autenticar la aplicación en otros servicios de Azure.

Las aplicaciones que se ejecutan en Azure Kubernetes Service (AKS) pueden usar una credencial de identidad de carga de trabajo. Esta credencial se basa en una identidad administrada que tiene una relación de confianza con una cuenta de servicio de AKS.
,
Aplicaciones hospedadas fuera de Azure
(por ejemplo, aplicaciones locales)
Las aplicaciones hospedadas fuera de Azure (por ejemplo, aplicaciones locales) que necesitan conectarse a los servicios de Azure deben usar una entidad de servicio de aplicación. Una entidad de servicio de aplicación representa la identidad de la aplicación en Azure y se crea a través del proceso de registro de la aplicación.

Por ejemplo, considere una aplicación web de Django hospedada localmente que use Azure Blob Storage. Crearía una entidad de servicio de aplicación para la aplicación mediante el proceso de registro de la aplicación. Los AZURE_CLIENT_ID, AZURE_TENANT_IDy AZURE_CLIENT_SECRET se almacenarían como variables de entorno que leerá la aplicación en tiempo de ejecución y permitirán que la aplicación se autentique en Azure mediante la entidad de servicio de la aplicación.

Autenticación durante el desarrollo local

Cuando una aplicación se ejecuta en la estación de trabajo de un desarrollador durante el desarrollo local, todavía debe autenticarse en los servicios de Azure usados por la aplicación. Hay dos estrategias principales para autenticar aplicaciones en Azure durante el desarrollo local:

Método de autenticación Descripción
Cree objetos de entidad de servicio de aplicación dedicados que se usarán durante el desarrollo local. En este método, los objetos de entidad de servicio de aplicación dedicada se configuran mediante el proceso de registro de aplicaciones para su uso durante el desarrollo local. A continuación, la identidad de la entidad de servicio se almacena como variables de entorno a las que va a acceder la aplicación cuando se ejecuta en el desarrollo local.

Este método permite asignar los permisos de recursos específicos necesarios para la aplicación a los objetos de entidad de servicio utilizados por los desarrolladores durante el desarrollo local. Esta práctica garantiza que la aplicación solo tiene acceso a los recursos específicos que necesita y replica los permisos que tendrá la aplicación en producción.

La desventaja de este enfoque es la necesidad de crear objetos de entidad de servicio independientes para cada desarrollador que trabaja en una aplicación.

Autentíque la aplicación en Azure mediante las credenciales del desarrollador durante el desarrollo local. En este método, un desarrollador debe iniciar sesión en Azure desde la CLI de Azure, Azure PowerShell o la CLI para desarrolladores de Azure en su estación de trabajo local. A continuación, la aplicación puede acceder a las credenciales del desarrollador desde el almacén de credenciales y usar esas credenciales para acceder a los recursos de Azure desde la aplicación.

Este método tiene la ventaja de una configuración más sencilla porque un desarrollador solo necesita iniciar sesión en su cuenta de Azure a través de una de las herramientas de desarrollo mencionadas anteriormente. El inconveniente de este enfoque es que es probable que la cuenta del desarrollador tenga más permisos de los que necesita la aplicación. Como resultado, la aplicación no replica con precisión los permisos con los que se ejecutará en producción.

Uso de DefaultAzureCredential en una aplicación

Para usar DefaultAzureCredential en una aplicación de Python, agregue el paquete azure.identity a la aplicación.

pip install azure-identity

En el ejemplo de código siguiente se muestra cómo crear instancias de un DefaultAzureCredential objeto y usarlo con una clase de cliente de Azure SDK. En este caso, es un BlobServiceClient objeto que se usa para acceder a Azure Blob Storage.

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

# Acquire a credential object
credential = DefaultAzureCredential()

blob_service_client = BlobServiceClient(
        account_url="https://<my_account_name>.blob.core.windows.net",
        credential=credential)

El DefaultAzureCredential objeto detecta automáticamente el mecanismo de autenticación configurado para la aplicación y obtiene los tokens necesarios para autenticar la aplicación en Azure. Si una aplicación usa más de un cliente del SDK, puede usar el mismo objeto de credencial con cada objeto cliente del SDK.

Secuencia de métodos de autenticación cuando se usa DefaultAzureCredential

Internamente, DefaultAzureCredential implementa una cadena de proveedores de credenciales para autenticar aplicaciones en recursos de Azure. Cada proveedor de credenciales puede detectar si las credenciales de ese tipo están configuradas para la aplicación. El DefaultAzureCredential objeto comprueba secuencialmente cada proveedor en orden y usa las credenciales del primer proveedor que tiene configuradas las credenciales.

El orden en el que DefaultAzureCredential busca las credenciales se muestra en el diagrama y la tabla siguientes:

A diagram that shows the sequence in which DefaultAzureCredential checks to see what authentication source is configured for an application.

Tipo de credencial Descripción
Entorno El DefaultAzureCredential objeto lee un conjunto de variables de entorno para determinar si se estableció una entidad de servicio de aplicación (usuario de aplicación) para la aplicación. Si es así, DefaultAzureCredential usa estos valores para autenticar la aplicación en Azure.

Este método se usa con más frecuencia en entornos de servidor, pero también puede usarlo al desarrollar localmente.
Identidad de la carga de trabajo Si la aplicación se implementa en Azure Kubernetes Service (AKS) con la identidad administrada habilitada, DefaultAzureCredential autentica la aplicación en Azure mediante esa identidad administrada. La identidad de carga de trabajo representa una relación de confianza entre una identidad administrada asignada por el usuario y una cuenta de servicio de AKS. La autenticación mediante una identidad de carga de trabajo se describe en el artículo de AKS Uso de Id. de carga de trabajo de Microsoft Entra con Azure Kubernetes Service.
Identidad administrada Si la aplicación se implementa en un host de Azure con la identidad administrada habilitada, DefaultAzureCredential autentica la aplicación en Azure mediante esa identidad administrada. La autenticación mediante una identidad administrada se describe en la sección Autenticación en entornos de servidor.

Este método solo está disponible cuando una aplicación se hospeda en Azure mediante un servicio como App de Azure Service, Azure Functions o Azure Virtual Machines.
CLI de Azure Si se ha autenticado en Azure mediante el comando de la az login CLI de Azure, DefaultAzureCredential autentica la aplicación en Azure mediante esa misma cuenta.
Azure PowerShell Si se ha autenticado en Azure mediante el Connect-AzAccount cmdlet de Azure PowerShell, DefaultAzureCredential autentica la aplicación en Azure mediante esa misma cuenta.
CLI de desarrollo de Azure Si se ha autenticado en Azure mediante el comando de la azd auth login CLI para desarrolladores de Azure, DefaultAzureCredential autentica la aplicación en Azure mediante esa misma cuenta.
Interactivo Si está habilitado, DefaultAzureCredential le autentica interactivamente a través del explorador predeterminado del sistema actual. Esta opción está deshabilitada de forma predeterminada.

Nota:

Debido a un problema conocido, VisualStudioCodeCredential se ha quitado de la cadena de DefaultAzureCredential tokens. Cuando el problema se resuelva en una versión futura, este cambio se revertirá. Para más información, consulte Biblioteca cliente de Identidad de Azure para Python.