Ausgehenden Traffic in einer privaten Instanz steuern

In diesem Abschnitt wird die allgemeine Architektur zum Einrichten der Steuerung des ausgehenden Traffics 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 zum angegebenen Ziel über das öffentliche Internet. 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.

Hinweis

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, der eine der Methoden 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 zu VPC-Netzwerk-Peering, siehe Hinweise

  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.

Gehen Sie beim Konfigurieren der Route so vor:

  • 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 eine 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

Sobald Sie mit den zulässigen Hostnamen in Sehen Sie sich die Vorschau und die Wrangler-Codierung in Ihrer Designumgebung an und stellen Sie die Pipeline bereit. Bereitgestellte Cloud Data Fusion-Pipelines werden standardmäßig auf Dataproc-Clustern ausgeführt.

Damit der gesamte öffentliche Internet-Traffic vom Dataproc-Cluster über eine oder mehrere Proxy-VMs geleitet wird, fügen Sie die private DNS-Zone und die Einträge hinzu. Dieser Schritt ist erforderlich, da Cloud NAT unterstützen Filterung.

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, Ihre Pipeline bereitstellen. Bereitgestellte Pipelines werden standardmäßig auf Dataproc-Clustern ausgeführt.

Damit der gesamte öffentliche Internet-Traffic vom Dataproc-Cluster über eine oder mehrere Proxy-VMs geleitet wird, fügen Sie derselben VPC wie die Dataproc-VMs eine benutzerdefinierte Route mit den Instanz-Tags proxy und der Priorität 1000 hinzu:

Benutzerdefinierte Route erstellen

Pipeline so ändern, dass Dataproc-Tags verwendet werden, weil Cloud NAT unterstützt derzeit keine Filterung des ausgehenden Traffics.

Nächste Schritte