Controllare l'uscita in un'istanza privata

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

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

Diagramma dell'architettura delle istanze private

Puoi controllare le connessioni alle applicazioni SaaS e ai servizi cloud pubblico di terze parti durante lo sviluppo o l'esecuzione della pipeline inviando 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 dal progetto tenant Google Cloud di Cloud Data Fusion alla destinazione specificata tramite internet pubblico. 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

Configurare il controllo in uscita durante lo sviluppo della pipeline

Il controllo in uscita ti consente di controllare o filtrare ciò che può uscire dalla tua rete, il che è utile negli ambienti VPC Service Controls. Non esiste un proxy di rete preferito per eseguire questa operazione. Esempi di proxy includono proxy Squid, HAProxy e Envoy.

Gli esempi in questa guida descrivono come configurare il proxy HTTP per il filtro HTTP su istanze VM che utilizzano 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 sostituire questi domini con i domini che vuoi collegare all'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 Cloud Data Fusion privata. Per ulteriori informazioni sul peering di rete VPC in questo scenario, consulta Prima di iniziare.

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

  5. Nel campo Script di avvio, inserisci lo script che segue:

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

Creare un percorso personalizzato

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

Console

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

Quando configuri il percorso:

  • Imposta Priorità su un valore maggiore o uguale a 1001.
  • Utilizza lo stesso progetto e la stessa VPC dell'istanza privata di Cloud Data Fusion.
  • Assicurati che la configurazione del peering di rete VPC consenta di esportare le route, in modo che il VPC del progetto tenant 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 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. Per impostazione predefinita, le pipeline Cloud Data Fusion di cui è stato eseguito il deployment vengono eseguite sui cluster Dataproc.

Per assicurarti che tutto il traffico internet pubblico del cluster Dataproc passi attraverso una o più VM proxy, aggiungi la zona e i record DNS privati. Questo passaggio è necessario perché Cloud NAT non supporta il filtraggio.

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

Esegui il deployment della pipeline

Dopo aver verificato la pipeline nella fase di progettazione, esegui 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