Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Refuerza la seguridad de tu red: filtrado egress por Fully Qualified Domain Name (FQDN) en GCP…

By Chimbu ChinnaduraiJun 11, 20237 min read

Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.

En el mundo actual, los datos circulan entre redes y sistemas sin ningún obstáculo. Por eso, se ha vuelto fundamental aplicar medidas de seguridad sólidas que protejan la información sensible. Si bien el filtrado del tráfico entrante suele recibir mucha atención, no conviene subestimar la importancia del filtrado egress, que permite a las organizaciones regular las comunicaciones de red salientes y asegurarse de que solo se establezcan conexiones autorizadas y seguras.

Una de las técnicas más utilizadas para el filtrado egress es el filtrado por Fully Qualified Domain Name (FQDN). Este enfoque les da a los administradores un control preciso sobre el tráfico saliente a partir de los nombres de dominio. Al combinarlo con la Firewall Policy de Google Cloud Platform (GCP), las organizaciones obtienen un nivel excepcional de seguridad y control sobre sus puntos egress de red.

En este artículo te guiaremos paso a paso por el proceso de implementar el filtrado egress por FQDN en GCP usando los objetos FQDN en las reglas de la firewall policy. La Firewall Policy es una funcionalidad independiente dentro del cloud firewall y ofrece muchas más capacidades que las VPC firewall rules.

La funcionalidad de objetos FQDN en las reglas de firewall policy se encuentra actualmente en preview, por lo que el soporte de GCP no ofrece SLAs ni compromisos de soporte técnico al respecto.

¿Qué es una Firewall Policy?

La Firewall Policy de Google Cloud Platform (GCP) es una funcionalidad de seguridad de red que te permite definir y aplicar reglas de firewall centralizadas para tus instancias de máquina virtual (VM) y tus redes VPC (Virtual Private Cloud).

Ofrece un enfoque unificado y escalable para gestionar el tráfico de red: puedes controlar la comunicación entrante y saliente, filtrar el tráfico según distintos criterios y reforzar la seguridad general.

Con la Firewall Policy se pueden definir reglas detalladas que especifican qué tipos de tráfico se permiten o se bloquean según factores como rangos de IP, puertos, protocolos e incluso Fully Qualified Domain Names (FQDNs). Así puedes establecer un perímetro de red seguro y proteger tus recursos en la nube frente a accesos no autorizados o actividades maliciosas.

Estas son las principales características y beneficios de la GCP Firewall Policy:

  • Gestión centralizada: administra y configura reglas de firewall en múltiples proyectos, regiones y redes VPC desde una única interfaz, lo que simplifica la gestión de las políticas de seguridad de red.
  • Definición flexible de reglas: la Cloud Firewall Policy permite definir reglas a partir de direcciones IP, rangos, puertos, protocolos y FQDNs. Esa flexibilidad habilita un control granular del tráfico entrante y saliente, y permite definir políticas de seguridad muy específicas.
  • Actualizaciones dinámicas: las reglas de firewall se pueden modificar en tiempo real, lo que te permite adaptarte a nuevos requisitos de seguridad sin interrumpir el tráfico de red existente.
  • Integración con servicios de Google Cloud: la Cloud Firewall Policy se integra de forma nativa con otros servicios de Google Cloud, como redes VPC, balanceadores de carga e instancias de VM, ofreciendo controles de seguridad consistentes en toda tu infraestructura.
  • Logging y monitoreo: la Cloud Firewall Policy ofrece capacidades detalladas de logging y monitoreo, lo que te da visibilidad sobre el tráfico de red, te permite analizar eventos de seguridad y resolver incidentes de forma efectiva.

Arquitectura de referencia

Configuración de ejemplo

Pasos para implementar la arquitectura de referencia

  • Configurar Private Google Access
  • Cloud NAT para acceso a Internet
  • Configurar las reglas de la firewall policy

Configurar Private Google Access

