Autenticación de aplicaciones de Python en los servicios de Azure mediante el SDK de Azure para Python
Cuando una app necesita acceder a un recurso de Azure, como Azure Storage, Azure Key Vault o servicios de Azure AI, la app debe autenticarse en Azure. Este requisito se cumple para todas las apps, tanto si se implementan en Azure, como si se implementan en el entorno local o se están desarrollando 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.
Enfoque de autenticación de aplicaciones recomendado
Use la autenticación basada en tokens en lugar de cadenas de conexión para las aplicaciones cuando se autentiquen en los recursos de Azure. La biblioteca de clientes de Azure Identity para Python proporciona clases que admiten la autenticación basada en tokens y permiten que las aplicaciones se autentiquen sin problemas en los recursos de Azure, tanto si la aplicación está en desarrollo local como si está implementada en Azure o 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 ejecute la aplicación. Los tipos de autenticación basada en tokens se muestran en el diagrama siguiente.
- 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 localmente: 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 que proporciona la biblioteca cliente Azure Identity de Azure permite a las aplicaciones usar diferentes métodos de autenticación en función del entorno en el que se ejecuten. De esta manera, las aplicaciones se pueden promover desde el desarrollo local hasta los entornos de prueba y la producción sin cambios en el código.
Debe configurar el método de autenticación adecuado para cada entorno y DefaultAzureCredential
detecta y utiliza automáticamente ese método de autenticación. Es preferible usar DefaultAzureCredential
frente a la codificación manual de lógica condicional o marcas de características para utilizar diferentes métodos de autenticación en diferentes entornos.
Los detalles sobre el uso de la clase DefaultAzureCredential
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 cadenas de conexión al compilar aplicaciones para Azure. La autenticación basada en tokens ofrece las siguientes ventajas sobre la autenticación con cadenas de conexión:
- Los métodos de autenticación basados en tokens descritos en este artículo permiten establecer los permisos específicos que necesita 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.
- Cualquier persona o aplicación con una 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 destinadas a 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 ninguna cadena de conexión o secreto de aplicación que pueda verse comprometido.
- El paquete azure-identity adquiere y administra los tokens de Microsoft Entra por ti. Esto hace que el uso de la autenticación basada en tokens sea tan fácil de usar como una cadena de conexión.
Limite el uso de cadenas de conexión a aplicaciones de prueba de concepto iniciales o prototipos de desarrollo que no accedan a datos confidenciales o de producción. De lo contrario, siempre se prefieren las clases de autenticación basadas en tokens disponibles en la biblioteca cliente Azure Identity al autenticarse en los recursos de Azure.
Autenticación en entornos de servidor
Cuando va a hospedar en un entorno de servidor, a cada app se le asigna una identidad de aplicación única por entorno en el que se ejecuta la app. En Azure, una identidad de app 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 esté ejecutando 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, a una aplicación web de Django hospedada en Azure App Service se le asignarí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 usa 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. AZURE_CLIENT_ID , AZURE_TENANT_ID y AZURE_CLIENT_SECRET se almacenarían como variables de entorno para que la aplicación las lea en tiempo de ejecución y permitan 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 app se ejecuta en la estación de trabajo de un desarrollador durante el desarrollo local, debe autenticarse en los servicios de Azure que usa la aplicación. Hay dos estrategias principales para autenticar aplicaciones en Azure durante el desarrollo local:
Método de autenticación | Descripción |
---|---|
Crear 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 dedicados se configuran mediante el proceso de registro de la aplicación 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 tenga 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. |
Autenticar la aplicación en Azure con 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 antes mencionadas. 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
DefaultAzureCredential es una secuencia ordenada de mecanismos para autenticarse en Microsoft Entra ID. Cada mecanismo de autenticación es una clase que implementa el protocolo TokenCredential y se conoce como credencial. En tiempo de ejecución, DefaultAzureCredential
intenta autenticarse con la primera credencial. Si esa credencial no puede adquirir un token de acceso, se intenta utilizar la siguiente credencial de la secuencia, y así sucesivamente hasta que se obtenga correctamente un token de acceso. De esta manera, la aplicación puede usar diferentes credenciales en distintos entornos sin implementar código específico del entorno.
Para usar DefaultAzureCredential
en una app de Python, agregue el paquete azure-identity a la aplicación.
pip install azure-identity
Se accede a los servicios de Azure mediante clases de cliente especializadas de las distintas bibliotecas cliente del SDK de Azure. En el ejemplo de código siguiente se muestra cómo crear instancias de un objeto DefaultAzureCredential
y usarlo con una clase de cliente del SDK de Azure. En este caso, es un objeto BlobServiceClient
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)
Cuando el código anterior se ejecuta en su estación de trabajo de desarrollo local, busca en las variables de entorno un principal de servicio de aplicación o en las herramientas de desarrollo instaladas localmente, como la CLI de Azure, un conjunto de credenciales de desarrollador. Se puede usar cualquier enfoque para autenticar la aplicación en los recursos de Azure durante el desarrollo local.
Cuando se implementa en Azure, este mismo código también puede autenticar la aplicación en los recursos de Azure. DefaultAzureCredential
puede recuperar la configuración del entorno y las configuraciones de identidad gestionada para autenticarse automáticamente en los servicios de Azure.