Controle a saída numa instância privada

Esta secção descreve a arquitetura de alto nível para estabelecer o controlo de saída de instâncias privadas do Cloud Data Fusion durante a fase de desenvolvimento e a fase de execução do pipeline.

O diagrama de arquitetura do sistema seguinte mostra como uma instância privada do Cloud Data Fusion se liga à Internet pública quando desenvolve um pipeline:

Diagrama da arquitetura da instância privada

Pode controlar as ligações a aplicações SaaS e serviços de nuvem pública de terceiros durante o desenvolvimento ou a execução do pipeline, encaminhando todo o tráfego de saída através de projetos de clientes. Este processo usa os seguintes recursos:

  • Rota de rede VPC personalizada: uma rede VPC personalizada encaminha o tráfego através de uma rota personalizada importada para VMs de gateway, que exportam para uma VPC de projeto de inquilino através do peering de VPC.

  • VM de proxy: uma VM de proxy encaminha o tráfego de saída do Google Cloud projeto de inquilino do Cloud Data Fusion para o destino especificado através da Internet pública. Cria e gere uma VM de gateway nos seus projetos de cliente. Recomendamos que os configure numa configuração de alta disponibilidade (HA) através de um balanceador de carga interno (ILB). Se tiver várias instâncias privadas do Cloud Data Fusion que usam a mesma rede VPC, pode reutilizar a mesma VM na VPC.

Antes de começar

Configure o controlo de saída durante o desenvolvimento do pipeline

O controlo de saída permite-lhe controlar ou filtrar o que pode sair da sua rede, o que é útil em ambientes dos VPC Service Controls. Não existe nenhum proxy de rede preferencial para realizar esta tarefa. Alguns exemplos de proxies incluem Squid proxy, HAProxy e Envoy.

Os exemplos neste guia descrevem como configurar o proxy HTTP para a filtragem HTTP em instâncias de VMs que usam uma imagem Debian. Os exemplos usam um servidor proxy Squid, que é uma das formas de configurar um servidor proxy.

Crie uma VM de proxy

Crie uma VM na mesma VPC que a sua instância privada do Cloud Data Fusion com o seguinte script de arranque e encaminhamento de IP.

Este script instala o proxy Squid e configura-o para intercetar o tráfego HTTP e permitir os domínios .squid-cache.org e .google.com. Pode substituir estes domínios pelos domínios que quer associar à sua instância do Cloud Data Fusion.

Consola

  1. Aceda à página Instâncias de VM.

    Aceda à página de instâncias de VM

  2. Clique em Criar instância.

  3. Use a mesma VPC que tem o intercâmbio de redes configurado com a instância privada do Cloud Data Fusion. Para mais informações sobre a interligação de redes VPC neste cenário, consulte a secção Antes de começar.

  4. Ative o encaminhamento de IP para a instância na mesma rede que a instância do Cloud Data Fusion.

  5. No campo Script de arranque, introduza o seguinte 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

Crie um trajeto personalizado

Crie uma rota personalizada para estabelecer ligação à instância de VM de gateway que criou.

Consola

Para criar o seu trajeto na Google Cloud consola, consulte o artigo Adicionar um trajeto estático.

Quando configurar o trajeto, faça o seguinte:

  • Defina a Prioridade como superior ou igual a 1001.
  • Use o mesmo projeto e VPC que a instância privada do Cloud Data Fusion.
  • Certifique-se de que a configuração do peering de rede VPC permite a exportação de rotas, para que a VPC do projeto de inquilino do Cloud Data Fusion importe esta rota personalizada através do peering de rede VPC.

gcloud

Para criar a sua rota na CLI gcloud:

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

Configure o controlo de saída para a execução do pipeline

Depois de conseguir aceder à Internet pública com nomes de anfitriões permitidos na pré-visualização e no Wrangler no seu ambiente de design, implemente o pipeline. As pipelines do Cloud Data Fusion implementadas são executadas em clusters do Dataproc por predefinição.

Para garantir que todo o tráfego da Internet pública do cluster do Dataproc passa por uma ou mais VMs de proxy, adicione a zona e os registos de DNS privados. Este passo é obrigatório porque o Cloud NAT não suporta a filtragem.

Nos registos DNS, inclua o endereço IP da VM de proxy ou do ILB.

Implemente o seu pipeline

Depois de validar o pipeline na fase de conceção, implemente o pipeline. Os pipelines implementados são executados em clusters do Dataproc por predefinição.

Para garantir que todo o tráfego da Internet pública do cluster do Dataproc passa por uma ou mais VMs de proxy, adicione uma rota personalizada com etiquetas de instância proxy e prioridade 1000 à mesma VPC que as VMs do Dataproc:

Crie um trajeto personalizado

Modifique o pipeline para usar etiquetas do Dataproc, porque o Cloud NAT não suporta atualmente qualquer filtragem de saída.

O que se segue?