Se connecter à une source publique depuis une instance privée

Cette page explique comment se connecter à des applications SaaS (Software as a Service) telles que Salesforce et à des services cloud tiers tels qu'Amazon S3 depuis une instance Cloud Data Fusion privée lors du développement d'un pipeline.

Tout au long de ce guide, les termes sortie et contrôle de sortie sont utilisés :

  • La sortie fait référence au trafic réseau quittant Google Cloud via l'Internet public. En général, le trafic de sortie se produit lorsque vous créez un pipeline écrit sur un service SaaS tel que Salesforce, ou sur un service de cloud public tel que Amazon S3.

  • Le contrôle de sortie définit des garde-fous pour le trafic de sortie par le biais d'une VM proxy. Ainsi, le trafic sortant vers un ensemble de domaines préconfigurés sera autorisé, alors que tous les autres trafics échoueront. Cela active un périmètre de sécurité renforcée pour le trafic de sortie et peut empêcher toute sortie non souhaitée depuis une instance privée.

Le schéma d'architecture système suivant montre comment une instance Cloud Data Fusion privée se connecte à l'Internet public lorsque vous développez un pipeline :

Schéma de l'architecture d'instance privée

Lorsque vous concevez votre pipeline dans ce scénario, Cloud Data Fusion achemine le trafic de sortie via votre projet client dans la version Preview ou Wrangler de Cloud Data Fusion. Ce processus utilise les ressources suivantes :

  • Une route de réseau VPC personnalisé : un réseau VPC personnalisé achemine le trafic via une route personnalisée importée vers des VM de passerelle, qui exportent vers un VPC de projet locataire à l'aide de l'appairage de VPC.

  • Une VM de passerelle : une VM de passerelle achemine le trafic sortant de Google Cloud en provenance du projet locataire Cloud Data Fusion vers un cloud SaaS ou tiers via l'Internet public. Vous gérez cette VM dans votre projet client. Vous pouvez la configurer dans un environnement à haute disponibilité à l'aide d'un équilibreur de charge interne (ILB). Il est recommandé de réutiliser la VM pour plusieurs des instances Cloud Data Fusion privées au sein du même VPC.

Pour plus d'informations sur la configuration du contrôle de sortie dans vos environnements conceptuels et d'exécution, consultez la page Contrôler le trafic de sortie dans une instance privée.

Avant de commencer

Configurer la connectivité Internet

Les étapes suivantes décrivent comment accéder à un bucket Amazon S3 depuis une instance Cloud Data Fusion privée dans Wrangler. Les mêmes étapes s'appliquent pour l'accès à n'importe quelle source de données via le réseau Internet public lorsque vous concevez un pipeline en mode Aperçu ou Wrangler.

Une seule VM est utilisée dans ce guide, mais pour les applications critiques, nous vous recommandons de créer des VM à équilibrage de charge. Pour en savoir plus, consultez la section Configurer une VM à haute disponibilité.

Créer une passerelle NAT

Créez une passerelle Cloud NAT dans la même région et sur le même réseau VPC que votre instance privée Cloud Data Fusion.

Accédez à Cloud NAT

Créer une instance de VM de passerelle et des règles de pare-feu

Console

  1. Accédez à la page Instances de VM.

    Accéder à la page "Instances de VM"

  2. Cliquez sur Créer une instance. Il est recommandé d'utiliser une VM sans adresse IP externe.

  3. Utilisez le VPC pour lequel l'appairage de réseaux est configuré avec l'instance Cloud Data Fusion privée. Pour en savoir plus sur l'appairage de réseaux VPC dans ce scénario, consultez la section Avant de commencer.

  4. Activez le transfert IP pour l'instance au sein du même réseau que l'instance Cloud Data Fusion.

  5. Dans le champ Script de démarrage, saisissez le script suivant :

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

    Pour en savoir plus, consultez la page Exécuter des scripts de démarrage.

    Pour obtenir la plage d'adresses IP allouée à l'instance Cloud Data Fusion, accédez à la page Détails de l'instance de Cloud Data Fusion.

    Interface de sortie de préproduction

gcloud

Pour créer la VM de passerelle et les règles de pare-feu, exécutez le script suivant dans la 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

Remplacez les éléments suivants :

  • CDF_PROJECT: identifiant unique personnalisable de votre projet
  • GATEWAY_VM: nom de la VM que vous souhaitez configurer
  • ZONE : zone de votre VM
  • SUBNET : sous-réseau
  • VPC_NETWORK : nom de votre VM
  • COMPUTE_ENGINE_SA : nom de votre compte de service Compute Engine
  • CDF_IP_RANGE : plage d'adresses IP allouée à l'instance Cloud Data Fusion

Utiliser un VPC partagé

Si vous utilisez un VPC partagé pour connecter votre instance privée Cloud Data Fusion vers des sources sur l'Internet public, créez une VM passerelle dans le projet hôte où L'appairage de réseaux VPC est configuré avec le projet locataire.

