Conectar-se a uma fonte pública a partir de uma instância privada

Nesta página, descrevemos como se conectar a aplicativos de software como serviço (SaaS), como o Salesforce, e a serviços de nuvem de terceiros, como o Amazon S3, usando uma instância privada do Cloud Data Fusion ao desenvolver um pipeline.

Neste guia, os termos saída e controle de saída são usados:

  • Saída refere-se ao tráfego de rede que sai do Google Cloud pela Internet pública. Normalmente, a saída acontece quando você cria um pipeline que lê ou grava em um serviço SaaS, como o Salesforce, ou em um serviço de nuvem pública, como o Amazon S3.

  • O controle de saída define proteções do tráfego de saída usando uma VM proxy, permitindo que o tráfego de saída para um conjunto de domínios pré-configurados funcione e todas as outras falharem. Isso permite um perímetro de segurança maior para o tráfego de saída e impede a saída indesejada de uma instância particular.

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

Quando você projeta o pipeline nesse cenário, o Cloud Data Fusion encaminha o tráfego de saída pelo projeto do cliente no Cloud Data Fusion Preview ou no Wrangler. Esse processo usa os seguintes recursos:

  • Uma 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.

  • Uma VM de gateway: uma VM de gateway encaminha o tráfego de saída do Google Cloud do projeto de locatário do Cloud Data Fusion para uma nuvem SaaS ou de terceiros pela Internet pública. Você gerencia essa VM no projeto do cliente. É possível configurá-lo em um ambiente de alta disponibilidade (HA, na sigla em inglês) usando um balanceador de carga interno (ILB, na sigla em inglês). É recomendável reutilizar a VM para várias instâncias particulares do Cloud Data Fusion na mesma VPC.

Para informações sobre como configurar o controle de saída nos ambientes de projeto e execução, consulte Controlar a saída em uma instância particular.

Antes de começar

Configurar a conexão de Internet

Veja nas etapas a seguir como acessar um bucket do Amazon S3 em uma instância particular do Cloud Data Fusion no Wrangler. As mesmas etapas se aplicam ao acesso a qualquer fonte de dados pela Internet pública quando você cria um pipeline no Preview ou no Wrangler.

Apenas uma única VM é usada neste guia. No entanto, para aplicativos essenciais, recomendamos criar VMs com balanceamento de carga. Para mais informações, consulte Configurar a VM de alta disponibilidade.

Criar um gateway NAT

Crie um gateway NAT do Cloud na mesma região e rede VPC que a instância particular do Cloud Data Fusion.

Acesse o Cloud NAT

Criar uma instância de VM de gateway e regras de firewall

Console

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

    Acessar instâncias de VM

  2. Clique em Criar instância. É recomendável usar uma VM sem IP externo.

  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
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -j MASQUERADE
    echo net.ipv4.ip_forward=1 > /etc/sysctl.d/11-gce-network-security.conf
    iptables-save
    

    Para mais informações, consulte Como executar scripts de inicialização.

    Para receber o intervalo de IP alocado para a instância do Cloud Data Fusion, acesse a página Detalhes da instância do Cloud Data Fusion.

    Interface de saída de teste

gcloud

Para criar a VM do gateway e as regras de firewall, execute o seguinte script na Google Cloud CLI:

export CDF_PROJECT=CDF_PROJECT
export GATEWAY_VM=GATEWAY_VM_NAME
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 $GATEWAY_VM --zone=$ZONE --machine-type=e2-medium --subnet=$SUBNET --network-tier=PREMIUM --metadata=startup-script=\#\!\ /bin/bash$'\n'echo\ 1\ \>\ /proc/sys/net/ipv4/ip_forward$'\n'iptables\ -t\ nat\ -A\ POSTROUTING\ -s\ 0.0.0.0/0\ -j\ MASQUERADE$'\n'echo\ net.ipv4.ip_forward=1\ \>\ /etc/sysctl.d/11-gce-network-security.conf$'\n'iptables-save  --can-ip-forward --no-address --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-v20210316 --image-project=debian-cloud --boot-disk-size=10GB --boot-disk-type=pd-balanced --boot-disk-device-name=$GATEWAY_VM --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=CDF_IP_RANGE --target-tags=http-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=CDF_IP_RANGE --target-tags=https-server

