Controllare l'uscita in un'istanza privata

Questa sezione descrive l'architettura di 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 come un'istanza privata di Cloud Data Fusion si connette a internet pubblico quando sviluppi 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 tramite i progetti cliente. Questo processo utilizza le seguenti risorse:

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

  • VM proxy: una VM proxy instrada il traffico in uscita dal Google Cloud progetto tenant di Cloud Data Fusion alla destinazione specificata tramite internet pubblico. Crea e gestisci una VM gateway nei tuoi progetti cliente. Ti consigliamo di configurarle 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 del traffico in uscita durante lo sviluppo della pipeline

Il controllo del traffico in uscita ti consente di controllare o filtrare ciò che può uscire dalla rete, il che è utile negli ambienti dei Controlli di servizio VPC. Non esiste un proxy di rete preferito per eseguire questa attività. Alcuni esempi di proxy sono Squid proxy, HAProxy ed Envoy.

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

Creare una VM proxy

Crea una VM nello stesso VPC dell'istanza privata di Cloud Data Fusion con il seguente script di avvio e l'inoltro 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 a cui vuoi connetterti con l'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. Attiva l'inoltro IP per l' istanza 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

Creare una route personalizzata

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

Console

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

Quando configuri la route, procedi nel seguente modo:

  • Imposta la Priorità su un valore maggiore o uguale a 1001.
  • Utilizza lo stesso progetto e 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

Configurare il controllo del traffico in uscita per l'esecuzione della pipeline

Dopo aver verificato di poter accedere a internet pubblico con i nomi host consentiti in Anteprima e Wrangler nell'ambiente di progettazione, esegui il deployment della pipeline. Per impostazione predefinita, le pipeline di Cloud Data Fusion di cui è stato eseguito il deployment vengono eseguite sui cluster Managed Service for Apache Spark.

Per assicurarti che tutto il traffico internet pubblico dal cluster Managed Service for Apache Spark passi attraverso una o più VM proxy, aggiungi la zona e i record DNS privati. Questo passaggio è obbligatorio perché Cloud NAT non supporta il filtro.

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

Eseguire 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 Managed Service for Apache Spark.

Per assicurarti che tutto il traffico internet pubblico dal cluster Managed Service for Apache Spark passi attraverso una o più VM proxy, aggiungi una route personalizzata con i tag dell'istanza proxy e la priorità 1000 allo stesso VPC delle VM Managed Service for Apache Spark:

Creare una route personalizzata

Modifica la pipeline in modo che utilizzi i tag Managed Service for Apache Spark perché Cloud NAT al momento non supporta alcun filtro del traffico in uscita.

Passaggi successivi