Créer une route personnalisée

Créez une route personnalisée pour vous connecter à l'instance de VM de passerelle que vous avez créée.

Console

Pour créer votre route dans la console Google Cloud, consultez la section Ajouter une route statique.

Lorsque vous configurez la route :

  • Définissez la priorité sur supérieur ou égal à 1001. Définissez la destination sur la plage d'adresses IP allouée à l'instance Cloud Data Fusion.
  • Utilisez le même projet et le même VPC que l'instance Cloud Data Fusion privée.
  • Assurez-vous que la configuration de l'appairage de réseaux VPC autorise l'exportation de routes, afin que le VPC du projet locataire Cloud Data Fusion importe cette route personnalisée via l'appairage de réseaux VPC.

gcloud

Pour créer votre route dans gcloud CLI:

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

Remplacez les éléments suivants :

  • ROUTE: nom de la route personnalisée.

Vérifier votre configuration

Après avoir effectué les étapes précédentes, vérifiez que vous pouvez accéder au bucket S3 (ou d'autres services SaaS ou de cloud public) dans Preview et Wrangler.

Configurer une passerelle haute disponibilité

Recommandation : Pour les applications critiques, nous vous recommandons de créer des VM à équilibrage de charge.

Créer des règles de pare-feu pour les vérifications d'état

Créez des règles de pare-feu pour autoriser :

  • Port 80 (HTTP) et port 443 (HTTPS) de toutes les plages sources.
  • Trafic TCP, UDP et ICMP provenant d'adresses IP de vérification d'état. Exemple : 130.211.0.0/22,35.191.0.0/16.

Console

Créez des règles de pare-feu pour autoriser les ports de toutes les plages sources, et des règles de pare-feu pour autoriser le trafic TCP, UDP et ICMP provenant d'adresses IP de vérification d'état, telles que 130.211.0.0/22,35.191.0.0/16.

Consultez la page Créer des vérifications d'état.

gcloud

Créez une règle de pare-feu pour les vérifications d'état :

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

Remplacez les éléments suivants :

  • PROJECT_ID : identifiant unique personnalisable de votre projet.
  • VPC_NETWORK : nom de votre réseau VPC.
  • CDF_IP_RANGE: plage d'adresses IP allouée à Cloud Data Fusion.

Créer un modèle d'instance de VM de passerelle

Console

Lorsque vous créez un modèle d'instance dans la console :

  • Créez-le dans le même VPC que l'instance Cloud Data Fusion.
  • Recommandation : Utilisez une VM avec une adresse IP privée.
  • Activez les ports HTTP/HTTPS.
  • Activer le transfert IP
  • Dans le champ Script de démarrage, saisissez le script suivant :

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

    Pour en savoir plus, consultez la page Exécuter des scripts de démarrage.

    Pour obtenir la plage d'adresses IP allouée à l'instance Cloud Data Fusion, accédez à la page Détails de l'instance de Cloud Data Fusion.

gcloud

Créez un modèle d'instance :

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

Créer une vérification d'état

Aucun service ne s'exécute sur cette instance de VM de passerelle. Vous pouvez donc utiliser le port 22 pour votre vérification d'état.

Console

Consultez la page Créer des vérifications d'état.

gcloud

Créez une vérification d'état :

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

Créer un groupe d'instances

À l'aide de la vérification de l'état créée à l'étape précédente, créez un groupe d'instances :

Console

Consultez la page Créer des groupes d'instances gérés.

gcloud

Créez un groupe d'instances :

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"

Créer un équilibreur de charge

Créez un équilibreur de charge TCP (ILB) à partir du groupe d'instances créé à l'étape précédente.

Ajouter la route personnalisée à l'équilibreur de charge

Ajoutez la route personnalisée à l'équilibreur de charge interne (ILB) dans le même VPC que l'instance Cloud Data Fusion.

Console

Accédez à la page Réseau VPC.

Accéder aux réseaux VPC

Dans l'onglet Routes, cliquez sur Créer une route.

Ajouter une route personnalisée

gcloud

Ajoutez la route personnalisée à l'équilibreur de charge interne :

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

Dépannage

Erreurs de délai avant expiration de connexion dans Preview ou Wrangler

Lorsque vous configurez des contrôles de sortie, une erreur Connection Timeout peut s'afficher.

Pour résoudre le problème, vérifiez que les paramètres suivants sont en place :

Échec des vérifications de l'état des groupes d'instances

Vérifiez que des règles de pare-feu autorisant le trafic TCP, UDP et ICMP provenant de la plage source 130.211.0.0/22,35.191.0.0/16 sont présentes.

Échec du pipeline lors de l'exécution dans Dataproc

Pour accéder à l'Internet public au moment de l'exécution, activez Cloud NAT dans la même région et le même réseau que le cluster Dataproc.

Étape suivante