Substitua:

  • CDF_PROJECT: o identificador exclusivo personalizável do projeto.
  • GATEWAY_VM: o nome da VM que você quer configurar
  • ZONE: a zona da VM;
  • SUBNET: a sub-rede.
  • VPC_NETWORK: o nome da VM
  • COMPUTE_ENGINE_SA: o nome da conta de serviço do Compute Engine.
  • CDF_IP_RANGE: o intervalo de IP alocado para a instância do Cloud Data Fusion.

Como usar uma VPC compartilhada

Se você usa uma VPC compartilhada para conectar sua instância particular do Cloud Data Fusion a origens na Internet pública, crie uma VM de gateway no projeto host em que o peering de rede VPC esteja configurado com o projeto de locatário.

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. Defina o destino como o intervalo de IP alocado para a instância do Cloud Data Fusion.
  • 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:

export ROUTE=ROUTE
gcloud beta compute routes create $ROUTE --project=$CDF_PROJECT \
    --network=$VPC_NETWORK --priority=1001 \
    --destination-range=0.0.0.0/0 \
    --next-hop-instance=$GATEWAY_VM \
    --next-hop-instance-zone=$ZONE

Substitua:

  • ROUTE: o nome da rota personalizada.

Verificar sua configuração

Depois de executar as etapas anteriores, verifique se é possível acessar os serviços de bucket do S3 (ou outro serviço SaaS ou de nuvem pública) no Preview e no Wrangler.

Configurar um gateway altamente disponível

Recomendado: para aplicativos essenciais, recomendamos que você crie VMs com balanceamento de carga.

Criar regras de firewall para verificações de integridade

Crie regras de firewall para permitir o seguinte:

  • Porta 80 (HTTP) e 443 (HTTPS) de todos os intervalos de origem.
  • Tráfego TCP, UDP e ICMP de endereços IP de sondagem de verificação de integridade. Por exemplo, 130.211.0.0/22,35.191.0.0/16.

Console

Crie regras de firewall para permitir portas de todos os intervalos de origem, além de regras de firewall. para permitir tráfego TCP, UDP e ICMP de endereços IP da sondagem de verificação de integridade, como 130.211.0.0/22,35.191.0.0/16.

Consulte Como criar verificações de integridade.

gcloud

Crie uma regra de firewall para verificações de integridade:

export CDF_PROJECT=PROJECT_ID
export VPC_NETWORK=VPC_NETWORK

gcloud compute --project=$CDF_PROJECT firewall-rules create vpc-allow-http \
    --direction=INGRESS --priority=1000 \
    --network=$VPC_NETWORK \
    --action=ALLOW --rules=tcp:80 \
    --source-ranges=CDF_IP_RANGE \
    --target-tags=http-server

gcloud compute --project=$CDF_PROJECT firewall-rules create vpc-allow-https \
    --direction=INGRESS --priority=1000 --network=$VPC_NETWORK \
    --action=ALLOW --rules=tcp:443 --source-ranges=CDF_IP_RANGE \
    --target-tags=https-server

gcloud compute --project=$CDF_PROJECT firewall-rules create allow-health-checks \
    --network=$VPC_NETWORK \
    --action=allow --direction=ingress \
    --target-tags=allow-health-checks \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --rules=tcp,udp,icmp

Substitua:

  • PROJECT_ID: o identificador exclusivo personalizável do projeto.
  • VPC_NETWORK: o nome da sua rede VPC.
  • CDF_IP_RANGE: o intervalo de endereços IP alocado para o Cloud Data Fusion.

Criar modelo de instância de VM do gateway

Console

Ao criar um modelo de instância no console, siga estas etapas:

  • Crie-a na mesma VPC da instância do Cloud Data Fusion.
  • Recomendado: use uma VM com um endereço IP particular.
  • Ative as portas HTTP/HTTPS.
  • Ativar o encaminhamento de IP
  • No campo Script de inicialização, digite o script a seguir:

    #! /bin/bash
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -j MASQUERADE
    echo net.ipv4.ip_forward=1 > /etc/sysctl.d/11-gce-network-security.conf
    iptables-save
    

    Para mais informações, consulte Como executar scripts de inicialização.

    Para receber o intervalo de IP alocado para a instância do Cloud Data Fusion, acesse a página Detalhes da instância do Cloud Data Fusion.

gcloud

Criar um modelo de instância:

export TEMPLATE_NAME=TEMPLATE_NAME
export REGION=REGION
export SUBNET=SUBNET
export SERVICE_ACCOUNT=SERVICE_ACCOUNT

