Contrôler la sortie dans une instance privée

Cette section décrit l'architecture de haut niveau permettant d'établir le contrôle de sortie à partir d'instances Cloud Data Fusion privées pendant les phases de développement et d'exécution du pipeline.

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

Vous pouvez contrôler les connexions aux applications SaaS et aux services cloud publics tiers lors du développement ou de l'exécution du pipeline, en acheminant tout le trafic de sortie via les projets clients. 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.

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

Avant de commencer

Configurer le contrôle de sortie lors du 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 préféré pour effectuer cette tâche. Voici quelques exemples de proxys :Proxy Squid ,HAProxy etEnvoy.

Les exemples de ce guide décrivent comment configurer un proxy HTTP pour le filtrage HTTP sur des instances de VM utilisant une image Debian. Les exemples utilisent un serveur proxy Squid, qui est l'un des moyens de configurer un serveur proxy.

Créer une machine virtuelle proxy

Créez une VM dans le même VPC que votre instance Cloud Data Fusion privée 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 Créer une instance.

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

Lorsque vous configurez la route, procédez comme suit:

  • Définissez la priorité sur supérieur ou égal à 1001.
  • Utilisez le même projet et le même VPC que l'instance Cloud Data Fusion privée.
  • Assurez-vous que votre configuration d'appairage de réseaux VPC autorise l'exportation de routes, de sorte 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:

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 de 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 en provenance 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 proxy ou de l'équilibreur de charge interne.

Déployer votre pipeline

Après avoir validé le pipeline en phase de conception, 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 une ou plusieurs VM proxy, ajoutez une route personnalisée avec les tags d'instance proxy et la priorité 1000 au même VPC que les VM Dataproc:

Créer une route personnalisée

Modifiez le pipeline pour qu'il utilise des tags Dataproc, car Cloud NAT n'est actuellement pas compatible avec le filtrage de sortie.

Étapes suivantes