Conéctacte a una fuente pública desde una instancia privada

En esta página, se describe cómo conectarse a aplicaciones de software como servicio (SaaS), como Salesforce, y servicios de nube de terceros, como Amazon S3, desde una instancia privada de Cloud Data Fusion cuando desarrollas una canalización.

En esta guía, se usan los términos salida y control de salida:

  • Salida hace referencia al tráfico de red que sale de Google Cloud a través de la Internet pública. Por lo general, la salida ocurre cuando creas una canalización que lee o escribe en un servicio de SaaS como Salesforce o un servicio de nube pública como Amazon S3.

  • El control de salida define barreras de seguridad para el tráfico de salida mediante una VM de proxy, que permite que el tráfico de salida a un conjunto de dominios preconfigurados se realice correctamente y que todos los demás fallen. Habilita un perímetro de seguridad más alto para el tráfico de salida y puede evitar la salida no deseada desde una instancia privada.

En el siguiente diagrama de arquitectura del sistema, se muestra cómo una instancia privada de Cloud Data Fusion se conecta con la Internet pública cuando desarrollas una canalización:

Diagrama de arquitectura de instancia privada

Cuando diseñas tu canalización en esta situación, Cloud Data Fusion enruta el tráfico de salida a través de tu proyecto de cliente en la vista previa de Cloud Data Fusion o Wrangler. En este proceso, se usan los siguientes recursos:

  • Una ruta de red de VPC personalizada: Una red de VPC personalizada enruta el tráfico a través de una ruta personalizada importada a las VM de puerta de enlace, que se exportan a una VPC del proyecto de usuario mediante el Intercambio de tráfico entre VPC.

  • Una VM de puerta de enlace: una VM de puerta de enlace enruta el tráfico de salida de Google Cloud desde el proyecto de usuario de Cloud Data Fusion a un SaaS o una nube de terceros a través de la Internet pública. Administra esta VM en tu proyecto de cliente. Puedes configurarla en un entorno de alta disponibilidad (HA) mediante un balanceador de cargas interno (ILB). Se recomienda que vuelvas a usar la VM para varias instancias privadas de Cloud Data Fusion dentro de la misma VPC.

Para obtener información sobre la configuración del control de salida en los entornos de diseño y ejecución, consulta Controla la salida en una instancia privada.

Antes de comenzar

Configura la conexión a Internet

En los siguientes pasos, se describe cómo acceder a un bucket de Amazon S3 desde una instancia privada de Cloud Data Fusion en Wrangler. Los mismos pasos se aplican al acceso a cualquier fuente de datos a través de la Internet pública cuando diseñas una canalización en vista previa o Wrangler.

En esta guía, se usa una sola VM, pero para las aplicaciones esenciales, te recomendamos que crees VM con balanceo de cargas. Para obtener más información, consulta Configura VM de alta disponibilidad.

Crea una puerta de enlace de NAT

Crea una puerta de enlace de Cloud NAT en la misma región y red de VPC que tu instancia privada de Cloud Data Fusion.

Ir a Cloud NAT

Crea una instancia de VM de puerta de enlace y reglas de firewall

Consola

  1. Ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Haz clic en Crear instancia. Se recomienda usar una VM sin IP externa.

  3. Usa la misma VPC que tiene configurado el intercambio de tráfico entre redes con la instancia privada de Cloud Data Fusion. Para obtener más información sobre el intercambio de tráfico entre redes de VPC en esta situación, consulta Antes de comenzar.

  4. Habilita el reenvío de IP para la instancia en la misma red que la instancia de Cloud Data Fusion.

  5. En el campo Secuencia de comandos de inicio, ingresa la siguiente secuencia de comandos:

    #! /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 obtener más información, consulta la página Ejecuta secuencias de comandos de inicio.

    Para obtener el rango de IP asignado de la instancia de Cloud Data Fusion, ve a la página Detalles de la instancia de Cloud Data Fusion.

    Interfaz de salida de etapa de pruebas

gcloud

Para crear la VM de puerta de enlace y las reglas de firewall, ejecuta la siguiente secuencia de comandos en 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

Reemplaza lo siguiente:

  • CDF_PROJECT: Es el identificador único personalizable para tu proyecto.
  • GATEWAY_VM: Es el nombre de la VM que deseas configurar.
  • ZONE: la zona de tu VM
  • SUBNET: Es la subred.
  • VPC_NETWORK: El nombre de tu VM
  • COMPUTE_ENGINE_SA: Es el nombre de la cuenta de servicio de Compute Engine.
  • CDF_IP_RANGE: El rango de IP que se asigna a la instancia de Cloud Data Fusion

Usa una VPC compartida

Si usas una VPC compartida para conectar tu instancia privada de Cloud Data Fusion con fuentes de la Internet pública, crea una VM de puerta de enlace en el proyecto host en el que se configura el intercambio de tráfico entre redes de VPC con el proyecto de usuario.

