Controla la salida en una instancia privada

En esta sección, se describe la arquitectura de alto nivel para establecer el control de salida desde instancias privadas de Cloud Data Fusion durante la fase de desarrollo y la fase de ejecución de la canalización.

En el siguiente diagrama de arquitectura del sistema, se muestra cómo una instancia privada de Cloud Data Fusion se conecta con la Internet pública cuando desarrollas una canalización:

Diagrama de arquitectura de instancia privada

Puedes controlar las conexiones a las aplicaciones de SaaS y los servicios de nube pública de terceros durante el desarrollo o la ejecución de la canalización mediante el enrutamiento de todo el tráfico de salida a través de proyectos de clientes. En este proceso, se usan los siguientes recursos:

  • Ruta de red de VPC personalizada: Una red de VPC personalizada enruta el tráfico a través de una ruta personalizada importada a las VM de puerta de enlace, que se exportan a una VPC del proyecto de usuario mediante el Intercambio de tráfico entre VPC.

  • VM de proxy: una VM de proxy enruta el tráfico de salida de Google Cloud desde el proyecto de usuario de Cloud Data Fusion al destino especificado a través de la Internet pública. Debes crear y administrar una VM de puerta de enlace en los proyectos de cliente. Se recomienda establecer una configuración de alta disponibilidad (HA) mediante un balanceador de cargas interno (ILB). Si tienes varias instancias privadas de Cloud Data Fusion que usan la misma red de VPC, puedes volver a usar la misma VM en ella.

Antes de comenzar

Configura el control de salida durante el desarrollo de la canalización

El control de salida te permite controlar o filtrar lo que puede salir de tu red, lo que es útil en los entornos de los Controles del servicio de VPC. No hay un proxy de red preferido para realizar esta tarea. Algunos ejemplos de proxies son proxy de Squid, HAProxy y Envoy.

En los ejemplos de esta guía, se describe cómo configurar el proxy HTTP para el filtrado HTTP en instancias de VM que usan una imagen de Debian. En los ejemplos, se usa un servidor proxy de Squid, que es una de las formas de configurar un servidor proxy.

Crea una máquina virtual del proxy

Crea una VM en la misma VPC que tu instancia privada de Cloud Data Fusion con la siguiente secuencia de comandos de inicio y reenvío de IP.

Esta secuencia de comandos instala el proxy de Squid y lo configura para interceptar el tráfico HTTP y permitir los dominios .squid-cache.org y .google.com. Puedes reemplazar estos dominios por los dominios que deseas conectar con tu instancia de Cloud Data Fusion.

Consola

  1. Ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. Haz clic en Crear instancia.

  3. Usa la misma VPC que tiene configurado el intercambio de tráfico entre redes con la instancia privada de Cloud Data Fusion. Para obtener más información sobre el intercambio de tráfico entre redes de VPC en esta situación, consulta Antes de comenzar.

  4. Habilita el reenvío de IP para la instancia en la misma red que la instancia de Cloud Data Fusion.

  5. En el campo Secuencia de comandos de inicio, ingresa la siguiente secuencia de comandos:

    #! /bin/bash
    apt-get -y install squid3
    cat <<EOF > /etc/squid/conf.d/debian.conf
    #
    # Squid configuration settings for Debian
    #
    logformat squid %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %ssl::>sni %Sh/%<a %mt
    logfile_rotate 10
    debug_options rotate=10
    
    # configure intercept port
    http_port 3129 intercept
    
    # allow only certain sites
    acl allowed_domains dstdomain "/etc/squid/allowed_domains.txt"
    http_access allow allowed_domains
    
    # deny all other http requests
    http_access deny all
    EOF
    
    # Create a file with allowed egress domains
    # Replace these example domains with the domains that you want to allow
    # egress from in Data Fusion pipelines
    cat <<EOF > /etc/squid/allowed_domains.txt
    .squid-cache.org
    .google.com
    EOF
    
    /etc/init.d/squid restart
    
    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3129
    
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo net.ipv4.ip_forward=1 > /etc/sysctl.d/11-gce-network-security.conf
    iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -p tcp --dport 443 -j MASQUERADE
    

gcloud

export CDF_PROJECT=<cdf-project>
export PROXY_VM=<proxy-vm>
export ZONE=<vm-zone>
export SUBNET=<subnet>
export VPC_NETWORK=<vpc-network>
export COMPUTE_ENGINE_SA=<compute-engine-sa>

