Compartir a través de


Protección de Azure Container Apps con Firewall de aplicaciones web en Application Gateway

Al hospedar las aplicaciones o microservicios en Azure Container Apps, es posible que no quiera publicarlas directamente en Internet. En su lugar, puede exponerlos mediante un proxy inverso.

Un proxy inverso es un servicio que se encuentra delante de uno o varios servicios. Intercepta y dirige el tráfico entrante al destino correcto.

Con servidores proxy inversos, puede colocar servicios delante de las aplicaciones que admiten funcionalidades transversales, entre las que se incluyen:

  • Enrutamiento
  • Almacenamiento en memoria caché
  • Limitación de frecuencia
  • Equilibrio de carga
  • Capas de seguridad
  • Filtrado de solicitudes

En este artículo se muestra cómo proteger las aplicaciones de contenedor mediante un firewall de aplicaciones web (WAF) en Azure Application Gateway con un entorno interno de Container Apps.

Para obtener más información sobre los conceptos de red en Container Apps, consulte Entorno de red en Azure Container Apps.

Requisitos previos

  • Entorno interno con red virtual: tenga una aplicación contenedora que se encuentra en un entorno interno e integrada con una red virtual. Para más información sobre cómo crear una aplicación integrada de red virtual, consulte Proporcionar una red virtual a un entorno interno de Azure Container Apps.

  • Certificados de seguridad: si necesita usar el cifrado TLS/SSL en la puerta de enlace de aplicaciones, necesita un certificado público válido para enlazar a la puerta de enlace de aplicaciones.

Recuperación del dominio de la aplicación contenedora

Siga estos pasos para recuperar los valores del dominio predeterminado y la dirección IP estática para configurar la zona DNS privada.

  1. En la ventana Información general del grupo de recursos en el portal, seleccione la aplicación contenedora.

  2. En la ventana Información general del recurso de la aplicación contenedora, seleccione el vínculo del entorno de Container Apps.

  3. En la ventana Información general del recurso del entorno de la aplicación contenedora, seleccione Vista JSON en la esquina superior derecha de la página para ver la representación JSON del entorno de aplicaciones contenedoras.

  4. En la vista JSON, busque la properties sección y busque los valores siguientes:

    • Dominio predeterminado: buscar properties.defaultDomain o properties.environmentFqdn

    • Dirección IP estática: Busque properties.staticIp

  5. Copie estos valores y péguelos en un editor de texto. Use el valor de dominio predeterminado al crear una zona DNS privada en la sección siguiente.

Creación y configuración de una zona DNS privada de Azure

Para crear y configurar una zona DNS privada de Azure, complete los pasos siguientes:

  1. Vaya a Azure Portal.

  2. En la barra de búsqueda, escriba Zona DNS privada.

  3. Seleccione Zona DNS privada en los resultados de la búsqueda.

  4. Selecciona Crear.

  5. Escriba los siguientes valores:

    Configuración Acción
    Suscripción Seleccione su suscripción a Azure.
    Grupo de recursos Seleccione el grupo de recursos de la aplicación contenedora.
    Nombre Escriba la propiedad de dominio predeterminada del entorno de aplicaciones de contenedor de la sección anterior (ya sea defaultDomain o environmentFqdn).
    Ubicación del grupo de recursos Déjelo como valor predeterminado. No necesita un valor porque las zonas DNS privadas son globales.
  6. Seleccione Revisar + crear. Una vez que se complete la validación, seleccione Crear.

  7. Una vez creada la zona DNS privada, seleccione Ir al recurso.

  8. En la ventana Información general , seleccione +Conjunto de registros para agregar un nuevo conjunto de registros.

  9. En la ventana Agregar conjunto de registros, escriba los valores siguientes:

    Configuración Acción
    Nombre Escriba *.
    Tipo Seleccione Registro de dirección A.
    TTL Deje los valores predeterminados.
    Unidad de TTL Deje los valores predeterminados.
    Dirección IP Escriba la propiedad IP estática del entorno de Container Apps de la sección anterior (staticIp).
  10. Seleccione Aceptar para crear el conjunto de registros.

  11. Seleccione +Conjunto de registros otra vez para agregar un segundo conjunto de registros.

  12. En la ventana Agregar conjunto de registros, escriba los valores siguientes:

    Configuración Acción
    Nombre Escriba @.
    Tipo Seleccione Registro de dirección A.
    TTL Deje los valores predeterminados.
    Unidad de TTL Deje los valores predeterminados.
    Dirección IP Escriba la propiedad IP estática del entorno de Container Apps de la sección anterior (staticIp).
  13. Seleccione Aceptar para crear el conjunto de registros.

  14. Seleccione la ventana Vínculos de red virtual en el menú del lado izquierdo de la página.

  15. Seleccione +Agregar para crear un vínculo con los valores siguientes:

    Configuración Acción
    Nombre del vínculo Escriba my-vnet-pdns-link.
    Conozco el id. de recurso de la red virtual Déjela desmarcada.
    Red de área virtual Seleccione la red virtual con la que se integra la aplicación contenedora.
    Habilitación del registro automático Déjela desmarcada.
  16. Seleccione Aceptar para crear el vínculo de red virtual.