Crea una ruta personalizada

Crea una ruta personalizada para conectarte a la instancia de VM de la puerta de enlace que creaste.

Consola

Para crear tu ruta en la consola de Google Cloud, consulta Agrega una ruta estática.

Cuando configures la ruta, haz lo siguiente:

  • Establece la Prioridad en 1001 o más. Establece el destino en el rango de IP asignado a la instancia de Cloud Data Fusion.
  • Usa el mismo proyecto y VPC que la instancia privada de Cloud Data Fusion.
  • Asegúrate de que la configuración de intercambio de tráfico entre redes de VPC permita exportar rutas, de modo que la VPC del proyecto de usuario de Cloud Data Fusion importe esta ruta personalizada a través del intercambio de tráfico entre redes de VPC.

gcloud

Para crear la ruta en gcloud CLI, haz lo siguiente:

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

Reemplaza lo siguiente:

  • ROUTE: Es el nombre de la ruta personalizada.

Verifica la configuración

Después de realizar los pasos anteriores, verifica que puedas acceder a los servicios del bucket de S3 (o a otro servicio de SaaS o de nube pública) en Vista previa y Wrangler.

Configura una puerta de enlace con alta disponibilidad

Recomendado: Para aplicaciones de servicio crítico, te recomendamos que crees VM con balanceo de cargas.

Crea reglas de firewall para las verificaciones de estado

Crea reglas de firewall para permitir lo siguiente:

  • Puerto 80 (HTTP) y puerto 443 (HTTPS) de todos los rangos de origen.
  • Tráfico de TCP, ICMP y UDP desde las direcciones IP de la verificación de estado. Por ejemplo: 130.211.0.0/22,35.191.0.0/16.

Consola

Crea reglas de firewall para permitir puertos de todos los rangos de origen y reglas de firewall para permitir el tráfico de TCP, ICMP y UDP de direcciones IP de sondeo de verificación de estado como 130.211.0.0/22,35.191.0.0/16.

Consulta Crea verificaciones de estado.

gcloud

Crea una regla de firewall para las verificaciones de estado:

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

Reemplaza lo siguiente:

  • PROJECT_ID: Es el identificador único personalizable para tu proyecto.
  • VPC_NETWORK: El nombre de tu red de VPC
  • CDF_IP_RANGE: Es el rango de direcciones IP asignado a Cloud Data Fusion.

Crea una plantilla de instancia de VM de la puerta de enlace

Consola

Cuando creas una plantilla de instancias en Console, haz lo siguiente:

  • Créala en la misma VPC que la instancia de Cloud Data Fusion.
  • Recomendado: Usa una VM con una dirección IP privada.
  • Habilita los puertos HTTP/HTTPS.
  • Habilita el reenvío de IP
  • En el campo Secuencia de comandos de inicio, ingresa la siguiente secuencia de comandos:

    #! /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 obtener más información, consulta la página Ejecuta secuencias de comandos de inicio.

    Para obtener el rango de IP asignado de la instancia de Cloud Data Fusion, ve a la página Detalles de la instancia de Cloud Data Fusion.

gcloud

Crea una plantilla de instancias:

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

Crea una verificación de estado

No se ejecuta ningún servicio en esta instancia de VM de puerta de enlace, por lo que puedes usar el puerto 22 para tu verificación de estado.

Consola

Consulta Crea verificaciones de estado.

gcloud

Crea una verificación de estado de la siguiente forma:

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

Crea un grupo de instancias

Con la verificación de estado creada en el paso anterior, crea un grupo de instancias:

Consola

Consulta Crea grupos de instancias administrados.

gcloud

Crear un grupo de instancias:

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"

Crea un balanceador de cargas

Crea un balanceador de cargas de TCP (ILB) desde el grupo de instancias creado en el paso anterior.

Agrega la ruta personalizada al balanceador de cargas

Agrega la ruta personalizada al balanceador de cargas interno (ILB) en la misma VPC que la instancia de Cloud Data Fusion.

Consola

Ve a la página Redes de VPC.

Ir a las redes de VPC

En la pestaña Rutas, haz clic en Crear ruta.

Agregar ruta personalizada

gcloud

Agrega la ruta personalizada al balanceador de cargas 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

Soluciona problemas

Obtén errores de tiempo de espera de conexión en vista previa o Wrangler

Cuando configuras controles de salida, es posible que recibas un error Connection Timeout.

Para solucionar el problema, verifica que se hayan implementado las siguientes opciones de configuración:

Las verificaciones de estado del grupo de instancias no se realizaron de forma correcta

Comprueba que las reglas de firewall para permitir el tráfico de TCP, ICMP y UDP del rango de origen 130.211.0.0/22,35.191.0.0/16 estén presentes.

La canalización falla mientras se ejecuta en Dataproc

Para acceder a la Internet pública al momento de la ejecución, habilita Cloud NAT en la misma región y red que el clúster de Dataproc.

¿Qué sigue?