Contrôler la sortie dans une instance privée

Cette section décrit l'architecture de haut niveau permettant d'établir un contrôle de sortie à partir d'instances Cloud Data Fusion privées pendant la phase de développement, ainsi que la phase d'exécution du pipeline.

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

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

Vous pouvez contrôler les connexions aux applications SaaS et aux services cloud publics tiers lors du développement ou de l'exécution des pipelines en acheminant tout le trafic de sortie via des projets clients. Ce processus utilise les ressources suivantes:

  • Route réseau VPC personnalisée: 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. ...

  • VM proxy: une VM proxy achemine le trafic sortant de Google Cloud du projet locataire Cloud Data Fusion vers la destination spécifiée via l'Internet public. Vous créez et gérez une VM de passerelle dans vos projets clients. Il est recommandé de les configurer dans une configuration à haute disponibilité à l'aide d'un équilibreur de charge interne. Si plusieurs instances Cloud Data Fusion privées utilisent le même réseau VPC, vous pouvez réutiliser la même VM au sein du VPC.

Avant de commencer

Configurer le contrôle de sortie pendant le développement du pipeline

Le contrôle de sortie vous permet de contrôler ou de filtrer ce qui peut sortir de votre réseau, ce qui est utile dans les environnements VPC Service Controls. Il n'existe aucun proxy réseau privilégié pour effectuer cette tâche. Les proxys Squid Proxy, HAProxy et Envoy sont des exemples de proxys.

Les exemples de ce guide expliquent comment configurer le proxy HTTP pour le filtrage HTTP sur les instances de VM utilisant une image Debian. Il utilise un serveur proxy Squid, mais ce n'est là qu'un moyen parmi d'autres de configurer un serveur proxy.

Créer une VM de proxy

Créez une VM dans le même VPC que votre instance privée Cloud Data Fusion avec le script de démarrage et le transfert IP suivants.

Ce script installe le proxy Squid et le configure pour intercepter le trafic HTTP, et autoriser les domaines .squid-cache.org et .google.com. Vous pouvez remplacer ces domaines par les domaines que vous souhaitez connecter à votre instance Cloud Data Fusion.

Console

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

    Accéder à la page Instances de VM

  2. Cliquez sur Create instance (Créer une instance).

  3. Utilisez le VPC sur lequel l'appairage de réseaux est configuré avec l'instance privée Cloud Data Fusion. Pour plus d'informations 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 sur le même réseau que l'instance Cloud Data Fusion.

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

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

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 Cloud Console, consultez la section Ajouter une route statique.

Lorsque vous configurez la route:

  • Définissez la priorité sur une valeur supérieure ou égale à 1001.
  • Utilisez le même projet et le même VPC que l'instance privée Cloud Data Fusion.
  • Assurez-vous que la configuration de l'appairage de réseaux VPC autorise l'exportation de routes. Cela permet au projet locataire Cloud Data Fusion d'importer cette route personnalisée via l'appairage de réseaux VPC.

gcloud

Pour créer votre route dans l'outil gcloud, procédez comme suit:

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

Configurer le contrôle de sortie pour l'exécution des pipelines

Une fois que vous pouvez accéder à l'Internet public avec les noms d'hôte autorisés dans Preview et Wrangler dans votre environnement de conception, déployez votre pipeline. Les pipelines Cloud Data Fusion déployés s'exécutent par défaut sur les clusters Dataproc.

Pour vous assurer que tout le trafic Internet public provenant du cluster Dataproc passe par une ou plusieurs VM proxy, ajoutez la zone et les enregistrements DNS privés. Cette étape est nécessaire, car Cloud NAT n'est pas compatible avec le filtrage.

Dans les enregistrements DNS, incluez l'adresse IP de la VM du proxy ou de l'équilibreur de charge interne.

Déployer votre pipeline

Après avoir vérifié le pipeline au cours de la phase de conception avec les étapes ci-dessus, déployez-le. Par défaut, les pipelines déployés s'exécutent sur les clusters Dataproc. Pour vous assurer que tout le trafic Internet public du cluster Dataproc passe par un (ensemble) de VM proxy, ajoutez une route personnalisée avec les tags d'instances "proxy" et la priorité "1000" au même VPC. en tant que VM Dataproc:

Créer une route personnalisée

Modifiez également votre pipeline pour utiliser les balises Dataproc. Cela est nécessaire, car Cloud NAT n'est actuellement pas compatible avec le filtrage de sortie. En créant une route personnalisée, comme dans les étapes ci-dessus, tout le trafic Internet public provenant des VM Dataproc passera par un (ensemble) de VM proxy.

Étape suivante