Creación y configuración de una instancia de Azure Application Gateway

Para crear y configurar una instancia de Azure Application Gateway, complete los pasos siguientes:

  1. Vaya a Azure Portal.

  2. En la barra de búsqueda, escriba Application Gateway.

  3. Seleccione Application Gateway en los resultados de la búsqueda.

Ahora, ingrese los detalles requeridos en la pestaña Conceptos básicos , la pestaña Frontends , la pestaña Backends y la pestaña Configuración .

Pestaña Aspectos básicos

Realice los pasos siguientes:

  1. Escriba los siguientes valores en la sección Detalles del proyecto.

    Configuración Acción
    Suscripción Seleccione su suscripción a Azure.
    Grupo de recursos Seleccione el grupo de recursos para la aplicación contenedora.
    Nombre de la puerta de enlace de aplicaciones Escriba my-container-apps-agw.
    Región Seleccione la ubicación en la que aprovisionó la aplicación contenedora.
    Nivel Seleccione WAF V2. Puede usar Estándar V2 si no necesita WAF.
    Habilitar escalado automático Deje el valor predeterminado. Para entornos de producción, se recomienda el escalado automático. Consulte Escalado automático de Azure Application Gateway.
    Zona de disponibilidad Seleccione Ninguno. En entornos de producción, se recomienda Availability Zones para lograr una mayor disponibilidad.
    HTTP2 Mantenga el valor predeterminado.
    Directiva WAF Seleccione Crear nueva y escriba my-waf-policy para la directiva de WAF. Seleccione Aceptar. Si eligió Estándar V2 para el nivel, omita este paso.
    Red de área virtual Seleccione la red virtual con la que está integrada la aplicación contenedora.
    Subred Seleccione Administrar configuración de subred. Si ya tiene una subred que desea usar, seleccione esa subred y vaya a la sección Frontends.
  2. En la ventana Subredes de my-vnet, seleccione +Subred y escriba los valores siguientes:

    Configuración Acción
    Nombre Escriba appgateway-subnet.
    Intervalo de direcciones de subred Deje los valores predeterminados.
  3. Para el resto de la configuración, mantenga los valores predeterminados.

  4. Seleccione Guardar para crear la nueva subred.

  5. Cierre la ventana Subredes para volver a la ventana Crear puerta de enlace de aplicaciones.

  6. Seleccione los valores siguientes:

    Configuración Acción
    Subred Seleccione la appgateway-subnet ha creado.
  7. Seleccione Siguiente: Front-ends para continuar.

Pestaña Front-end

Realice los pasos siguientes:

  1. En la pestaña Frontends, escriba los valores siguientes:

    Configuración Acción
    Tipo de dirección IP de front-end Seleccione Público.
    Dirección IP pública Seleccione Agregar nuevo. Escriba my-frontend para el nombre del front-end y seleccione Aceptar

    Nota:

    Para la SKU de Application Gateway v2, necesita una dirección IP de front-end pública. Para más información, consulte Compatibilidad con direcciones IP públicas y privadas y Administración de una dirección IP pública con una instancia de Azure Application Gateway.

  2. Seleccione Siguiente: back-end.

Pestaña Back-end

