Controlar a saída em uma instância particular

Nesta seção, descrevemos a arquitetura de alto nível para estabelecer o controle 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 da arquitetura do sistema a seguir mostra como uma instância privada do Cloud Data Fusion se conecta à Internet pública quando você desenvolve um pipeline:

Diagrama da arquitetura da instância particular

É possível controlar conexões com aplicativos 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 pelos projetos do cliente. Esse processo usa os seguintes recursos:

  • Rota de rede VPC personalizada: uma rede VPC personalizada encaminha o tráfego por de uma rota personalizada importada para VMs de gateway, que exportam para uma VPC do projeto de locatário usando peering de VPC.

  • VM de proxy: uma VM de proxy encaminha o tráfego de saída do Google Cloud do projeto de locatário do Cloud Data Fusion para o destino especificado por meio da Internet pública. Crie e gerencie uma VM de gateway nos projetos do cliente. Recomendamos que você os defina em uma configuração de alta disponibilidade (HA, na sigla em inglês) usando um balanceador de carga interno (ILB). Se você tiver várias instâncias privadas do Cloud Data Fusion que usam a mesma rede VPC, poderá reutilizar a mesma VM dentro da VPC.

Antes de começar

Configurar o controle de saída durante o desenvolvimento do pipeline

O controle de saída permite controlar ou filtrar o que pode sair da rede, o que é útil em ambientes VPC Service Controls. Não há proxy de rede preferencial para executar essa tarefa. Exemplos de proxies incluem Squid Proxy, HAProxy e Envoy (links em inglês).

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

Crie uma VM de proxy

Crie uma VM na mesma VPC da instância privada do Cloud Data Fusion com o seguinte script de inicialização e encaminhamento de IP.

Esse script instala o proxy Squid e o configura para interceptar o tráfego HTTP e permitir domínios .squid-cache.org e .google.com. É possível substituir esses domínios pelos domínios que você quer conectar à sua instância do Cloud Data Fusion.

Console

  1. Acesse a página Instâncias da VM.

    Acessar a página "Instâncias de VMs"

  2. Clique em Criar instância.

  3. Use a mesma VPC que tem o peering de rede configurado com a instância privada do Cloud Data Fusion. Para mais informações sobre o peering de rede VPC nesse cenário, consulte Antes de começar.

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

  5. No campo Script de inicialização, digite o script a seguir:

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

Criar uma rota personalizada

Crie uma rota personalizada para se conectar à instância de VM de gateway que você criou.

Console

Para criar sua rota no console do Google Cloud, consulte Como adicionar uma rota estática.

Ao configurar a rota, faça o seguinte:

  • Defina a Prioridade como maior ou igual a 1001.
  • Use o mesmo projeto e a mesma VPC que a instância privada do Cloud Data Fusion.
  • Verifique se sua configuração de peering de rede VPC permite exportar rotas para que a VPC do projeto de locatário do Cloud Data Fusion importe essa rota personalizada por meio do peering de rede VPC.

gcloud

Para criar 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

Configurar o controle de saída para a execução de pipelines

Depois de acessar a Internet pública com nomes de host permitidos na Visualização e no Administrador no ambiente de design, implante o pipeline. Por padrão, os pipelines implantados do Cloud Data Fusion são executados em clusters do Dataproc.

Para garantir que todo o tráfego da Internet pública do cluster do Dataproc passe por uma ou mais VMs de proxy, adicione a zona e os registros DNS particulares. Essa etapa é necessária porque o Cloud NAT não é compatível com filtragem.

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

Implantar o pipeline

Depois de verificar o pipeline na fase de projeto, implante-o. Os pipelines implantados são executados em clusters do Dataproc por padrão.

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

Criar rota personalizada

Modificar o pipeline para usar tags do Dataproc, porque o Cloud NAT atualmente não aceita filtros de saída.

A seguir