Controla el acceso con firewalls

Un firewall proporciona control de acceso independiente de la identidad para su aplicación de App Engine. Con el firewall de App Engine, puedes definir hasta 1,000 funciones individuales para permitir o restringir un rango de direcciones IP y subredes.

Para configurar un firewall, debes definir reglas y especificar un valor de prioridad, el rango de direcciones IP para permitir o rechazar accesos, y una descripción opcional.

Para asegurarte de que configuraste tu app de forma segura y estableciste los niveles de acceso apropiados, revisa Seguridad de la aplicación y Control de acceso.

Estructura las reglas de firewall

Un firewall de App Engine consta de una lista ordenada de reglas que pueden permitir o rechazar el acceso de un rango o dirección IP específicos a tu app. La regla se aplica a todos los recursos de la aplicación de App Engine.

Las reglas del firewall se ordenan según su importancia, que se define a través de la prioridad de cada regla con un valor numérico. Debes especificar un valor de prioridad único para cada regla, ya que define la importancia en relación con las demás reglas del firewall. Los valores para la escala de prioridad de las reglas van desde el más importante (1) hasta el menos importante (2147483647).

Cada firewall incluye una regla default que se crea automáticamente con la prioridad 2147483647, y se aplica a todo el rango de IP de tu aplicación. La regla default siempre se evalúa después de que se evalúan las demás reglas del firewall, y se aplica a todas las solicitudes en todas las direcciones IP.

El firewall evalúa primero la regla con mayor prioridad. Las reglas restantes se evalúan de forma secuencial hasta que una de ellas coincide con el rango de IP de esa solicitud. Cuando se encuentra una regla que coincide, la conexión se permite o se rechaza, y las reglas restantes del firewall se omiten. Si ninguna de las reglas del firewall definidas de forma manual coinciden con la solicitud, se evalúa la regla default.

Por ejemplo, si creas una regla con prioridad 1, siempre es la que se evalúa primero. Si una solicitud entrante coincide con la regla de prioridad 1, solo se evalúa esa, y se omiten las demás reglas del firewall, incluida la regla default.

En el firewall de ejemplo que se muestra a continuación, se observa cómo la prioridad de una regla puede cambiar el comportamiento del firewall.

Antes de comenzar

Para crear un firewall en tu aplicación, debes contar con alguna de las siguientes funciones de IAM de App Engine, que incluyen los privilegios necesarios para crear o modificar reglas del firewall:

  • Administrador de App Engine
  • Editor
  • Propietario

Si quieres usar la herramienta gcloud o la API de Administrador, primero debes instalarlas y configurarlas:

Evita el acceso a contenido almacenado en caché

El firewall de App Engine se sitúa detrás de los mecanismos que almacenan contenido en caché, como proxies web y navegadores. Cuando el contenido se almacena en caché, se entrega públicamente desde la URL específica hasta que vence, y se puede acceder a él incluso luego de haber creado reglas de firewall nuevas.

Para evitar que tu contenido quede almacenado en caché, utiliza los encabezados de respuestas de HTTP Cache-Control y Expires. Para obtener más información sobre estos encabezados de HTTP y sobre cómo controlar el almacenamiento en caché, consulta Evita el almacenamiento en caché.

Permite solicitudes desde tus servicios

Cuando creas reglas, debes considerar los siguientes puntos:

  • Según la configuración predeterminada, se le permite el acceso a tu aplicación a cualquier solicitud que no coincide con una regla. Si deseas bloquear todas las solicitudes que no coinciden con las reglas especificadas, debes definir la regla default como deny.
  • El firewall permite las listas de tareas en cola y el tráfico de cron, incluso cuando la regla default está definida en deny.
  • Para controlar el acceso de solicitudes desde otras aplicaciones o servicios de App Engine, tal vez sea necesario que crees reglas que admitan las direcciones IP que se utilizan en comunicaciones servicio a servicio. Si tu app se comunica con otras aplicaciones o servicios de App Engine, debes tener en cuenta de qué manera controlar las solicitudes de las siguientes direcciones IP:

    • Solicitudes del servicio de recuperación de URL: 0.1.0.40
      • Solicitudes recibidas en el entorno estándar: 0.1.0.40
      • Solicitudes recibidas en el entorno flexible: 0.1.0.40 y 10.0.0.1
    • Solicitudes de Blobstore o de Cloud Storage: 0.1.0.30
    • Solicitudes recibidas solo en el entorno estándar:
      • Solicitudes de implementación de aplicaciones: 10.1.0.41

    Ejemplo

    Tu app tiene un servicio de backend en ejecución en el entorno estándar (backend_std). Este utiliza el servicio de recuperación de URL para comunicarse con backend_flex.

    Debes crear dos reglas de firewall para permitir las solicitudes:

    • 0.1.0.40: Una regla que permite que backend_flex reciba las solicitudes del servicio de recuperación de URL desde backend_std.
    • 10.0.0.1: Una regla que permite la comunicación entre servicios para las solicitudes del servicio de recuperación de URL en backend_flex.