gcloud beta compute --project=$CDF_PROJECT instances create $PROXY_VM --zone=$ZONE --machine-type=e2-medium --subnet=$SUBNET --no-address --metadata=startup-script=\#\!\ /bin/bash$'\n'apt-get\ -y\ install\ squid3$'\n'cat\ \<\<EOF\ \>\ /etc/squid/conf.d/debian.conf$'\n'\#$'\n'\#\ Squid\ configuration\ settings\ for\ Debian$'\n'\#$'\n'logformat\ squid\ \%ts.\%03tu\ \%6tr\ \%\>a\ \%Ss/\%03\>Hs\ \%\<st\ \%rm\ \%ru\ \%ssl::\>sni\ \%Sh/\%\<a\ \%mt$'\n'logfile_rotate\ 10$'\n'debug_options\ rotate=10$'\n'$'\n'\#\ configure\ intercept\ port$'\n'http_port\ 3129\ intercept$'\n'$'\n'\#\ allow\ only\ certain\ sites$'\n'acl\ allowed_domains\ dstdomain\ \"/etc/squid/allowed_domains.txt\"$'\n'http_access\ allow\ allowed_domains$'\n'$'\n'\#\ deny\ all\ other\ http\ requests$'\n'http_access\ deny\ all$'\n'EOF$'\n'$'\n'$'\n'\#\ Create\ a\ file\ with\ allowed\ egress\ domains$'\n'\#\ Replace\ these\ example\ domains\ with\ the\ domains\ that\ you\ want\ to\ allow\ $'\n'\#\ egress\ from\ in\ Data\ Fusion\ pipelines$'\n'cat\ \<\<EOF\ \>\ /etc/squid/allowed_domains.txt$'\n'.squid-cache.org$'\n'.google.com$'\n'EOF$'\n'$'\n'/etc/init.d/squid\ restart$'\n'$'\n'iptables\ -t\ nat\ -A\ PREROUTING\ -p\ tcp\ --dport\ 80\ -j\ REDIRECT\ --to-port\ 3129$'\n'echo\ 1\ \>\ /proc/sys/net/ipv4/ip_forward$'\n'echo\ net.ipv4.ip_forward=1\ \>\ /etc/sysctl.d/11-gce-network-security.conf$'\n'iptables\ -t\ nat\ -A\ POSTROUTING\ -s\ 0.0.0.0/0\ -p\ tcp\ --dport\ 443\ -j\ MASQUERADE --can-ip-forward --maintenance-policy=MIGRATE --service-account=$COMPUTE_ENGINE_SA --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append --tags=http-server,https-server --image=debian-10-buster-v20210420 --image-project=debian-cloud --boot-disk-size=10GB --boot-disk-type=pd-balanced --boot-disk-device-name=instance-1 --no-shielded-secure-boot --shielded-vtpm --shielded-integrity-monitoring --reservation-affinity=any

gcloud compute --project=$CDF_PROJECT firewall-rules create egress-allow-http --direction=INGRESS --priority=1000 --network=$VPC_NETWORK --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=https-server

gcloud compute --project=$CDF_PROJECT firewall-rules create egress-allow-https --direction=INGRESS --priority=1000 --network=$VPC_NETWORK --action=ALLOW --rules=tcp:443 --source-ranges=0.0.0.0/0 --target-tags=https-server

Crea una ruta personalizada

Crea una ruta personalizada para conectarte a la instancia de VM de la puerta de enlace que creaste.

Consola

Para crear tu ruta en la consola de Google Cloud, consulta Agrega una ruta estática.

Cuando configures la ruta, haz lo siguiente:

  • Establece la Prioridad en 1001 o más.
  • Usa el mismo proyecto y VPC que la instancia privada de Cloud Data Fusion.
  • Asegúrate de que la configuración de intercambio de tráfico entre redes de VPC permita exportar rutas, de modo que la VPC del proyecto de usuario de Cloud Data Fusion importe esta ruta personalizada a través del intercambio de tráfico entre redes de VPC.

gcloud

Para crear la ruta en gcloud CLI, haz lo siguiente:

gcloud beta compute routes create $ROUTE --project=$CDF_PROJECT \
    --network=$VPC_NETWORK --priority=1001 \
    --destination-range=0.0.0.0/0 \
    --next-hop-instance=$PROXY_VM \
    --next-hop-instance-zone=$ZONE

Configura el control de salida para la ejecución de la canalización

Una vez que puedas acceder a la Internet pública con los nombres de host permitidos en Vista previa y Wrangler en tu entorno de diseño, implementa tu canalización. Las canalizaciones de Cloud Data Fusion implementadas se ejecutan en clústeres de Dataproc de forma predeterminada.

Para garantizar que todo el tráfico de Internet público del clúster de Dataproc pase por una o más VM de proxy, agrega la zona y los registros de DNS privado. Este paso es obligatorio porque Cloud NAT no admite el filtrado.

En los registros DNS, incluye la dirección IP del ILB o la VM del proxy.

Implementa la canalización

Después de verificar la canalización en la fase de diseño, impleméntala. Las canalizaciones implementadas se ejecutan en clústeres de Dataproc de forma predeterminada.

Para asegurarte de que todo el tráfico de Internet público del clúster de Dataproc pase por una o más VM de proxy, agrega una ruta personalizada con etiquetas de instancia proxy y prioridad 1000 a la misma VPC que las VM de Dataproc:

Crear ruta personalizada

Modifica tu canalización para usar etiquetas de Dataproc, ya que Cloud NAT actualmente no admite ningún filtro de salida.

¿Qué sigue?