Controlla il traffico in uscita in un'istanza privata

Questa sezione descrive l'architettura ad alto livello per stabilire il controllo del traffico in uscita dalle istanze private di Cloud Data Fusion durante la fase di sviluppo e di esecuzione della pipeline.

Il seguente diagramma dell'architettura di sistema mostra in che modo un'istanza privata di Cloud Data Fusion si connette alla rete internet pubblica durante lo sviluppo di una pipeline:

Diagramma dell'architettura dell'istanza privata

Puoi controllare le connessioni alle applicazioni SaaS e ai servizi cloud pubblico di terze parti durante lo sviluppo o l'esecuzione della pipeline instradando tutto il traffico in uscita attraverso progetti dei clienti. Questa procedura utilizza le seguenti risorse:

  • Route di rete VPC personalizzata: una rete VPC personalizzata instrada il traffico attraverso una route personalizzata importata alle VM gateway, che esportano in un VPC di progetto tenant utilizzando il peering VPC.

  • VM proxy: una VM proxy instrada il traffico in uscita da Google Cloud dal progetto tenant di Cloud Data Fusion alla destinazione specificata attraverso la rete internet pubblica. Puoi creare e gestire una VM gateway nei progetti dei clienti. Ti consigliamo di configurarle in una configurazione ad alta disponibilità 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 del traffico in uscita ti consente di controllare o filtrare ciò che può essere emesso dalla rete, il che è utile negli ambienti Controlli di servizio VPC. Non esiste un proxy di rete preferito per l'esecuzione di questa attività. Esempi di proxy includono proxy Squid, HAProxy ed Envoy.

Gli esempi in questa guida descrivono come configurare il proxy HTTP per i filtri HTTP sulle istanze VM che utilizzano un'immagine Debian. Negli esempi viene utilizzato un server proxy Squid, che è uno dei metodi di configurazione di un server proxy.

Crea una VM proxy

Crea una VM nello stesso VPC della tua istanza privata di Cloud Data Fusion con lo script di avvio e l'inoltro IP seguenti.

Questo script installa il proxy Squid e lo configura in modo da intercettare il traffico HTTP e consentire i domini .squid-cache.org e .google.com. Puoi sostituire questi domini con quelli che vuoi connettere alla tua istanza Cloud Data Fusion.

Console

  1. Vai alla pagina Istanze VM.

    Vai alla pagina Istanze VM

  2. Fai clic su Crea istanza.

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

  4. Abilita l'inoltro IP per l'istanza nella stessa rete dell'istanza di 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 gateway che hai creato.

Console

Per creare la route nella console Google Cloud, vedi Aggiunta di una route statica.

Quando configuri la route, segui questi passaggi:

  • Imposta il campo Priority (Priorità) su un valore maggiore o uguale a 1001.
  • Utilizza lo stesso progetto e lo stesso VPC dell'istanza privata di Cloud Data Fusion.
  • 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 importi questa route personalizzata tramite il 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 del traffico in uscita per l'esecuzione della pipeline

Dopo essere riuscito ad accedere alla rete internet pubblica con i nomi host consentiti in Anteprima e Wrangler nell'ambiente di progettazione, esegui il deployment della pipeline. Le pipeline di Cloud Data Fusion di cui è stato eseguito il deployment vengono eseguite su cluster Dataproc per impostazione predefinita.

Per assicurarti che tutto il traffico internet pubblico dal cluster Dataproc passi attraverso una o più VM proxy, aggiungi la zona e i record DNS privati. Questo passaggio è obbligatorio perché Cloud NAT non supporta 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, esegui il deployment della pipeline. Le pipeline di cui è stato eseguito il deployment vengono eseguite su cluster Dataproc per impostazione predefinita.

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

Crea route personalizzata

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

Passaggi successivi