Crea reglas de firewall

Para crear una regla de firewall, usa uno de los siguientes métodos. Repite estos pasos para crear cada regla adicional:

Console

Utiliza la página Reglas de firewall en GCP Console para crear una regla de firewall:

  1. Ve a la página Crear una regla de firewall en GCP Console:

    Ir a la página Crear una regla de firewall

  2. Específica los detalles para la regla de firewall:

    1. En Prioridad, ingresa un número entero para especificar la importancia relativa de la regla y definir el orden en el que se evalúa.

      Los valores válidos van desde 1 hasta 2147483646. La regla con prioridad 1 es la primera en evaluarse. La regla con prioridad 2147483647 es la última en evaluarse, y se reserva para la regla predeterminada.

    2. En Acción en caso de coincidencia, especifica si permitir o rechazar el acceso para solicitudes que coinciden con la regla. Las reglas configuradas como allow reenvían la solicitud a la aplicación. Las reglas configuradas como deny responden a las solicitudes con un error 403 Forbidden.
    3. En Rango de IP, debes definir el rango de direcciones IP al que se aplica la regla. El rango de direcciones IP debe definirse con la notación CIDR, y puede incluir máscaras de subred y admitir tanto IPv4 como IPv6.
    4. Opcional: En Descripción, incluye una descripción de la regla de hasta 100 caracteres.
  3. Haz clic en Guardar para crear la regla.
  4. Prueba la regla para asegurarte de que la prioridad y la acción se comportan de la manera esperada:
    1. Haz clic en Dirección IP de prueba.
    2. Ingresa la dirección IP que quieres validar y luego haz clic en Probar para asegurarte de que la regla correspondiente se evalúa de forma correcta.
gcloud

Ejecuta los siguientes comandos de gcloud app firewall-rules para crear una regla de firewall:

  1. Ejecuta el siguiente comando para crear una regla de firewall:

    gcloud app firewall-rules create PRIORITY --action ALLOW_OR_DENY --source-range IP_RANGE --description DESCRIPTION
    En el que:
    • PRIORITY es un número entero entre 1 y 2147483646 que define la importancia de la regla y el orden en el que se evalúa. La regla con prioridad 1 es la que se evalúa primero. La regla con prioridad 2147483647 es la última que se evalúa, y se reserva para la regla predeterminada.
    • ALLOW_OR_DENY especifica si permitir o rechazar las solicitudes que coinciden con la regla. Los valores válidos son allow o deny. Las reglas configuradas como allow reenvían la solicitud a la aplicación. Las reglas configuradas como deny responden a las solicitudes con un error 403 Forbidden.
    • IP_RANGE define el rango de direcciones IP al que se aplica la regla. El rango de IP debe definirse con la notación CIDR, y puede incluir máscaras de subred y admitir tanto IPv4 como IPv6.
    • DESCRIPTION es una descripción opcional de la regla de hasta 100 caracteres.
  2. Ejecuta el siguiente comando para probar la regla y asegurarte de que la prioridad y la acción se comportan de la manera esperada:
    gcloud app firewall-rules test-ip IP_ADDRESS
    en el que IP_ADDRESS es la dirección IP con la que quieres probar tu firewall.
  3. Ejecuta el siguiente comando para ver una lista de las reglas existentes:
    gcloud app firewall-rules list
  4. Ejecuta el siguiente comando para borrar una regla existente:
    gcloud app firewall-rules delete PRIORITY
    en el que PRIORITY es el valor de prioridad de la regla que quieres borrar.
