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

  • Activez 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 collaborateurs et les entités principales IAM dotées 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 ou d'une connexion Cloud Interconnect à votre réseau VPC. Pour prendre en charge des hôtes sur site disposant d'adresses IPv6, consultez la section Compatibilité avec le protocole 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 pour permettre au trafic approprié d'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 vers les API Google soit associé aux plages d'adresses IP restricted.googleapis.com. Pour en savoir plus, consultez la section Configurer le DNS.

Compatibilité IPv6 pour 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.

Envisagez de 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. Tous les services n'acceptent pas 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 pour qu'elle soit compatible avec 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 page Configurer l'accès privé à Google.

Connectivité directe aux API et aux services

Certaines API et certains services Google offrent une connectivité directe à partir des instances de machines virtuelles (VM) Compute Engine, contournant ainsi les GFE (Google Front End). Pour autoriser ce trafic, vous devez vous assurer que vos routes et vos règles de pare-feu autorisent le trafic sortant à atteindre 34.126.0.0/18 et 2001:4860:8040::/42. Vous n'avez pas besoin de créer des enregistrements DNS pour ces adresses.

La connectivité directe n'est possible qu'à partir des ressources Google Cloud. Vous ne pouvez pas utiliser la connectivité directe à partir d'hôtes sur site.

Les services offrant une connectivité directe sont compatibles avec VPC Service Controls.

Configurer des routes vers restricted.googleapis.com

Bien que VPC Service Controls soit appliqué aux services compatibles et configurés, quel que soit le domaine que vous utilisez, restricted.googleapis.com offre une atténuation des risques supplémentaire pour 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 pour les plages d'adresses IP restricted.googleapis.com dont le saut suivant est la passerelle Internet par défaut. Même si le saut suivant est une passerelle Internet par défaut, le trafic envoyé à restricted.googleapis.com reste dans le réseau de Google.

Si votre réseau VPC ne dispose pas de route par défaut dont le saut suivant 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 saut suivant est la passerelle Internet par défaut. Pour empêcher l'accès à Internet, vous devez supprimer les autres routes dont le saut suivant est 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 autoriser l'accès aux services gérés par Google 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 des API autorisant 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 limitées à votre réseau sur site, utilisez les annonces de routage personnalisées Cloud Router. Les plages d'adresses IP virtuelles limitées ne sont accessibles qu'aux hôtes sur site qui peuvent accéder à votre réseau VPC via des adresses IP privées.

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

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

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

Console

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

    Accéder aux routeurs cloud

  2. Sélectionnez le routeur Cloud Router à 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 du 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 une description pour 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 l'option --set-advertisement-ranges. Toute annonce personnalisée existante est remplacée. L'exemple suivant met à jour Cloud Router 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 l'indicateur --add-advertisement-ranges. Notez que cet indicateur 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 de Cloud Router:

    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 annonce de routage personnalisée pour la plage restreinte sur une session BGP spécifique d'un routeur cloud existant, procédez comme suit :

Console

  1. Dans Google Cloud Console, 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'informations 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 une description pour Restricted Google APIs IPs.
  9. Après avoir ajouté les routages, 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 l'option --set-advertisement-ranges. Toute annonce personnalisée existante est remplacée.

    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 l'option --enable-ipv6.

    L'exemple suivant met à jour la session BGP my-bgp-session sur Cloud Router 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 l'indicateur --add-advertisement-ranges. Notez que cet indicateur 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 l'option --enable-ipv6.

    L'exemple suivant ajoute les plages d'adresses IP virtuelles limitées aux annonces du routeur Cloud Router:

    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 les annonces personnalisées, consultez la page Annonces de routage 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. Toutefois, les instances de VM peuvent disposer d'adresses IP externes ou répondre aux conditions d'accès à Internet. En plus des routes personnalisées, vous pouvez restreindre le trafic de sortie provenant des instances de VM de votre réseau VPC en créant des règles de pare-feu.

Par défaut, la règle 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, Vous pouvez ensuite créer des règles de sortie de priorité plus élevée qui autorisent le trafic 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 permettre au trafic provenant de Google Cloud d'accéder aux 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 à accéder aux API et services permettant 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 sur le pare-feu Cloud nouvelle génération.

Configurez vos règles de pare-feu sur site pour permettre au trafic provenant de vos hôtes sur site d'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 disponible à partir de réseaux sur site.

Configurer les paramètres 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 DNS A 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 afin de permettre aux serveurs de noms sur site d'interroger une zone gérée privée de Cloud DNS. Vous pouvez également configurer un serveur de noms sur site, par exemple un serveur utilisant 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 sur 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 Cloud DNS. En outre, si vous utilisez un VPC partagé, assurez-vous que le projet hôte sur le réseau VPC partagé est inclus 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 contenant votre réseau VPC
    • NETWORK_NAME : nom de votre réseau VPC.
    • DESCRIPTION : une 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 zone que vous créez. Par exemple, apipolicy.
      • PROJECT_ID : ID du projet contenant votre réseau VPC
      • NETWORK_NAME : nom de votre réseau VPC.
      • DESCRIPTION : une 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 système de transfert Cloud DNS. Pour trouver l'adresse IP du système de transfert, 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 un 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 DNS Google 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.