BLOG | NGINX

Protección de aplicações en Microsoft Azure App Service con NGINX Plus

NGINX - Parte de F5 - horizontal, negro, tipo RGB
Miniatura de Cedric Derue
Cedric Derue
Publicado el 3 de octubre de 2018

El auge de la computación en la nube, y en particular de las ofertas de Plataforma como Servicio (PaaS) y Contenedor como Servicio (CaaS), está cambiando la forma en que las empresas implementan y operan sus aplicações comerciales. Uno de los desafíos más importantes al diseñar aplicações en la nube es elegir servicios de nube totalmente administrados que reduzcan costos y tareas operativas que consumen mucho tiempo sin comprometer la seguridad.

Esta publicación de blog le muestra cómo alojar aplicações en Microsoft Azure App Service y protegerlas con NGINX Plus para evitar ataques de Internet.

Breve descripción general de Microsoft Azure App Service

Microsoft Azure App Service es una plataforma de nivel empresarial y totalmente administrada que permite a las organizaciones implementar aplicaciones web, API y móviles en Microsoft Azure sin administrar la infraestructura subyacente, como se muestra en la Figura 1. Azure App Service proporciona las siguientes características principales:

  • Web Apps le permite implementar y ejecutar aplicaciones web en varios lenguajes y marcos (ASP.NET, Node.js, Java, PHP y Python). También administra aplicações web escalables y confiables utilizando Internet Information Services (IIS) con capacidades integrales de gestión de aplicaciones (monitoreo, cambio de staging a producción, eliminación de aplicações implementadas, etc.). También proporciona un entorno de ejecución de Docker para ejecutar aplicações web en Linux con contenedores.
  • API Apps ofrece las herramientas para implementar API REST con soporte CORS (intercambio de recursos de origen cruzado). Las aplicaciones de API de Azure se pueden proteger fácilmente con Azure Active Directory, inicio de sesión único (SSO) en redes sociales u OAuth, sin necesidad de realizar cambios en el código.
  • Las aplicaciones móviles proporcionan una forma rápida de implementar servicios de backend móvil que admiten funciones esenciales como autenticación, notificaciones push, administración de usuarios, almacenamiento en la nube, etc.
Figura 1: Servicio de aplicaciones de Azure

Con Azure App Service, Microsoft proporciona una forma rica y rápida de ejecutar aplicações web en la nube. De hecho, los desarrolladores pueden desarrollar sus aplicações localmente con ASP.NET, Java, Node.js, PHP y Python e implementarlas fácilmente en Azure App Service con Microsoft Visual Studio o la CLI de Azure. Los equipos de DevOps también pueden beneficiarse de la función de implementación continua de Azure App Service para implementar versiones de aplicação de forma rápida y fiable en múltiples entornos.

Las aplicações en Azure App Service pueden acceder a otros recursos implementados en Azure o pueden establecer conexiones a través de VPN con recursos corporativos locales.

Descripción de los entornos de Azure App Service

Básicamente, una aplicação creada con Azure App Service se expone directamente a Internet y se asigna a un subdominio de azurewebsites.net . Para mayor seguridad, puedes proteger tu aplicación con terminación SSL o con protocolos de autenticación y autorización como OAuth2 o OpenID Connect (OIDC). Sin embargo, no es posible personalizar la red con reglas de seguridad de entrada y salida detalladas ni aplicar middleware como un firewall de aplicação web (WAF) para evitar ataques maliciosos o exploits que provienen de Internet.

Si ejecuta aplicações confidenciales en Azure App Service y desea protegerlas, puede usar Azure App Service Environments (ASE). Un ASE es un entorno aislado implementado en una red virtual y dedicado a las aplicações de un solo cliente. De esta forma obtienes mayor control sobre el tráfico entrante y saliente de la red de aplicação .

Con ASEs puedes implementar aplicaciones web, API, móviles o de funciones dentro de un entorno más seguro a muy alta escala, como se muestra en la Figura 2.

