Controlla il traffico in uscita in un'istanza privata

Questa sezione descrive l'architettura di alto livello per stabilire il traffico in uscita il controllo da parte di istanze private di Cloud Data Fusion durante lo sviluppo e quella di esecuzione della pipeline.

Il seguente diagramma dell'architettura di sistema mostra come un'istanza Cloud Data Fusion privata si connette alla rete internet pubblica quando sviluppi una pipeline:

Diagramma dell'architettura delle istanze private

È possibile controllare le connessioni ad applicazioni SaaS e a cloud pubblico di terze parti durante lo sviluppo o l'esecuzione della pipeline, indirizzando tutto il traffico in uscita tramite i progetti dei clienti. Questa procedura utilizza le seguenti risorse:

  • Route della rete VPC personalizzata: una rete VPC personalizzata instrada il traffico tramite una route personalizzata importata alle VM gateway, che vengono esportate in una VPC del progetto del tenant utilizzando il peering VPC.

  • VM proxy: una VM proxy instrada il traffico in uscita da Google Cloud il progetto tenant di Cloud Data Fusion nella destinazione specificata tramite nella rete internet pubblica. Creazione e gestione di una VM gateway nei progetti dei clienti. Ti consigliamo di configurarli in una configurazione ad alta disponibilità (HA) utilizzando un bilanciatore del carico interno (ILB). Se hai più istanze private di Cloud Data Fusion che utilizzano la stessa rete VPC, puoi riutilizzare la stessa VM all'interno del VPC.

Prima di iniziare

Configura il controllo del traffico in uscita durante lo sviluppo della pipeline

Il controllo in uscita consente di controllare o filtrare cosa può uscire dal di Google Cloud, il che è utile negli ambienti Controlli di servizio VPC. Non sono presenti proxy di rete preferito per l'esecuzione di questa attività. Esempi di proxy includono proxy Squid, HAProxy e Envoy.

Gli esempi in questa guida descrivono come configurare il proxy HTTP per il filtro HTTP sulle istanze VM che usano un'immagine Debian. Gli esempi utilizzano un server proxy Squid, che è uno dei modi per configurare un server proxy.

Crea una VM proxy

Crea una VM nella stessa VPC dell'istanza privata di Cloud Data Fusion con il seguente script di avvio e il forwarding IP.

Questo script installa il proxy Squid e lo configura per intercettare il traffico HTTP e consentire i domini .squid-cache.org e .google.com. Puoi sostituirli domini con i domini che vuoi collegare con dell'istanza di Cloud Data Fusion.

Console

  1. Vai alla pagina Istanze VM.

    Vai alla pagina Istanze VM

  2. Fai clic su Crea istanza.

  3. Usa lo stesso VPC per cui è configurato il peering di rete con il VPC dell'istanza di Cloud Data Fusion. Per ulteriori informazioni il peering di rete VPC in questo scenario, consulta Prima di iniziare.

  4. Attiva l'IP forwarding per nella stessa rete dell'istanza Cloud Data Fusion.

  5. Nel campo Script di avvio, inserisci il seguente script:

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

Crea una route personalizzata per connetterti all'istanza VM del gateway che hai creato.

Console

Per creare il percorso nella console Google Cloud, consulta Aggiunta di una route statica.

Quando configuri la route, segui questi passaggi:

  • Imposta la Priorità su un valore maggiore o uguale a 1001.
  • Utilizza lo stesso progetto e VPC dell'istanza Cloud Data Fusion privata.
  • Assicurati che la configurazione del peering di rete VPC consenta l'esportazione delle route, in modo che il VPC del progetto tenant di Cloud Data Fusion importa questa route personalizzata tramite peering di rete VPC.

gcloud

Per creare la route in 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

Configura il controllo in uscita per l'esecuzione della pipeline

Dopo aver eseguito l'accesso a internet pubblico con gli hostname consentiti in Preview e Wrangler nel tuo ambiente di progettazione, esegui il deployment della pipeline. Deployment eseguito Le pipeline di Cloud Data Fusion vengono eseguite sui cluster Dataproc per impostazione predefinita.

Per garantire che tutto il traffico internet pubblico proveniente da Il cluster Dataproc passa attraverso una o più VM proxy, aggiungi la zona e i record DNS privati. Questo passaggio è obbligatorio perché Cloud NAT supportano i filtri.

Nei record DNS, includi l'indirizzo IP della VM proxy o dell'ILB.

Esegui il deployment della pipeline

Dopo aver verificato la pipeline in fase di progettazione, il deployment della pipeline. Per impostazione predefinita, le pipeline di cui è stato eseguito il deployment vengono eseguite sui cluster Dataproc.

Per assicurarti che tutto il traffico pubblico di internet dal cluster Dataproc passi attraverso una o più VM proxy, aggiungi una route personalizzata con i tag istanza proxy e la priorità 1000 alla stessa VPC delle VM Dataproc:

Creare una route personalizzata

Modifica la pipeline per utilizzare i tag Dataproc perché Cloud NAT attualmente non supporta alcun filtro in uscita.

Passaggi successivi