Tutorial: Autenticación integrada para aplicaciones de Python con los servicios de Azure

Azure Active Directory (Azure AD) junto con Azure Key Vault proporcionan un medio completo y cómodo para que las aplicaciones se autentiquen con los servicios de Azure, así como con los servicios de terceros en los que participan las claves de acceso.

Después de proporcionar alguna información previa, en este tutorial se explican estas características de autenticación en el contexto del ejemplo github.com/Azure-Samples/python-integrated-authentication.

Para mayor comodidad, el ejemplo ya está implementado en Azure para que pueda verlo en funcionamiento. Si desea implementar el ejemplo en su propia suscripción de Azure, el repositorio también incluye los scripts de implementación desde la CLI de Azure.

Parte 1: Información previa

Aunque muchos servicios de Azure se basan exclusivamente en el control de acceso basado en roles para la autorización, ciertos servicios controlan el acceso a sus respectivos recursos mediante secretos o claves. Estos servicios incluyen Azure Storage, las bases de datos, Cognitive Services, Key Vault y Event Hubs.

Al crear una aplicación en la nube que usa recursos de estos servicios, se usan Azure Portal, la CLI de Azure o Azure PowerShell para crear y configurar las claves de la aplicación que están vinculadas a directivas de acceso específicas. Dichas claves impiden el acceso a esos recursos específicos de la aplicación por cualquier otro código no autorizado.

Dentro de este diseño general, normalmente las aplicaciones en la nube deben administrar esas claves y autenticarse con cada servicio de forma individual, un proceso que puede ser tedioso y propenso a errores. La administración de las claves directamente en el código de la aplicación también pone en riesgo la exposición de esas claves en el control de código fuente y las claves se podrían almacenar en estaciones de trabajo de desarrollo no seguras.

Afortunadamente, Azure proporciona dos servicios específicos para simplificar el proceso y proporcionar mayor seguridad:

  • Azure Key Vault proporciona un almacenamiento seguro basado en la nube para las claves de acceso (junto con claves criptográficas y certificados, que no se describen en este artículo). Mediante el uso de Key Vault, la aplicación solo tiene acceso a estas claves en tiempo de ejecución, por lo que nunca aparecen directamente en el código fuente.

  • Con las identidades administradas de Azure Active Directory (Azure AD), la aplicación se debe autenticar una sola vez con Active Directory. La aplicación se autenticará automáticamente con otros servicios de Azure, incluido Key Vault. Como resultado, el código nunca debe preocuparse de claves ni de otras credenciales para esos servicios de Azure. Mejor aún, puede ejecutar el mismo código tanto de forma local como en la nube con requisitos mínimos de configuración.

Al usar Azure AD y Key Vault juntos, la aplicación nunca necesita autenticarse con servicios individuales de Azure y puede acceder de forma fácil y segura a las claves necesarias para los servicios de terceros.

Importante

En este artículo se usa el término genérico común "clave" para hacer referencia a lo que se almacena como "secretos" en Azure Key Vault, por ejemplo, una clave de acceso para una API REST. Este uso no se debe confundir con la administración de claves criptográficas de Key Vault, que es una característica independiente de los secretos de Key Vault.

Escenario de aplicación en la nube de ejemplo

Para comprender el proceso de autenticación de Azure más profundamente, considere el siguiente escenario:

  • Una aplicación principal expone un punto de conexión de API público (no autenticado) que responde a las solicitudes HTTP con datos JSON. El punto de conexión de ejemplo que se muestra en este artículo se implementa como una aplicación de Flask simple implementada en Azure App Service.

  • Para generar la respuesta, la API invoca una API de terceros que requiere una clave de acceso. La aplicación recupera esa clave de acceso de Azure Key Vault en tiempo de ejecución.

  • Antes de devolver la respuesta, la API escribe un mensaje en una cola de Azure Storage para su procesamiento posterior. (El procesamiento específico de estos mensajes no es de importancia para el escenario principal).

Diagrama del escenario de la aplicación

Nota

Aunque un punto de conexión de API pública normalmente está protegido por su propia clave de acceso, para los fines de este artículo se supone que el punto de conexión está abierto y no autenticado. Esta suposición evita cualquier confusión entre las necesidades de autenticación de la aplicación con las de un autor de llamada externo de este punto de conexión. En este escenario no se muestra este tipo de autor de llamada externo.