Private Google Access permite que los recursos dentro de una red Virtual Private Cloud (VPC) accedan a los servicios de Google mediante direcciones IP privadas, sin necesidad de conectividad externa a Internet.

También hace falta configurar Private Google Access con el dominio private.googleapis.com o restricted.googleapis.com para garantizar que las solicitudes a las APIs de Google solo sean enrutables dentro de Google Cloud.

Private Google Access se habilita por subred. Habilítalo en una subred existente y actualiza las variables.

gcloud config set project $PROJECT_ID

gcloud compute networks subnets update $SUBNET_NAME \
--region=$REGION \
--enable-private-ip-google-access

Para esta configuración hay que crear zonas de Cloud DNS para private.googleapis.com. Usa restricted.googleapis.com si trabajas con VPC Service Controls. Consulta las Domain options para más detalles.

Crea una zona DNS privada para googleapis.com.

gcloud dns managed-zones create googleapis-com \
--dns-name=googleapis.com. \
--description="googleapis-com domain for PGA" \
--visibility=private \
--networks=$NETWORK_NAME

Crea un registro A para private.googleapis.com que apunte a las siguientes direcciones IP: 199.36.153.8, 199.36.153.9, 199.36.153.10, 199.36.153.11.

gcloud dns record-sets create "private.googleapis.com." \
--type="A" \
--ttl="300" \
--rrdatas="199.36.153.8,199.36.153.9,199.36.153.10,199.36.153.11" \
--zone="googleapis-com"

Crea un registro CNAME para *.googleapis.com que apunte al dominio que configuraste: private.googleapis.com.

gcloud dns record-sets create "*.googleapis.com." \
--type="CNAME" \
--ttl="300" \
--rrdatas="private.googleapis.com." \
--zone="googleapis-com"

Algunas APIs y servicios de Google se ofrecen mediante nombres de dominio adicionales, como *.gcr.io, *.gstatic.com, *.pkg.dev y pki.goog.

Consulta la tabla de dominios y rangos de direcciones IP en Domain options para verificar si los servicios de esos dominios adicionales son accesibles a través de private.googleapis.com o restricted.googleapis.com. Por ejemplo, si usas Google Kubernetes Engine (GKE), también tendrás que configurar las zonas privadas *.gcr.io y *.pkg.dev en Cloud DNS.

Configurar Cloud NAT

Cloud NAT es un servicio gestionado, distribuido y definido por software que permite que los recursos sin direcciones IP externas establezcan conexiones salientes a Internet. Se recomienda usar Cloud NAT en lugar del internet gateway por defecto para tener mayor control sobre el tráfico saliente.

Crea un Cloud Router en la región que necesites.

gcloud compute routers create cloud-firewall-policy-demo-cloud-nat \
    --network=$NETWORK_NAME \
    --region=$REGION

Crea el gateway de Cloud NAT.

gcloud compute routers nats create cloud-firewall-policy-demo-cloud-nat \
   --router=cloud-firewall-policy-demo-cloud-nat \
   --region=$REGION \
   --auto-allocate-nat-external-ips \
   --nat-all-subnet-ip-ranges

Configuración de ejemplo de Cloud NAT

Configurar las reglas de la firewall policy

Existen tres tipos de firewall policies.

  • Las Hierarchical firewall policies permiten crear y aplicar una firewall policy consistente en toda la organización. Se pueden asignar a la organización completa o a carpetas individuales.
  • Las Global network firewall policies permiten actualizar en lote todas las reglas de firewall agrupándolas en un único objeto de policy, y las reglas se aplican a todas las regiones.
  • Las Regional network firewall policies permiten crear y aplicar una firewall policy consistente en todas las subredes dentro de una región de tu red VPC.

Crea una Global Network firewall policy para esta configuración.

gcloud compute network-firewall-policies create global-demo-firewall-policy \
--global

Crea una nueva asociación entre la firewall policy y la red de destino.

