Configurer une connectivité privée aux API et services Google

Ce document explique comment configurer une connectivité privée entre les hôtes d'un réseau VPC ou d'un réseau sur site et les API et services Google compatibles avec VPC Service Controls.

Avant de lire ce document, nous vous recommandons de vous familiariser avec les concepts d'accès privé à Google, les spécifications et la configuration du réseau. Consultez des exemples de schémas de topologie pour l'utilisation de l'accès privé à Google avec VPC Service Controls.

Avant de commencer

  • Vous devez activer les API auxquelles vous souhaitez accéder via la page API et services de la console Google Cloud .
  • Assurez-vous de disposer du rôle requis pour créer ou mettre à jour des sous-réseaux. Les propriétaires de projet, les éditeurs et les comptes principaux IAM dotés du rôle d'administrateur réseau peuvent créer ou mettre à jour des sous-réseaux et attribuer des adresses IP. Pour en savoir plus sur les rôles, consultez la documentation sur les rôles IAM.
  • Vérifiez qu'un réseau VPC est configuré pour l'accès privé à Google et l'accès privé à Google pour les hôtes sur site. Les réseaux VPC en mode automatique et en mode personnalisé sont tous les deux compatibles. Les anciens réseaux ne sont pas compatibles.
  • Assurez-vous que les instances de VM d'un réseau VPC disposent d'une adresse IP privée (et non d'une adresse IP publique) et qu'elles se trouvent dans un sous-réseau sur lequel l'accès privé à Google est activé.
  • Pour les hôtes sur site, assurez-vous de disposer d'un tunnel Cloud VPN existant ou d'une connexion Cloud Interconnect sur votre réseau VPC. Pour prendre en charge les hôtes sur site disposant d'adresses IPv6, consultez la section Compatibilité IPv6.

Présentation de la procédure

Pour configurer la connectivité privée, procédez comme suit :

  • Configurez des routes pour les plages d'adresses IP restricted.googleapis.com. Pour en savoir plus, consultez la section Configurer des routes.
  • Configurez des règles de pare-feu de sorte à autoriser le trafic approprié à atteindre les plages d'adresses IP restricted.googleapis.com. Pour en savoir plus, consultez la section Configurer des règles de pare-feu.
  • Configurez le DNS de sorte que le trafic à destination des API Google pointe vers les plages d'adresses IP restricted.googleapis.com. Pour en savoir plus, consultez la section Configurer le DNS.

Compatibilité IPv6 avec restricted.googleapis.com

Vous pouvez accéder aux API Google en utilisant la plage d'adresses IPv6 du domaine restricted.googleapis.com : 2600:2d00:0002:1000::/64.

Pensez à configurer les adresses IPv6 si vous souhaitez utiliser le domaine restricted.googleapis.com et que certains de vos clients utilisent des adresses IPv6. Les clients IPv6 disposant également d'adresses IPv4 configurées peuvent accéder aux API et services Google à l'aide des adresses IPv4. Les services n'acceptent pas tous le trafic provenant de clients IPv6.

Pour permettre aux clients IPv6 de votre environnement sur site d'accéder aux API Google à l'aide de restricted.googleapis.com, vous devez configurer la connexion à votre réseau VPC afin qu'elle prenne en charge le protocole IPv6. Pour en savoir plus, consultez les pages suivantes :

Les clients sur site peuvent envoyer des requêtes à partir de n'importe quelle adresse IPv6 GUA ou ULA, à l'exception de la plage ULA fda3:e722:ac3:cc00::/64, qui est réservée à un usage interne.

Pour en savoir plus sur l'adresse IP virtuelle restricted.googleapis.com, consultez la section Configurer l'accès privé à Google.

Connectivité directe aux API et services

Certains services et API Google sont compatibles avec la connectivité directe à partir d'instances de machines virtuelles (VM) Compute Engine, en contournant les Google Front End (GFE), ce qui offre de meilleures performances.

Pour établir une connectivité directe, vos routes et vos règles de pare-feu doivent autoriser le trafic IPv4 à atteindre 34.126.0.0/18 et le trafic IPv6 à atteindre 2001:4860:8040::/42. Ces adresses IP, qui sont un sous-ensemble du domaine restricted.googleapis.com, sont compatibles avec VPC Service Controls. De plus, il n'est pas nécessaire de créer des enregistrements DNS pour ces adresses.

Notez que la connectivité directe n'est disponible qu'à partir des ressources Google Cloud et n'est pas compatible avec les hôtes sur site.

Configurer des routes vers restricted.googleapis.com

Bien que VPC Service Controls s'applique aux services compatibles et configurés, quel que soit le domaine que vous utilisez, restricted.googleapis.com limite davantage les risques liés à l'exfiltration de données. restricted.googleapis.com refuse l'accès aux API et services Google qui ne sont pas compatibles avec VPC Service Controls.

Pour l'accès privé à Google et l'accès privé à Google pour les hôtes sur site, votre réseau VPC doit inclure une route ayant pour destination les plages d'adresses IP restricted.googleapis.com et dont le prochain saut correspond à la passerelle Internet par défaut. Même si le prochain saut est une passerelle Internet par défaut, le trafic envoyé à restricted.googleapis.com reste au sein du réseau de Google.

Si votre réseau VPC ne possède pas de route par défaut dont le prochain saut est la passerelle Internet par défaut, vous pouvez créer une route statique personnalisée dont la destination est la plage d'adresses IP restricted.googleapis.com et dont le prochain saut est la passerelle Internet par défaut. Pour empêcher l'accès à Internet, vous devez supprimer les autres routes dont le prochain saut correspond à la passerelle Internet par défaut.

Pour plus d'informations sur l'utilisation des routes VPC, consultez la page Utiliser des routes de la documentation sur les VPC.

Configurer des routes statiques personnalisées dans un réseau VPC

Ajoutez des routes statiques personnalisées pour activer l'accès aux services gérés de Google qui sont compatibles avec VPC Service Controls.

gcloud compute routes create ROUTE_NAME \
  --network=NETWORK_NAME \
  --destination-range=DESTINATION_RANGE \
  --next-hop-gateway=default-internet-gateway

Remplacez les éléments suivants :

  • ROUTE_NAME : nom de la route personnalisée
  • NETWORK_NAME : nom de votre réseau VPC
  • DESTINATION_RANGE : plage de destination de la route
    • Pour acheminer le trafic vers l'adresse IP virtuelle restricted.googleapis.com, utilisez les plages suivantes :
      • Pour le trafic IPv4 : 199.36.153.4/30
      • Pour le trafic IPv6 : 2600:2d00:0002:1000::/64
    • Pour acheminer le trafic vers les API qui autorisent la connectivité directe, utilisez les plages suivantes :
      • Pour le trafic IPv4 : 34.126.0.0/18
      • Pour le trafic IPv6 : 2001:4860:8040::/42

Annoncer la route restreinte aux hôtes d'un réseau sur site

Si vous utilisez l'accès privé à Google pour les hôtes sur site, configurez les routes de sorte que le trafic des API Google transite par votre connexion Cloud VPN ou Cloud Interconnect. Pour annoncer les plages d'adresses IP virtuelles restreintes à votre réseau sur site, utilisez le mode d'annonce personnalisée de Cloud Router. Les plages d'adresses IP virtuelles restreintes ne sont accessibles qu'aux hôtes sur site qui peuvent atteindre votre réseau VPC via des adresses IP privées.

Vous pouvez ajouter cette route annoncée personnalisée à un routeur cloud (pour toutes les sessions BGP sur le routeur) ou à une session BGP sélectionnée (pour un seul tunnel Cloud VPN ou rattachement de VLAN).

Les routes IPv6 ne sont annoncées que dans les sessions BGP où IPv6 est activé.

Pour créer une route annoncée personnalisée pour la plage restreinte sur toutes les sessions BGP d'un routeur cloud existant, procédez comme suit :

Console

  1. Dans la console Google Cloud , accédez à la page Routeurs cloud.

    Accéder aux routeurs cloud

  2. Sélectionnez le routeur cloud à mettre à jour.

  3. Sur la page d'informations du routeur Cloud Router, sélectionnez Modifier.

  4. Développez la section Routages annoncés.

  5. Dans le champ Routes, sélectionnez Créer des routages personnalisés.

  6. Pour continuer à diffuser les sous-réseaux disponibles dans Cloud Router, sélectionnez Diffuser tous les sous-réseaux visibles par Cloud Router. Cette option imite le comportement par défaut du routeur cloud.

  7. Pour ajouter une route annoncée, sélectionnez Ajouter une route personnalisée.

  8. Configurez l'annonce de routage.

    • Source : sélectionnez Plage d'adresses IP personnalisée.
    • Plage d'adresses IP :
      • Pour la connectivité IPv4 : 199.36.153.4/30
      • Pour la connectivité IPv6 : 2600:2d00:0002:1000::/64
    • Description : ajoutez cette description de Restricted Google APIs IPs.
  9. Après avoir ajouté des routes, sélectionnez Enregistrer.

gcloud

Exécutez la commande update en utilisant l'option --set-advertisement-ranges ou --add-advertisement-ranges pour spécifier les plages d'adresses IP personnalisées :

  • Pour définir des plages d'adresses IP personnalisées, utilisez le flag --set-advertisement-ranges. Toutes les routes annoncées personnalisées qui existent sont remplacées. L'exemple suivant met à jour le routeur cloud my-router pour annoncer tous les sous-réseaux et les plages d'adresses IP restricted.googleapis.com.

    gcloud compute routers update my-router \
        --advertisement-mode CUSTOM \
        --set-advertisement-groups ALL_SUBNETS \
        --set-advertisement-ranges RANGES
    

    Remplacez RANGES par les plages que vous souhaitez utiliser :

    • Pour la connectivité IPv4 : 199.36.153.4/30
    • Pour la connectivité IPv6 : 2600:2d00:0002:1000::/64
    • Pour la connectivité IPv4 et IPv6 : 199.36.153.4/30,2600:2d00:0002:1000::/64

  • Pour ajouter des plages d'adresses IP personnalisées à une annonce existante, utilisez le flag --add-advertisement-ranges. Notez que ce flag nécessite que le mode d'annonce du routeur cloud soit déjà défini sur custom. L'exemple suivant ajoute les plages d'adresses IP restricted.googleapis.com aux annonces du routeur cloud :

    gcloud compute routers update my-router \
        --add-advertisement-ranges RANGES
    

    Remplacez RANGES par les plages que vous souhaitez utiliser :

    • Pour la connectivité IPv4 : 199.36.153.4/30
    • Pour la connectivité IPv6 : 2600:2d00:0002:1000::/64
    • Pour la connectivité IPv4 et IPv6 : 199.36.153.4/30,2600:2d00:0002:1000::/64

Pour créer une route annoncée personnalisée pour la plage restreinte sur une session BGP spécifique d'un routeur cloud existant, procédez comme suit :

Console

  1. Dans la console Google Cloud , accédez à la page Routeurs cloud.

    Accéder aux routeurs cloud

  2. Sélectionnez le routeur cloud qui contient la session BGP à mettre à jour.

  3. Sur la page d'informations du routeur cloud, sélectionnez la session BGP à mettre à jour.

  4. Sur la page Détails de la session BGP, sélectionnez Modifier.

  5. Dans le champ Routages, sélectionnez Créer des routages personnalisés.

  6. Sélectionnez Diffuser tous les sous-réseaux visibles par le routeur cloud pour continuer à annoncer les sous-réseaux disponibles pour le routeur cloud. Cette option imite le comportement par défaut du routeur cloud.

  7. Sélectionnez Ajouter un routage personnalisé pour ajouter un routage diffusé.

  8. Configurez l'annonce du routage.

    • Source : sélectionnez Plage d'adresses IP personnalisée pour spécifier une plage d'adresses IP personnalisée.
    • Plage d'adresses IP :
      • Pour la connectivité IPv4 : 199.36.153.4/30
      • Pour la connectivité IPv6 : 2600:2d00:0002:1000::/64
    • Description : ajoutez un description de Restricted Google APIs IPs.
  9. Après avoir ajouté les routes, sélectionnez Enregistrer.

gcloud

Exécutez la commande update-bgp-peer en utilisant l'option --set-advertisement-ranges ou --add-advertisement-ranges pour spécifier les plages d'adresses IP personnalisées.

  • Pour définir des plages d'adresses IP personnalisées, utilisez le flag --set-advertisement-ranges. Toutes les routes annoncées personnalisées qui existent sont remplacées.

    Si vous ajoutez des plages personnalisées IPv6 et que le trafic IPv6 est désactivé pour la session BGP, vous pouvez l'activer avec le flag --enable-ipv6.

    L'exemple suivant met à jour la session BGP my-bgp-session sur le routeur cloud my-router pour annoncer tous les sous-réseaux et la plage d'adresses IP personnalisée :

    gcloud compute routers update-bgp-peer my-router \
        --peer-name my-bgp-session \
        --advertisement-mode CUSTOM \
        --set-advertisement-groups ALL_SUBNETS \
        --set-advertisement-ranges RANGES
    

    Remplacez RANGES par les plages que vous souhaitez utiliser :

    • Pour la connectivité IPv4 : 199.36.153.4/30
    • Pour la connectivité IPv6 : 2600:2d00:0002:1000::/64
    • Pour la connectivité IPv4 et IPv6 : 199.36.153.4/30,2600:2d00:0002:1000::/64

  • Pour ajouter des plages d'adresses IP personnalisées à des plages existantes, utilisez le flag --add-advertisement-ranges. Notez que ce flag nécessite que le mode d'annonce du routeur cloud soit déjà défini sur custom.

    Si vous ajoutez des plages personnalisées IPv6 et que le trafic IPv6 est désactivé pour la session BGP, vous pouvez l'activer avec le flag --enable-ipv6.

    L'exemple suivant ajoute les plages d'adresses IP virtuelles restreintes aux annonces du routeur cloud :

    gcloud compute routers update-bgp-peer my-router \
        --peer-name my-bgp-session \
        --add-advertisement-ranges RANGES
    

    Remplacez RANGES par les plages que vous souhaitez utiliser :

    • Pour la connectivité IPv4 : 199.36.153.4/30
    • Pour la connectivité IPv6 : 2600:2d00:0002:1000::/64
    • Pour la connectivité IPv4 et IPv6 : 199.36.153.4/30,2600:2d00:0002:1000::/64

    Pour en savoir plus sur le mode d'annonce personnalisé, consultez Routes annoncées personnalisées.

Configurer des règles de pare-feu

Pour l'accès privé à Google, les instances de VM utilisent des adresses IP internes et n'ont pas besoin d'adresses IP externes pour atteindre les ressources d'API Google protégées. Les instances de VM peuvent toutefois disposer d'adresses IP externes ou répondre aux conditions d'accès à Internet. En plus des routes annoncées personnalisées, vous pouvez restreindre le trafic sortant provenant des instances de VM de votre réseau VPC en créant des règles de pare-feu qui refusent le trafic sortant.

Par défaut, la règle de pare-feu implicite d'autorisation pour le trafic sortant autorise les instances de VM à envoyer du trafic vers n'importe quelle destination s'il existe une route applicable. Vous pouvez créer une règle de refus du trafic sortant pour bloquer tout le trafic sortant, puis créer des règles d'autorisation du trafic sortant de priorité supérieure vers des destinations sélectionnées de votre réseau VPC et vers les plages d'adresses IP restricted.googleapis.com. Toutes les communications vers restricted.googleapis.com s'effectuent sur le port TCP 443.

Pour autoriser le trafic provenant de Google Cloud à atteindre les adresses IP virtuelles restricted.googleapis.com, ajoutez des règles de pare-feu pour les destinations suivantes :

  • Pour le trafic IPv4 : 199.36.153.4/30
  • Pour le trafic IPv6 : 2600:2d00:0002:1000::/64

Pour autoriser le trafic provenant de Google Cloud à atteindre les API et les services qui autorisent la connectivité directe, ajoutez des règles de pare-feu pour les destinations suivantes :

  • Pour le trafic IPv4 : 34.126.0.0/18
  • Pour le trafic IPv6 : 2001:4860:8040::/42

Pour en savoir plus sur l'utilisation des règles de pare-feu VPC, consultez la section Utiliser des règles de pare-feu VPC dans la documentation de Cloud Next Generation Firewall.

Configurez les règles de votre pare-feu sur site de sorte à autoriser le trafic provenant de vos hôtes sur site à atteindre les plages d'adresses IP restricted.googleapis.com.

  • Pour le trafic IPv4 : 199.36.153.4/30
  • Pour le trafic IPv6 : 2600:2d00:0002:1000::/64

La connectivité directe aux API et services Google n'est pas compatible avec les réseaux sur site.

Configurer le DNS

Vous pouvez utiliser des zones privées gérées pour vos réseaux VPC. Les zones DNS privées de Cloud DNS vous permettent d'héberger une zone DNS accessible à partir de réseaux VPC autorisés. Pour configurer le transfert à partir de certains serveurs de noms sur site, vous pouvez utiliser les plages d'adresses IP restricted.googleapis.com. Vous pouvez ensuite créer une zone privée pour googleapis.com avec un enregistrement A DNS qui mappe restricted.googleapis.com et les enregistrements CNAME appropriés pour chaque nom *.googleapis.com. Pour en savoir plus, consultez la page Gérer les zones.

Pour l'accès sur site, vous pouvez configurer une règle de transfert entrant Cloud DNS pour permettre aux serveurs de noms sur site d'interroger une zone privée gérée Cloud DNS. Vous pouvez également configurer un serveur de noms sur site, tel que BIND :

Configurer le DNS avec Cloud DNS

Pour activer la résolution DNS pour les instances de VM de votre réseau VPC, les hôtes d'un réseau sur site ou les deux, utilisez Cloud DNS. Si vous utilisez un VPC partagé, consultez la section Zones privées et VPC partagé dans la documentation de Cloud DNS. En outre, si vous utilisez un VPC partagé, nous vous recommandons d'inclure le projet hôte sur le réseau VPC partagé dans le même périmètre de service que les projets qui se connectent au réseau.

Configurer Cloud DNS à l'aide de zones privées

Vous pouvez utiliser des zones privées pour configurer Cloud DNS :

  1. Créez une zone privée gérée pour votre réseau VPC.

    gcloud dns managed-zones create ZONE_NAME \
     --visibility=private \
     --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \
     --description=DESCRIPTION \
     --dns-name=googleapis.com

    Remplacez les éléments suivants :

    • ZONE_NAME : nom de la zone que vous créez. Par exemple, vpc. Ce nom est utilisé dans chacune des étapes suivantes.
    • PROJECT_ID : ID du projet qui héberge votre réseau VPC.
    • NETWORK_NAME : nom de votre réseau VPC.
    • DESCRIPTION : description lisible et facultative de la zone gérée.
  2. Lancez une transaction.

    gcloud dns record-sets transaction start --zone=ZONE_NAME

    Remplacez ZONE_NAME par le nom de la zone que vous avez créée à la première étape.

  3. Ajoutez des enregistrements DNS.

    gcloud dns record-sets transaction add --name=*.googleapis.com. \
        --type=CNAME restricted.googleapis.com. \
        --zone=ZONE_NAME \
        --ttl=300

    Remplacez ZONE_NAME par le nom de la zone que vous avez créée à la première étape.

    gcloud dns record-sets transaction add --name=restricted.googleapis.com. \
        --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
        --zone=ZONE_NAME \
        --ttl=300

    Remplacez ZONE_NAME par le nom de la zone que vous avez créée à la première étape.

    Si vous configurez les adresses IPv6 pour restricted.googleapis.com, créez également le jeu d'enregistrements suivant :

    gcloud dns record-sets transaction add --name=restricted.googleapis.com. \
        --type=AAAA 2600:2d00:0002:1000:: \
        --zone=ZONE_NAME \
        --ttl=300
  4. Exécutez la transaction.

    gcloud dns record-sets transaction execute --zone=ZONE_NAME

    Remplacez ZONE_NAME par le nom de la zone que vous avez créée à la première étape.

  5. Facultatif. Pour que les hôtes sur site atteignent la plage restreinte d'adresses IP virtuelles, effectuez les opérations suivantes :

    1. Créez une règle DNS et activez le transfert DNS entrant pour rendre les services de résolution de noms du réseau VPC accessibles en externe aux systèmes situés sur les réseaux sur site.

      gcloud dns policies create POLICY_NAME \
       --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \
       --enable-inbound-forwarding \
       --description=DESCRIPTION

      Remplacez les éléments suivants :

      • POLICY_NAME : nom de la règle que vous créez. Par exemple, apipolicy.
      • PROJECT_ID : ID du projet qui héberge votre réseau VPC.
      • NETWORK_NAME : nom de votre réseau VPC.
      • DESCRIPTION : description lisible et facultative de la zone gérée.
    2. Sur votre réseau sur site, faites pointer le DNS sur site vers l'adresse IP du redirecteur Cloud DNS. Pour trouver l'adresse IP du redirecteur, utilisez la commande compute addresses list :

      gcloud compute addresses list --filter='name ~ ^dns-forwarding.*' \
       --format='csv[no-heading](address, subnetwork)'

Configurer le DNS avec BIND

Si vous utilisez BIND pour la résolution DNS, vous pouvez le configurer pour résoudre les requêtes d'API Google vers les API Google limitées. Servez-vous de l'exemple de configuration BIND suivant, qui exploite les zones de stratégie de réponse (RPZ) pour obtenir ce comportement :

  1. Ajoutez les lignes suivantes à /etc/bind/named.conf :

    include "/etc/bind/named.conf.options";
    include "/etc/bind/named.conf.local";
    
  2. Ajoutez les lignes suivantes à /etc/bind/named.conf.options :

    options {
      directory "/var/cache/bind";
    
      dnssec-validation no;
    
      auth-nxdomain no;    # conform to RFC 1035
      listen-on-v6 { any; };
      listen-on { any; };
      response-policy { zone "googleapis.zone"; };
      allow-query { any;};
    };
    
  3. Ajoutez les lignes suivantes à /etc/bind/named.conf.local :

    include "/etc/bind/named.conf.default-zones";

    zone "googleapis.zone" { type master; file "/etc/bind/db.googleapis.zone"; allow-query {none;}; };

  4. Ajoutez les lignes suivantes à /etc/bind/db.googleapis.zone :

    $TTL 1H
    @                       SOA LOCALHOST. noreply.localhost(1 1h 15m 30d 2h)
                            NS  LOCALHOST.

    *.googleapis.com CNAME restricted.googleapis.com. restricted.googleapis.com CNAME rpz-passthru.

Configurer le DNS dans des cas particuliers

Lorsque vous devez configurer le DNS dans certains cas particuliers, gardez à l'esprit les points suivants :

  • Les configurations BIND personnalisées ne sont pas compatibles avec Dataflow. Pour personnaliser la résolution DNS lors de l'utilisation de Dataflow avec VPC Service Controls, exploitez des zones privées Cloud DNS au lieu d'utiliser des serveurs BIND personnalisés. Pour utiliser votre propre résolution DNS sur site, envisagez d'employer une méthode de transfert DNSGoogle Cloud .
  • Vous devrez peut-être également configurer un DNS pour gcr.io si, par exemple, vous utilisez Google Kubernetes Engine (GKE). Pour en savoir plus, consultez la page Configurer Container Registry pour des clusters privés GKE.