Ausgehenden Traffic in einer privaten Instanz steuern

In diesem Abschnitt wird die allgemeine Architektur zum Einrichten der Ausgangssteuerung von privaten Cloud Data Fusion-Instanzen während der Entwicklungsphase und der Pipelineausführungsphase beschrieben.

Das folgende Systemarchitekturdiagramm zeigt, wie eine private Cloud Data Fusion-Instanz bei der Entwicklung einer Pipeline eine Verbindung zum öffentlichen Internet herstellt:

Diagramm der Architektur einer privaten Instanz

Sie können Verbindungen zu SaaS-Anwendungen und öffentlichen Cloud-Diensten von Drittanbietern während der Pipelineentwicklung oder -ausführung steuern. Dazu leiten Sie den gesamten ausgehenden Traffic über Kundenprojekte weiter. Für diesen Prozess werden die folgenden Ressourcen verwendet:

  • Eine benutzerdefinierte VPC-Netzwerkroute: Ein benutzerdefiniertes VPC-Netzwerk leitet den Traffic über eine importierte benutzerdefinierte Route an Gateway-VMs weiter, die mithilfe von VPC-Peering in die VPC eines Mandantenprojekts exportieren.

  • Proxy-VM: Eine Proxy-VM leitet ausgehenden Traffic aus Google Cloud vom Cloud Data Fusion-Mandantenprojekt über das öffentliche Internet an das angegebene Ziel weiter. Sie erstellen und verwalten eine Gateway-VM in Ihren Kundenprojekten. Es wird empfohlen, sie in einem Hochverfügbarkeits-Setup mit einem internen Load-Balancer (ILB) zu konfigurieren. Wenn Sie mehrere private Cloud Data Fusion-Instanzen haben, die dasselbe VPC-Netzwerk verwenden, können Sie dieselbe VM in der VPC wiederverwenden.

Hinweise

Steuerung des ausgehenden Traffics während der Pipeline-Entwicklung einrichten

Mit der Steuerung ausgehenden Traffics können Sie steuern oder filtern, was aus dem Netzwerk herausgehen kann. Dies ist in VPC Service Controls-Umgebungen nützlich. Es gibt keinen bevorzugten Netzwerkproxy zum Ausführen dieser Aufgabe. Beispiele für Proxys sind Squid-Proxy, HAProxy und Envoy.

In den Beispielen in dieser Anleitung wird beschrieben, wie Sie den HTTP-Proxy für die HTTP-Filterung auf VM-Instanzen einrichten, die ein Debian-Image verwenden. In den Beispielen wird ein Squid-Proxyserver verwendet. Dies ist eine der Möglichkeiten zum Einrichten eines Proxyservers.

Proxy-VM erstellen

Erstellen Sie mit dem folgenden Startskript und der folgenden IP-Weiterleitung eine VM in derselben VPC wie Ihre private Cloud Data Fusion-Instanz.

Dieses Skript installiert den Squid-Proxy und konfiguriert ihn so, dass er HTTP-Traffic abfängt und die Domains .squid-cache.org und .google.com zulässt. Sie können diese Domains durch die Domains ersetzen, die Sie mit Ihrer Cloud Data Fusion-Instanz verbinden möchten.

Console

  1. Rufen Sie die Seite VM-Instanzen auf.

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf Instanz erstellen.

  3. Verwenden Sie dieselbe VPC, für die das Netzwerk-Peering mit der privaten Cloud Data Fusion-Instanz eingerichtet ist. Weitere Informationen zum VPC-Netzwerk-Peering in diesem Szenario finden Sie unter Vorbereitung.

  4. Aktivieren Sie die IP-Weiterleitung für die Instanz im selben Netzwerk wie die Cloud Data Fusion-Instanz.

  5. Geben Sie im Feld Startskript das folgende Skript ein:

    #! /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

Benutzerdefinierte Route erstellen

Erstellen Sie eine benutzerdefinierte Route, um eine Verbindung zur von Ihnen erstellten Gateway-VM-Instanz herzustellen.

Console

Informationen zum Erstellen einer Route in der Google Cloud Console finden Sie unter Statische Route hinzufügen.

So konfigurieren Sie die Route:

  • Legen Sie die Priorität auf einen Wert größer oder gleich 1001 fest.
  • Verwenden Sie dasselbe Projekt und dieselbe VPC wie die private Cloud Data Fusion-Instanz.
  • Achten Sie darauf, dass Ihre VPC-Netzwerk-Peering-Konfiguration das Exportieren von Routen zulässt, damit die VPC des Cloud Data Fusion-Mandantenprojekts diese benutzerdefinierte Route über VPC-Netzwerk-Peering importiert.

gcloud

So erstellen Sie die Route in der gcloud CLI:

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

Steuerung des ausgehenden Traffics für die Pipeline-Ausführung einrichten

Nachdem Sie in Ihrer Designumgebung mit den zulässigen Hostnamen in der Vorschau und in Wrangler auf das öffentliche Internet zugreifen können, stellen Sie Ihre Pipeline bereit. Bereitgestellte Cloud Data Fusion-Pipelines werden standardmäßig auf Dataproc-Clustern ausgeführt.

Fügen Sie die private DNS-Zone und die privaten DNS-Einträge hinzu, damit der gesamte öffentliche Internettraffic vom Dataproc-Cluster über eine oder mehrere Proxy-VMs weitergeleitet wird. Dieser Schritt ist erforderlich, da Cloud NAT keine Filterung unterstützt.

Geben Sie in den DNS-Einträgen die IP-Adresse der Proxy-VM oder des internen Load-Balancers an.

Pipeline bereitstellen

Nachdem Sie die Pipeline in der Designphase verifiziert haben, stellen Sie sie bereit. Bereitgestellte Pipelines werden standardmäßig auf Dataproc-Clustern ausgeführt.

Damit der gesamte öffentliche Internettraffic vom Dataproc-Cluster über eine oder mehrere Proxy-VMs weitergeleitet wird, fügen Sie der gleichen VPC wie die Dataproc-VMs eine benutzerdefinierte Route mit den Instanztags proxy und der Priorität 1000 hinzu:

Benutzerdefinierte Route erstellen

Stellen Sie Ihre Pipeline so ein, dass Dataproc-Tags verwendet werden, da Cloud NAT derzeit keine Filterung nach ausgehendem Traffic unterstützt.

Nächste Schritte