Figura 2: NGINX ModSecurity WAF filtra el tráfico para un ASE de Azure

Creación de un nuevo ASE v2

Hay dos versiones del ASE: ASE v1 y ASE v2. En esta publicación analizamos ASE v2.

Puede crear un nuevo ASE v2 manualmente mediante el Portal de Azure o automáticamente mediante Azure Resource Manager.

Al crear un nuevo ASE, debe elegir entre dos tipos de implementación:

  • Un ASE externo expone las aplicações alojadas en ASE a través de una dirección IP pública.
  • Un ASE ILB expone las aplicações alojadas en ASE en una dirección IP privada a la que solo se puede acceder dentro de su red virtual de Azure. El punto final interno es lo que Azure denomina un equilibrador de carga interno (ILB).

En el siguiente ejemplo, elegimos un ASE ILB para evitar el acceso desde Internet. Por lo tanto, las aplicações implementadas en nuestro ASE solo son accesibles desde máquinas virtuales (VM) que se ejecutan en la misma red. Los siguientes dos comandos usan Azure Resource Manager y la CLI de Azure para aprovisionar un nuevo ILB ASE v2 :

$ modo de configuración de Azure arm $ grupo de implementación de Azure crear mi-grupo-de-recursos mi-nombre-de-implementación --template-uri https://raw.githubusercontent.com/azure/azure-quickstart-templates/master/201-web-app-asev2-ilb-create/azuredeploy.json

Cómo proteger el acceso a las aplicaciones en un ASE de acceso público

Si, por otro lado, quieres que tu aplicación sea accesible desde Internet, tendrás que protegerla contra atacantes maliciosos que podrían intentar robar información confidencial almacenada en tu aplicação.

Para proteger las aplicações en la capa 7 en un ASE, tiene dos opciones principales:

(Puede sustituir un controlador de entrega de aplicaciones personalizadas con capacidades WAF, pero no cubrimos ese caso de uso aquí).

La elección de la solución depende de sus limitaciones de seguridad. Por un lado, Azure Aplicação Gateway proporciona una solución llave en mano para el cumplimiento de la seguridad y no requiere que usted mantenga la infraestructura subyacente. Por otro lado, implementar NGINX Plus en máquinas virtuales le brinda una pila poderosa con más control y flexibilidad para ajustar sus reglas de seguridad.

Elegir entre Azure Aplicação Gateway y NGINX Plus para equilibrar la carga y proteger las aplicações creadas dentro de un ASE requiere una buena comprensión de las características que ofrece cada solución. Si bien Azure Aplicação Gateway funciona para casos de uso simples, para casos de uso complejos no proporciona muchas de las características que vienen estándar en NGINX Plus.

En la siguiente tabla se compara la compatibilidad con las características de seguridad y equilibrio de carga en Azure Aplicação Gateway y NGINX Plus. Más detalles sobre las características de NGINX Plus aparecen debajo de la tabla.

función Puerta de enlace de aplicação de Azure NGINX Plus
Capacidad de mitigación Capa de aplicação (Capa 7) Capa de aplicação (Capa 7)
Compatible con HTTP
Compatible con HTTP/2
Compatible con WebSockets
Descarga de SSL
Capacidades de enrutamiento Decisión simple basada en la URL de solicitud o afinidad de sesión basada en cookies Capacidades de enrutamiento avanzadas
Listas de control de acceso basadas en direcciones IP ❌ (debe definirse en el nivel de aplicación web en Azure)
Puntos finales Cualquier dirección IP interna de Azure, dirección IP pública de Internet, máquina virtual de Azure o servicio en la nube de Azure Cualquier dirección IP interna de Azure, dirección IP pública de Internet, máquina virtual de Azure o servicio en la nube de Azure
Compatibilidad con Azure Vnet Aplicações tanto internas (Vnet) como orientadas a Internet Aplicações tanto internas (Vnet) como orientadas a Internet
WAF
Ataques volumétricos Parcial Parcial
Ataques de protocolo Parcial Parcial
Ataques a la capa de aplicaciones
Autenticación básica HTTP
Autenticación JWT
SSO de OpenID Connect