El grupo de back-end enruta las solicitudes a los servidores back-end adecuados. Puede crear grupos de back-end desde cualquier combinación de los siguientes recursos:

  • NIC
  • Direcciones IP públicas
  • Direcciones IP internas
  • Virtual Machine Scale Sets
  • Nombres de dominio completos (FQDN)
  • Backends multicliente como Azure App Service y Container Apps

En este ejemplo, creará un grupo de back-end que tenga como destino la aplicación contenedora.

Para crear un grupo de backend, complete los pasos siguientes:

  1. Seleccione Agregar un grupo de back-end.

  2. Abra una nueva pestaña y vaya a la aplicación contenedora.

  3. En la ventana Información general de la aplicación contenedora, busque la URL de la aplicación y cópiela.

  4. Vuelva a la pestaña Backends y escriba los valores siguientes en la ventana Agregar un grupo de back-end:

    Configuración Acción
    Nombre Escriba my-agw-backend-pool.
    Agregar grupo de backend sin destinos así que seleccione No.
    Tipo de destino Seleccione Dirección IP o FQDN.
    Destino Escriba la dirección URL de la aplicación contenedora que copió y quite el prefijo https://. Esta ubicación es el FQDN de la aplicación contenedora.
  5. Seleccione Agregar.

  6. En la pestaña Back-end, seleccione Siguiente: configuración.

Pestaña Configuración

En la pestaña Configuración, conecta el grupo de servidores front-end y back-end que creó mediante una regla de enrutamiento.

Para conectar el grupo de servidores frontend y backend, realice los pasos siguientes:

  1. Seleccione Agregar una regla de enrutamiento. Escriba los siguientes valores:

    Configuración Acción
    Nombre Escriba my-agw-routing-rule.
    Prioridad Especifique 1.
  2. En la pestaña Agente de escucha, escriba los valores siguientes:

    Configuración Acción
    Nombre del cliente de escucha Escriba my-agw-listener.
    Dirección IP de front-end Seleccione Público.
    Protocolo seleccione HTTPS. Si no tiene un certificado que quiera usar, puede seleccionar HTTP
    Puerto Escriba 443. Si eligió HTTP para el protocolo, escriba 80 y vaya a la sección dominio predeterminado o personalizado.
    Elección de un certificado Seleccione Cargar un certificado. Si el certificado se almacena en el almacén de claves, puede seleccionar Elegir un certificado de un almacén de claves.
    Nombre del certificado Escriba un nombre para el certificado.
    Archivo de certificado PFX Seleccione el certificado público válido.
    Contraseña Escriba la contraseña del certificado.

    Si desea usar el dominio predeterminado, escriba los valores siguientes:

    Configuración Acción
    Tipo de agente de escucha Seleccione Básica.
    Dirección URL de la página de errores Déjelo como No

    Como alternativa, si desea usar un dominio personalizado, escriba los valores siguientes:

    Configuración Acción
    Tipo de agente de escucha Seleccione Multisitio
    Tipo de anfitrión Seleccione Simple
    Nombres de host Escriba el dominio personalizado que desea usar.
    Dirección URL de la página de errores Déjelo como No
  3. Seleccione la pestaña Destinos de back-end y escriba los siguientes valores:

  4. Cambie a la pestaña Destinos de back-end y escriba la siguiente configuración:

    Configuración Acción
    Tipo de destino Seleccione my-agw-backend-pool que creó anteriormente.
    Configuración de back-end Seleccione Agregar nuevo.
  5. En la ventana Agregar back-end, escriba los siguientes valores:

    Configuración Acción
    Nombre de la configuración de backend Escriba my-agw-backend-setting.
    Protocolo de back-end seleccione HTTPS.
    Puerto back-end Escriba 443.
    Usar certificado de entidad de certificación reconocida Seleccione .
    Reemplazar por un nuevo nombre de host Seleccione .
    Sustitución del nombre de host Elija Seleccionar el nombre de host en el destino de back-end.
    Crear sondeos personalizados así que seleccione No.
  6. En Request Header Rewrite (Reescritura del encabezado de solicitud), configure las siguientes opciones:

    • Habilitar reescritura del encabezado de solicitud: seleccione .
    • Agregue un encabezado de solicitud:
      • Nombre del encabezado: X-Forwarded-Host
      • Valor: {http_req_host}

    Esta acción garantiza que la aplicación back-end conserve y pueda acceder al encabezado original Host de la solicitud de cliente.

  7. Seleccione Agregar para agregar la configuración de back-end.

  8. En la ventana Agregar una regla de enrutamiento, seleccione Agregar de nuevo.

  9. Seleccione Siguiente: etiquetas.

  10. Seleccione Siguiente: Revisar y crear y, a continuación, seleccione Crear.