gcloud beta compute --project=$CDF_PROJECT instance-templates create $TEMPLATE_NAME \
--machine-type=e2-medium \
--subnet=projects/$CDF_PROJECT/regions/$REGION/subnetworks/$SUBNET \
--network-tier=PREMIUM --metadata=startup-script=sudo\ bash\ -c\ \"echo\ 1\ \>\ /proc/sys/net/ipv4/ip_forward\"$'\n'sudo\ iptables\ -t\ nat\ -A\ POSTROUTING\ -s\ 0.0.0.0/0\ -j\ MASQUERADE$'\n'sudo\ bash\ -c\ \"echo\ net.ipv4.ip_forward=1\ \>\ /etc/sysctl.d/11-gce-network-security.conf\"$'\n'sudo\ iptables-save \
--can-ip-forward --no-address --maintenance-policy=MIGRATE \
--service-account=$SERVICE_ACCOUNT \
--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 \
--region=$REGION --tags=http-server,https-server,allow-health-checks \
--image=debian-10-buster-v20210316 \
--image-project=debian-cloud --boot-disk-size=10GB \
--boot-disk-type=pd-balanced \
--boot-disk-device-name=$TEMPLATE_NAME \
--no-shielded-secure-boot --no-shielded-vtpm \
--no-shielded-integrity-monitoring \
--reservation-affinity=any

Criar verificação de integridade

Como nenhum serviço é executado nessa instância de VM do gateway, use a porta 22 para a verificação de integridade.

Console

Consulte Como criar verificações de integridade.

gcloud

Crie uma verificação de integridade:

export HEATH_CHECK=HEALTH_CHECK_NAME

gcloud beta compute health-checks create tcp $HEATH_CHECK --project=$CDF_PROJECT \
--port=22 --proxy-header=NONE --no-enable-logging \
--check-interval=5 --timeout=5 \
--unhealthy-threshold=2 --healthy-threshold=2

Criar um grupo de instâncias

Usando a verificação de integridade criada na etapa anterior, crie um grupo de instâncias:

Console

Consulte Como criar grupos de instâncias gerenciadas.

gcloud

Criar um grupo de instâncias:

export INSTANCE_GROUP=INSTANCE_GROUP
gcloud beta compute --project=$CDF_PROJECT instance-groups managed create $INSTANCE_GROUP \
--base-instance-name=$INSTANCE_GROUP \
--template=$TEMPLATE_NAME --size=1 --zone=$ZONE \
--health-check=test --initial-delay=300

gcloud beta compute --project "$CDF_PROJECT" instance-groups managed set-autoscaling "$INSTANCE_GROUP" \
--zone "$ZONE" --cool-down-period "60" \
--max-num-replicas "10" --min-num-replicas "1" \
--target-cpu-utilization "0.6" --mode "on"

Criar um balanceador de carga

Crie o balanceador de carga TCP (ILB) do grupo de instâncias criado na etapa anterior.

Adicionar a rota personalizada ao balanceador de carga

Adicione a rota personalizada ao balanceador de carga interno (ILB, na sigla em inglês) na mesma VPC que a instância do Cloud Data Fusion.

Console

Acessar a página Redes VPC.

Acessar redes VPC

Na guia Rotas, clique em Criar rota.

Adicionar rota personalizada

gcloud

Adicione a rota personalizada ao balanceador de carga interno:

export ROUTE=ROUTE_NAME
export ILB_FRONTEND=<ip_of_ilb_frontend>
gcloud beta compute routes create $ROUTE --project=$CDF_PROJECT \
--network=$VPC_NETWORK --priority=1001 \
--destination-range=0.0.0.0/0 \
--next-hop-ilb=$ILB_FRONTEND \
--next-hop-ilb-region=$REGION

Solução de problemas

Como receber erros de tempo limite de conexão no Preview ou no Wrangler

Ao configurar os controles de saída, você pode receber um erro Connection Timeout.

Para corrigir o problema, verifique se as seguintes configurações estão em vigor:

Verificações de integridade do grupo de instâncias não concluídas

Verifique se as regras de firewall para permitir o tráfego TCP, UDP e ICMP do intervalo de origem 130.211.0.0/22,35.191.0.0/16 estão presentes.

O pipeline falha ao ser executado no Dataproc

Para acessar a Internet pública no tempo de execução, ative o Cloud NAT na mesma região e rede que o cluster do Dataproc.

A seguir