Ejemplos:
Usa los siguientes ejemplos a modo de ayuda para crear un firewall:
  • Agrega una regla que permita una dirección IPv6 y una máscara de subred, y luego prueba la regla para asegurarte de que se evalúa antes que las demás:

    gcloud app firewall-rules create 123 --source-range fe80::3636:3bff:fecc:8778/128 --action allow
    gcloud app firewall-rules test-ip fe80::3636:3bff:fecc:8778
  • Agrega una regla que permita una dirección IPv4 y una máscara de subred, y luego prueba la regla para asegurarte de que se evalúa de forma apropiada:

    gcloud app firewall-rules create 123456 --source-range "74.125.0.0/16" --action deny
    gcloud app firewall-rules test-ip 74.125.0.8
  • Actualiza y prueba la regla predeterminada para asegurarte de que restringe todas las direcciones IP que no coinciden con otras reglas:

    gcloud app firewall-rules update default --action deny
    gcloud app firewall-rules test-ip 123.456.7.89
API

Para crear reglas de firewall en tu app de App Engine de manera programática, puedes usar los métodos apps.firewall.ingressRules de la API de Administrador.

Para probar una regla de firewall y asegurarte de que la prioridad y la acción se comportan de la manera esperada, puedes utilizar el método apps.firewall.ingressRules.list y especificar la dirección IP que quieres probar dentro del parámetro matchingAddress.

Firewall de ejemplo

En este ejemplo, una empresa tiene un firewall configurado para garantizar acceso a su aplicación en desarrollo al equipo de ingeniería y a la red corporativa interna. Las reglas de firewall fueron creadas con espacios grandes entre cada prioridad y así dejar espacio para el crecimiento.

Prioridad Acción Rango de IP Descripción
1000 Denegar 192.0.2.1 Rechaza el acceso a un ataque de DoS.
2000 Permitir 198.51.100.2 Permite el acceso a un ingeniero de la oficina externa.
3000 Denegar 198.51.100.0/24 Rechaza el acceso a los edificios que no son de ingeniería.
5000 Permitir 203.0.113.0/24 Permite el acceso a la red del edificio principal.
2147483647 Denegar * Acción predeterminada

Luego de crear el firewall, supón que las siguientes solicitudes se direccionan a la aplicación de ejemplo y observa la respuesta de la aplicación:

  • La solicitud desde 198.51.100.2 coincide con la regla que tiene prioridad 2000 y se permite.
  • La solicitud desde 198.51.100.100 coincide con la regla que tiene prioridad 3000 y se rechaza.
  • La solicitud desde 203.0.113.54 coincide con la regla que tiene prioridad 5000 y se permite.
  • La solicitud desde 45.123.35.242 coincide con la regla predeterminada y se rechaza.

Resuelve las reglas en conflicto

Por ejemplo, supón que se intercambian dos de las prioridades del firewall de la empresa. Si se intercambian las reglas que tienen prioridades 2000 y 3000, observa el comportamiento no deseado.

Prioridad Acción Rango de IP Descripción
1000 Denegar 192.0.2.1 Rechaza el acceso a un ataque de DoS.
2000 Denegar 198.51.100.0/24 Rechaza el acceso a los edificios que no son de ingeniería.
3000 Permitir 198.51.100.2 Permite el acceso a un ingeniero de la oficina externa.
5000 Permitir 203.0.113.0/24 Permite el acceso a la red del edificio principal.
2147483647 Denegar * Acción predeterminada

El ingeniero en la oficina externa no podrá acceder a la aplicación de la empresa, ya que por la nueva prioridad de la regla, esta nunca será evaluada. La dirección IP del ingeniero 198.51.100.2 coincide con la regla que rechaza el acceso a todos los no ingenieros en el rango 198.51.100.0/24 antes de la regla que permite el acceso a la dirección IP del ingeniero.

Para solucionarlo, debes configurar la prioridad de la regla que permite el acceso de 198.51.100.2 de manera que sea mayor que la prioridad de la regla que rechaza el acceso para el rango de IP de 198.51.100.0/24.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno flexible de App Engine para los documentos de Node.js