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:
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 fuera 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
Puedes conectarte a una fuente pública desde una instancia privada en Cloud Data Fusion 6.4 o versiones posteriores. Para usar una de esas versiones, puedes crear una instancia privada de Cloud Data Fusion o actualizar una instancia existente.
Cuando creas una conexión de intercambio de tráfico entre redes de VPC para tu instancia, selecciona Exportar rutas.
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 el servidor proxy 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.
Console
Ve a la página Instancias de VM.
Haga clic en Crear instancia.
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.
Habilita el reenvío de IP para la instancia en la misma red que la instancia de Cloud Data Fusion.
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.
Console
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 tu configuración de intercambio de tráfico entre redes de VPC permita exportar para 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 tu ruta en gcloud CLI, sigue estos pasos:
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
Después de poder acceder a la Internet pública con los nombres de host permitidos en Preview 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 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 los registros y la zona DNS privada. Este paso es necesario 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, implementar tu canalización. Las canalizaciones implementadas se ejecutan en clústeres de Dataproc de forma predeterminada.
Para asegurarte de que todo el tráfico a la Internet pública 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:
Modifica la canalización para usar etiquetas de Dataproc porque, actualmente, Cloud NAT no admite ningún filtro de salida.
¿Qué sigue?
- Obtén más información sobre las herramientas de redes en Cloud Data Fusion.