Como puede ver, NGINX Plus y Azure Aplicação Gateway actúan como ADC con funciones de equilibrio de carga de capa 7 más un WAF para garantizar una protección sólida contra vulnerabilidades y exploits web comunes.

NGINX Plus proporciona varias características adicionales que faltan en Azure Aplicação Gateway:

  • Reescritura y redirección de URL: con NGINX Plus puede reescribir la URL de una solicitud antes de pasarla a un servidor backend. Esto significa que puede alterar la ubicación de los archivos o solicitar rutas sin modificar la URL anunciada a los clientes. También puedes redirigir las solicitudes. Por ejemplo, puede redirigir todas las solicitudes HTTP a un servidor HTTPS.
  • Límites de conexión y velocidad: puede configurar múltiples límites para controlar el tráfico hacia y desde sus instancias NGINX Plus. Estos incluyen límites en la cantidad de conexiones entrantes, la velocidad de las solicitudes entrantes, las conexiones a los nodos back-end y la velocidad de transmisión de datos desde NGINX Plus a los clientes.
  • Compatibilidad con HTTP/2 y WebSocket: NGINX Plus admite HTTP/2 y WebSocket en la capa de aplicação (capa 7). Azure Aplicação Gateway no lo hace; en cambio, Azure Load Balancer los admite en la capa de red (capa 4), donde operan TCP y UDP.

Para mayor seguridad, puede implementar Azure DDoS Protection para mitigar amenazas en las capas 3 y 4 , complementando las características de mitigación de amenazas de capa 7 proporcionadas por Azure Aplicação Gateway o NGINX Plus.

Uso de NGINX Plus con Azure App Service para proteger aplicações

La Figura 3 muestra cómo combinar NGINX Plus y Azure App Service para proporcionar un entorno seguro para ejecutar aplicações comerciales en producción. Esta estrategia de implementación utiliza NGINX Plus por sus funciones de equilibrio de carga y WAF.

Figura 3: NGINX Plus equilibra la carga del tráfico hacia las aplicações en un ASE de Azure