Puede establecer una conexión segura a entornos de aplicaciones en contenedores internos mediante un vínculo privado. Con un enlace privado, Application Gateway puede comunicarse con su aplicación de contenedor en el servidor back-end a través de la red virtual.

  1. Después de crear Application Gateway, seleccione Ir al recurso.

  2. En el menú de la izquierda, seleccione Vínculo privado y, a continuación, seleccione Agregar.

  3. Escriba los siguientes valores:

    Configuración Acción
    Nombre Escriba my-agw-private-link.
    Subred de vínculo privado Seleccione la subred que desea usar para crear el vínculo privado.
    Configuración de direcciones IP de front-end Seleccione la dirección IP de front-end de Application Gateway.
  4. En Configuración de direcciones IP privadas, seleccione Agregar.

  5. Seleccione Agregar en la parte inferior de la ventana.

Conservación del encabezado de host original para redireccionamientos y SSO

Al configurar Azure Application Gateway como proxy inverso y habilitar la opción Sobreescribir con nuevo nombre de host, se modifica el encabezado Host. La modificación del encabezado puede interferir con las aplicaciones que dependen del valor de host original para generar direcciones URL de redireccionamiento, vínculos absolutos o admitir flujos de autenticación de OpenID Connect (OIDC).

Para reenviar el encabezado de host original, puede insertarlo en el encabezado X-Forwarded-Host utilizando la función de reescritura del encabezado de solicitud de Application Gateway.

Configuración de la inserción de X-Forwarded-Host

Para habilitar la X-Forwarded-Host inserción:

  1. En la pestaña Configuración , seleccione la sección Configuración de back-end de la regla de enrutamiento de Application Gateway:

    • Habilite la reescritura del encabezado de solicitud.
    • Agregue un nuevo encabezado de solicitud con los siguientes valores:
      • Nombre del encabezado: X-Forwarded-Host
      • Valor: {http_req_host}

    La aplicación backend ahora puede leer el host de la solicitud original usando el encabezado X-Forwarded-Host.

Nota:

Al configurar reglas de reescritura de encabezado, asegúrese de usar la sintaxis de variable correcta. Las variables de servidor deben usar el prefijo adecuado, como http_req_ para los encabezados de solicitud. Para solucionar problemas de errores de configuración de reglas de reescritura, consulte Reescritura de encabezados HTTP y dirección URL con Application Gateway.

Comprobación de la aplicación contenedora

  1. Busque la dirección IP pública de la puerta de enlace de aplicaciones en la página de información general o puede buscar la dirección. Para buscar, seleccione Todos los recursos y escriba my-container-apps-agw-pip en el cuadro de búsqueda. A continuación, seleccione la dirección IP en los resultados de la búsqueda.

  2. Vaya a la dirección IP pública de la puerta de enlace de aplicaciones.

  3. La solicitud se enruta automáticamente a la aplicación contenedora, que comprueba que la puerta de enlace de aplicaciones se creó correctamente.

Limpieza de recursos

Cuando ya no necesite los recursos que ha creado, elimine el grupo de recursos. Al eliminar el grupo de recursos, también se quitan todos los recursos relacionados.

Para eliminar el grupo de recursos:

  1. En el menú de Azure Portal, seleccione Grupos de recursos o busque y seleccione Grupos de recursos.

  2. En la página Grupos de recursos, busque y seleccione my-container-apps.

  3. En la página Grupo de recursos, seleccione Eliminar grupo de recursos.

  4. Escriba my-container-apps en ESCRIBA EL NOMBRE DEL GRUPO DE RECURSOS y seleccione Eliminar.

Pasos siguientes