gcloud compute network-firewall-policies associations create \
--firewall-policy=global-demo-firewall-policy \
--network=$NETWORK_NAME --global-firewall-policy

Las reglas de firewall por defecto forman parte de la policy

Asociación de la red a la policy

Ya tenemos creados todos los recursos necesarios para aplicar el filtrado egress por FQDN usando los objetos FQDN en las reglas de firewall policy. El siguiente paso es agregar las reglas necesarias a la firewall policy.

Por ahora no hay restricciones aplicadas al tráfico egress y las instancias de la red tienen acceso a Internet sin restricciones.

En esta configuración solo permitiremos el tráfico saliente hacia www.example.com y hacia la dirección IP pública asignada a private.googleapis.com; el resto del tráfico de Internet quedará bloqueado.

Crea una regla por defecto de ingress allow. El acceso entrante queda permitido sin restricciones, pero ajusta la regla según tus necesidades.

gcloud compute network-firewall-policies rules create 1001 \
--firewall-policy="global-demo-firewall-policy" \
--action="allow" \
--direction="INGRESS" \
--description="Allow ingress traffic"  \
--src-ip-ranges="0.0.0.0/0" \
--layer4-configs="all" \
--global-firewall-policy

Crea una regla de firewall que permita la comunicación con los rangos de IP privadas. Asegúrate de que la regla incluya cualquier otro rango privado personalizado que uses en tu entorno, para que la comunicación entre instancias no se vea afectada.

gcloud compute network-firewall-policies rules create 999 \
--firewall-policy="global-demo-firewall-policy" -\
-action="allow" \
--direction="EGRESS" \
--description="Allow communication with private IP ranges" \
--dest-ip-ranges="10.0.0.0/8,172.16.0.0/12,192.168.0.0/16" \
--layer4-configs="all" \
--global-firewall-policy

Crea una regla de firewall policy que permita las solicitudes salientes a las IPs públicas de private.googleapis.com; estas IPs solo son enrutables dentro de Google Cloud.

gcloud compute network-firewall-policies rules create 998 \
--firewall-policy="global-demo-firewall-policy" \
--action="allow" \
--direction="EGRESS" \
--description="Allow DNS resolution requests to private.googleapis.com" \
--dest-ip-ranges="199.36.153.8/32,199.36.153.9/32,199.36.153.10/32,199.36.153.11/32" \
--layer4-configs="tcp:443" \
--global-firewall-policy

Crea una regla de firewall policy que permita las solicitudes salientes a www.example.com.

gcloud compute network-firewall-policies rules create 997 \
--firewall-policy="global-demo-firewall-policy" \
--action="allow" \
--direction="EGRESS" \
--description="FQDN egress filtering rules" \
--dest-fqdns="www.example.com" \
--layer4-configs="tcp:80,tcp:443" \
--global-firewall-policy

Crea una regla por defecto de egress deny y, antes de crearla, asegúrate de haber creado las reglas allow correspondientes a los dominios y rangos de IP que necesitas habilitar.

gcloud compute network-firewall-policies rules create 1000 \
--firewall-policy="global-demo-firewall-policy" \
--action="deny" \
--direction="EGRESS" \
--description="Deny all Egress traffic"  \
--dest-ip-ranges="0.0.0.0/0" \
--layer4-configs="all" \
--global-firewall-policy

Lista consolidada de reglas de la firewall policy.

Las reglas pueden tardar hasta 30 segundos en hacerse efectivas; prueba la conectividad de red desde la instancia GCE o desde los pods de GKE. Las solicitudes salientes solo se permiten hacia los dominios y rangos de IP definidos en las reglas de la firewall policy.

Resultados de la prueba tras aplicar las reglas de la firewall policy

En este ejemplo te mostramos cómo aprovechar los objetos FQDN en las reglas de Firewall Policy para hacer filtrado egress. Es un método muy útil para reforzar la seguridad de la red y mantener bajo control los puntos egress.

Para más información sobre la Firewall Policy, consulta la página del producto.