La implementación combina los siguientes componentes:

  • Red virtual de Azure (VNet) : representa una red virtual en la nube de Azure dedicada a su organización. Proporciona un aislamiento lógico que permite que los recursos de Azure se comuniquen de forma segura entre sí en una red virtual. Aquí hemos definido dos subredes: Interno para aplicações web que no están expuestas directamente a Internet y Waf para NGINX Plus y la infraestructura que lo sustenta.
  • Entorno de Azure App Service : esta implementación de muestra utiliza dos aplicações web de muestra ( Web App 1 y Web App 2 ) para demostrar cómo proteger y equilibrar la carga de diferentes aplicaciones web con NGINX Plus. En NGINX Plus, usted distribuye solicitudes a diferentes aplicações web configurando bloques ascendentes distintos y realiza el enrutamiento de contenido según URI con bloques de ubicación . A continuación se muestra la configuración mínima de NGINX Plus que cumple este objetivo (aquí todas las solicitudes van al mismo grupo ascendente):

    backend ascendente { dirección IP del servidor de su ASE-ILB ; } servidor { ubicación / { proxy_set_header Host $host; proxy_pass http://backend; } }
    
  • NGINX Plus : equilibra la carga de conexiones HTTP(S) en múltiples aplicações web. La implementación de NGINX Plus en una máquina virtual le brinda más control sobre la infraestructura que otros servicios de Azure. Por ejemplo, con una VM puedes elegir el sistema operativo (Linux o Windows) que se ejecuta dentro de una red virtual aislada. De hecho, las máquinas virtuales de Azure están disponibles para todas las distribuciones de Linux compatibles con NGINX Plus (excepto Amazon Linux, por razones obvias).
  • Conjuntos de escalado de máquinas virtuales de Azure : estos conjuntos son un recurso informático de Azure que permite implementar y administrar un conjunto de máquinas virtuales idénticas. Permite configurar el tamaño de la máquina virtual y asignarla a la red virtual correcta. Todas las máquinas virtuales que se ejecutan dentro del conjunto de escalado tienen una carga equilibrada mediante un Azure Load Balancer que proporciona conectividad TCP entre las instancias de máquina virtual. Aquí, cada máquina virtual del conjunto de escalado se basa en la imagen NGINX Plus disponible en Azure Marketplace. Los conjuntos de escalas están diseñados para proporcionar un verdadero escalamiento automático.

Azure también admite grupos de recursos como una forma sencilla de agrupar los recursos de Azure para una aplicação de manera lógica. El uso de un grupo de recursos no tiene ningún impacto en el diseño y la topología de la infraestructura, y no los mostramos aquí.

NGINX Plus: Alta disponibilidad y escalado automático con conjuntos de escalado de máquinas virtuales de Azure

Un conjunto de escalado de máquinas virtuales de Azure le brinda el poder de la virtualización con la capacidad de escalar en cualquier momento sin tener que comprar ni mantener el hardware físico que admite el escalado. Sin embargo, usted sigue siendo responsable del mantenimiento de la máquina virtual mediante la realización de tareas como configuración, aplicación de parches, actualizaciones de seguridad e instalación del software que se ejecuta en ella.

En la arquitectura que se muestra en la Figura 4, las instancias NGINX Plus se implementan para alta disponibilidad activa-activa dentro de un conjunto de escalado de máquinas virtuales de Azure. Una configuración activa-activa es excelente porque todas las máquinas virtuales NGINX Plus pueden manejar una solicitud entrante enrutada por Azure Load Balancer, lo que le brinda una capacidad rentable.

Figura 4: Conjunto de escalado de máquinas virtuales de Azure con Azure Load Balancer que equilibra la carga del tráfico hacia NGINX Plus

Con los conjuntos de escalado de máquinas virtuales de Azure, también puede configurar fácilmente el escalado automático de instancias de NGINX Plus en función del uso promedio de la CPU. En este caso, debes tener cuidado de sincronizar los archivos de configuración de NGINX Plus. Puede utilizar la función de compartir configuración de NGINX Plus para este propósito, como se describe en la Guía de administración de NGINX Plus .

resumen

Al usar Azure App Service para sus aplicações en la nube y NGINX Plus delante de sus aplicaciones web, API y backends móviles, puede equilibrar la carga y proteger estas aplicações a escala global. Al usar NGINX Plus junto con Azure App Service, obtiene una infraestructura con equilibrio de carga completo y un alto nivel de protección contra exploits y ataques de la web. Esto garantiza un diseño robusto para ejecutar aplicações críticas en producción de forma segura.

 

Recursos

Descripción general de las aplicaciones web (Microsoft)
Introducción a los entornos de App Service (Microsoft)
Cree una puerta de enlace de aplicação con un firewall de aplicação web mediante el portal de Azure (Microsoft)
Comparar las características de NGINX Open Source y NGINX Plus (NGINX)
Equilibrio de carga HTTP (NGINX)

El coautor invitado Cedric Derue es arquitecto de soluciones y MVP de Microsoft en Altran. El coautor invitado Vincent Thavonekham es director regional de Microsoft y MVP de Azure en VISEO.


"Esta publicación de blog puede hacer referencia a productos que ya no están disponibles o que ya no reciben soporte. Para obtener la información más actualizada sobre los productos y soluciones F5 NGINX disponibles, explore nuestra familia de productos NGINX . NGINX ahora es parte de F5. Todos los enlaces anteriores de NGINX.com redirigirán a contenido similar de NGINX en F5.com.