Configurer l'accès privé à Google

Par défaut, lorsqu'une VM Compute Engine n'a pas d'adresse IP externe attribuée à son interface réseau, elle ne peut envoyer des paquets qu'à d'autres destinations d'adresses IP internes. Vous pouvez autoriser ces VM à se connecter à l'ensemble des adresses IP externes utilisées par les API et services Google en activant l'accès privé à Google sur le sous-réseau utilisé par l'interface réseau de la VM.

L'accès privé à Google permet également d'accéder aux adresses IP externes utilisées par App Engine, y compris aux services tiers basés sur App Engine.

Pour afficher les API et les services compatibles avec l'accès privé à Google, consultez la section relative aux services compatibles dans la présentation de l'accès privé à Google.

Consultez la section Options d'accès privé pour les services pour obtenir des informations générales sur l'accès privé à Google et d'autres options de connectivité privée proposées par Google Cloud.

Spécifications

Vous pouvez activer l'accès privé à Google, sous-réseau par sous-réseau, lorsque vous créez un sous-réseau ou lorsque vous le modifiez après sa création.

Lorsque l'accès privé à Google est activé pour un sous-réseau et que la configuration réseau requise pour les API et les services Google du réseau VPC est respectée, Google Cloud autorise les VM disposant d'une interface réseau dans le sous-réseau activé à envoyer des paquets issus des sources ci-dessous aux adresses IP externes des API et services Google :

  • Une adresse IP interne principale de l'interface réseau d'une VM dans un sous-réseau activé, sauf si une adresse externe est attribuée à cette interface

  • Une adresse IP interne provenant d'une plage d'adresses IP d'alias de l'interface réseau de la VM dans un sous-réseau activé

Une VM avec une adresse IP externe attribuée à son interface réseau n'a pas besoin d'un accès privé à Google pour se connecter aux API et services Google. Elle peut se connecter aux API et services Google du moment qu'elle dispose d'une interface réseau avec une adresse IP externe associée, située sur un réseau VPC respectant la configuration réseau requise.

Configuration réseau requise

L'accès privé à Google est soumis aux conditions suivantes :

  • L'accès privé à Google étant activé par sous-réseau, vous devez utiliser un réseau VPC. Les anciens réseaux ne sont pas acceptés, car ils ne sont pas compatibles avec les sous-réseaux.

  • L'Accès privé à Google n'active pas automatiquement les API. Vous devez activer séparément les API Google dont vous avez besoin via la page API et services de Google Cloud Console.

  • Si vous utilisez les noms de domaine private.googleapis.com ou restricted.googleapis.com, vous devez créer des enregistrements DNS pour diriger le trafic vers les adresses IP associées à ces domaines. Pour obtenir des conseils, consultez la section Configuration réseau.

  • Votre réseau doit comporter des routes appropriées pour les plages d'adresses IP de destination utilisées par les API et les services Google. Ces routes doivent utiliser le saut suivant de la passerelle Internet par défaut. Si vous utilisez les noms de domaine private.googleapis.com ou restricted.googleapis.com, vous n'avez besoin que d'une seule route (par domaine). Sinon, vous devrez créer plusieurs routes. Consultez la section Options de routage pour plus d'informations.

  • Les pare-feu de sortie doivent autoriser le trafic à destination des plages d'adresses IP utilisées par les API et les services Google. La règle de pare-feu implicite d'autorisation du trafic sortant répond à cette exigence. Pour découvrir d'autres moyens permettant de respecter les exigences du pare-feu, consultez la section Configuration du pare-feu.

Autorisations

Les propriétaires de projet, les éditeurs et les membres 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 plus d'informations sur les rôles, consultez la documentation relative aux rôles IAM.

Logging

Cloud Logging capture toutes les requêtes API effectuées à partir d'instances de VM dans des sous-réseaux dans lesquels l'accès privé à Google est activé. Les entrées de journal identifient la source de la requête API en tant qu'adresse IP interne de l'instance appelante.

Vous pouvez configurer l'envoi des rapports d'utilisation quotidienne et de cumul mensuel dans un bucket Cloud Storage. Pour en savoir plus, consultez la page Afficher les rapports d'utilisation.

Configuration du réseau

Cette section décrit les exigences de base concernant le réseau que vous devez remplir pour que n'importe quelle VM de votre réseau VPC puisse accéder aux API et services Google (à l'aide de l'accès privé à Google ou d'une adresse IP externe).

Vous devez d'abord choisir le domaine sur lequel vous accédez aux API et aux services Google.

Plages de domaines et d'adresses IP Services compatibles Exemple d'utilisation
Domaines par défaut

Tous les noms de domaine des API et services Google, à l'exception de private.googleapis.com et restricted.googleapis.com.

Différentes plages d'adresses IP : vous pouvez déterminer un ensemble de plages d'adresses IP contenant les adresses possibles utilisées par les domaines par défaut en faisant référence aux adresses IP des domaines par défaut.
Autorise l'accès API à la plupart des API et services Google, qu'ils soient ou non compatibles avec VPC Service Controls. Inclut l'accès API à Google Maps, Google Ads, Google Cloud Platform et la plupart des autres API Google dont le nom se termine par googleapis.com. Non compatible avec les applications Web G Suite. Les domaines par défaut sont utilisés lorsque vous ne configurez pas d'enregistrements DNS pour private.googleapis.com et restricted.googleapis.com.
private.googleapis.com

199.36.153.8/30
Autorise l'accès API à la plupart des API et services Google, qu'ils soient ou non compatibles avec VPC Service Controls. Inclut l'accès API à Maps, Google Ads, Google Cloud Platform et la plupart des autres API Google, y compris les listes ci-dessous. Non compatible avec les applications Web G Suite.

Noms de domaine se terminant par :
  • googleapis.com
  • googleadapis.com
  • ltsapis.goog
  • gcr.io
  • gstatic.com
  • appspot.com
  • cloudfunctions.net
  • pki.goog
  • cloudproxy.app
  • run.app
  • datafusion.googleusercontent.com
  • datafusion.cloud.google.com
Noms d'hôte/de domaine correspondant à :
  • packages.cloud.google.com
  • gcr.io
  • appengine.google.com
  • pki.goog
Utilisez private.googleapis.com pour accéder aux API et services Google à l'aide d'un ensemble d'adresses IP routables seulement depuis Google Cloud. Choisissez private.googleapis.com dans les cas suivants :
  • Vous n'utilisez pas VPC Service Controls.
  • Vous utilisez VPC Service Controls, mais vous devez également accéder aux API et services Google qui ne sont pas compatibles avec VPC Service Controls.
restricted.googleapis.com

199.36.153.4/30
Autorise l'accès API aux API et services Google compatibles avec VPC Service Controls.

Bloque l'accès aux API et services Google qui ne sont pas compatibles avec VPC Service Controls. Non compatible avec les applications Web G Suite ou les API G Suite.
Utilisez restricted.googleapis.com pour accéder aux API et services Google à l'aide d'un ensemble d'adresses IP routables seulement depuis Google Cloud. Choisissez restricted.googleapis.com si vous devez exclusivement accéder aux API et services Google compatibles avec VPC Service Controls. restricted.googleapis.com n'autorise pas l'accès aux API et services Google qui ne sont pas compatibles avec VPC Service Controls.

Configuration DNS

Si vous choisissez private.googleapis.com ou restricted.googleapis.com, vous devez configurer un DNS de sorte que les VM de votre réseau VPC résolvent les requêtes vers *.googleapis.com :

  1. Créez une zone DNS privée pour googleapis.com. Envisagez de créer une zone privée Cloud DNS à cette fin.
  2. Dans la zone googleapis.com, créez l'un des enregistrements A suivants, en fonction du domaine choisi :

    • Un enregistrement A pour private.googleapis.com pointant vers les adresses IP suivantes : 199.36.153.8, 199.36.153.9, 199.36.153.10, 199.36.153.11
    • Un enregistrement A pour restricted.googleapis.com pointant vers les adresses IP suivantes : 199.36.153.4, 199.36.153.5, 199.36.153.6, 199.36.153.7

    Si vous utilisez Cloud DNS, ajoutez les enregistrements à la zone privée googleapis.com.

  3. Dans la zone googleapis.com, créez un enregistrement CNAME pour *.googleapis.com qui pointe vers l'enregistrement A que vous avez créé à l'étape précédente.

Certains services et API Google sont fournis à l'aide de noms de domaine supplémentaires, y compris *.gcr.io, *.gstatic.com et pki.goog. Reportez-vous au tableau des domaines et plages d'adresses IP dans la section Configuration réseau requise pour déterminer si les services du domaine supplémentaire sont accessibles via private.googleapis.com ou restricted.googleapis.com. Ensuite, procédez comme suit pour chacun des domaines supplémentaires :

  1. Créez une zone DNS pour le domaine supplémentaire (par exemple, gcr.io). Si vous utilisez Cloud DNS, assurez-vous que cette zone se trouve dans le même projet que votre zone privée googleapis.com.
  2. Dans cette zone DNS, procédez comme suit :
    • Créez un enregistrement A pour le nom de domaine (zone) lui-même, par exemple, gcr.io. Faites pointer cet enregistrement A vers les quatre mêmes adresses IP du nom de domaine personnalisé que vous avez choisi (private.googleapis.com ou restricted.googleapis.com).
    • Créez un enregistrement CNAME pour tous les noms d'hôte possibles du domaine supplémentaire en utilisant un astérisque et un point suivi du nom de domaine (zone), par exemple, *.gcr.io. Faites pointer cet enregistrement CNAME vers l'enregistrement A dans la même zone. Par exemple, pointez *.gcr.io sur gcr.io.

Options de routage

Votre réseau VPC doit disposer de routes appropriées dont les sauts suivants correspondent à la passerelle Internet par défaut. Google Cloud n'est pas compatible avec le routage du trafic vers les API et les services Google via d'autres instances de VM ou des sauts suivants personnalisés. Bien qu'ils soient considérés comme une passerelle Internet par défaut, les paquets envoyés depuis les VM de votre réseau VPC aux API et services Google restent au sein du réseau de Google.

  • Si vous sélectionnez les domaines par défaut, vos instances de VM se connectent aux API et services Google à l'aide d'un sous-ensemble d'adresses IP externes de Google. Ces adresses IP sont routables publiquement, mais le chemin d'une VM d'un réseau VPC vers ces adresses reste au sein du réseau de Google.

  • Google ne publie pas de routes sur Internet vers les adresses IP utilisées par les domaines private.googleapis.com ou restricted.googleapis.com. Par conséquent, ces domaines ne sont accessibles que par les VM d'un réseau VPC ou de systèmes sur site connectés à un réseau VPC.

Si votre réseau VPC contient une route par défaut dont le saut suivant est la passerelle Internet par défaut, vous pouvez utiliser cette route pour accéder aux API et aux services Google de n'importe quel domaine, sans avoir besoin de créer des routes personnalisées. Pour plus d'informations, consultez la section Routage avec une route par défaut.

Si vous avez remplacé la route par défaut par une route statique personnalisée ayant une destination 0.0.0.0/0 et un saut suivant qui n'est pas la passerelle Internet par défaut, vous pouvez répondre aux exigences de routage pour les API et services Google à l'aide du routage personnalisé. Envisagez d'utiliser le routage personnalisé dans les situations suivantes :

  • Vous disposez d'une route statique personnalisée ayant une destination 0.0.0.0/0 et le saut suivant correspond à un tunnel Cloud VPN, un équilibreur de charge TCP/UDP interne ou une autre instance de VM.
  • Vous utilisez Cloud Router pour accepter une route dynamique personnalisée ayant pour destination 0.0.0.0/0.

Routage avec une route par défaut

Chaque réseau VPC contient une route par défaut lors de sa création. Le saut suivant de cette route est la passerelle Internet par défaut et elle fournit un chemin d'accès aux domaines par défaut, private.googleapis.com et restricted.googleapis.com.

Pour vérifier la configuration d'une route par défaut dans un réseau donné, procédez comme suit :

Console

  1. Accédez à la page "Routes" dans Google Cloud Console.
    Accéder à la page "Routes"
  2. Filtrez la liste des routes pour afficher uniquement les routes du réseau que vous devez inspecter.
  3. Recherchez une route qui a pour destination 0.0.0.0/0 et dont le saut suivant est la passerelle Internet par défaut.

gcloud

Exécutez la commande gcloud suivante, en remplaçant network-name par le nom du réseau à inspecter :

gcloud compute routes list \
    --filter="default-internet-gateway network-name"

Si vous devez créer une route de remplacement par défaut, consultez la section Ajouter une route statique.

Routage personnalisé

À la place d'une route par défaut, vous pouvez utiliser des routes statiques personnalisées, chacune ayant une destination plus spécifique et chacune utilisant le saut suivant de la passerelle Internet par défaut. Le nombre de routes dont vous avez besoin et leurs adresses IP de destination dépendent du domaine que vous choisissez.

Suivez ces instructions pour vérifier la configuration des routes personnalisées pour les API et les services Google d'un réseau donné.

Console

  1. Accédez à la page "Routes" dans Google Cloud Console.
    Accéder à la page Routes
  2. Utilisez le champ de texte Table de filtrage pour filtrer la liste des routes en utilisant les critères suivants, en remplaçant network-name par le nom de votre réseau VPC.
    • Réseau : network-name
    • Type du saut suivant : default internet gateway
  3. Examinez la colonne Plage d'adresses IP de destination pour chaque route. Si vous avez choisi les domaines par défaut, recherchez plusieurs routes statiques personnalisées, une pour chaque plage d'adresses IP utilisée par le domaine par défaut. Si vous avez choisi private.googleapis.com ou restricted.googleapis.com, recherchez la plage d'adresses IP de ce domaine.

gcloud

Exécutez la commande gcloud suivante, en remplaçant network-name par le nom du réseau à inspecter :

gcloud compute routes list \
    --filter="default-internet-gateway network-name"

Les routes sont répertoriées sous forme de tableau, sauf si vous personnalisez la commande avec l'option --format. Recherchez la destination de chaque route dans la colonne DEST_RANGE. Si vous avez choisi les domaines par défaut, recherchez plusieurs routes statiques personnalisées, une pour chaque plage d'adresses IP utilisée par le domaine par défaut. Si vous avez choisi private.googleapis.com ou restricted.googleapis.com, recherchez la plage d'adresses IP de ce domaine.

Si vous devez créer des routes, consultez la section Ajouter une route statique.

Configuration du pare-feu

La configuration de pare-feu de votre réseau VPC doit autoriser l'accès des VM aux adresses IP utilisées par les API et les services Google. La règle implicite allow egress répond à cette exigence.

Dans certaines configurations de pare-feu, vous devez créer des règles d'autorisation de sortie spécifiques. Par exemple, supposons que vous ayez créé une règle de refus du trafic sortant qui bloque le trafic vers toutes les destinations (0.0.0.0). Dans ce cas, vous devez créer une règle de pare-feu autorisant le trafic sortant dont la priorité est supérieure à la règle de refus du trafic sortant pour chaque plage d'adresses IP utilisée par le domaine choisi pour les API et les services Google.

Pour créer des règles de pare-feu, consultez la page Créer des règles de pare-feu. Vous pouvez limiter les VM auxquelles les règles de pare-feu s'appliquent lorsque vous définissez la cible de chaque règle d'autorisation du trafic sortant.

Adresses IP pour les domaines par défaut

Suivez ces étapes pour déterminer les plages d'adresses IP utilisées par les domaines par défaut, telles que *.googleapis.com et *.gcr.io.

  • Google publie la liste complète des plages d'adresses IP annoncées sur Internet dans le fichier goog.json.
  • Google publie également une liste de plages d'adresses IP externes globales et régionales utilisables par le client dans le fichier cloud.json.

Les adresses IP utilisées par les domaines par défaut des API et des services Google correspondent à la liste des plages calculées en supprimant toutes les plages de cloud.json par rapport à celles de goog.json. L'exemple suivant vous montre comment obtenir cette plage en utilisant Python.

Python

Vous pouvez utiliser le script Python suivant pour créer une liste de plages d'adresses IP incluant les domaines utilisés par défaut pour les API et les services Google :

#!/usr/bin/env python3

import json
import netaddr
import urllib.request

goog_url="www.gstatic.com/ipranges/goog.json"
cloud_url="www.gstatic.com/ipranges/cloud.json"

def read_url(url, fallback_to_http=False,attempts=2):
   if fallback_to_http:
      url = "http://" + url
   else:
      url = "https://" + url
   try:
      s = urllib.request.urlopen(url).read()
      return json.loads(s)
   except urllib.error.HTTPError:
      print("Invalid HTTP response from %s" % url)
      return {}
   except json.decoder.JSONDecodeError:
      print("Could not parse HTTP response from %s" % url)
      return {}
   except urllib.error.URLError:
      if attempts > 1:
         url = url.replace("https://","").replace("http://","")
         attempts -=1
         print("Error opening URL; trying HTTP instead of HTTPS.")
         return read_url(url,fallback_to_http=True,attempts=attempts)
      else:
         print("Error opening URL.")
         return {}

def main():
   goog_json=read_url(goog_url)
   cloud_json=read_url(cloud_url)

   if goog_json and cloud_json:
      print("{} published: {}".format(goog_url,goog_json.get('creationTime')))
      print("{} published: {}".format(cloud_url,cloud_json.get('creationTime')))
      goog_cidrs = netaddr.IPSet()
      for e in goog_json['prefixes']:
         if e.get('ipv4Prefix'):
            goog_cidrs.add(e.get('ipv4Prefix'))
      cloud_cidrs = netaddr.IPSet()
      for e in cloud_json['prefixes']:
         if e.get('ipv4Prefix'):
            cloud_cidrs.add(e.get('ipv4Prefix'))
      print("IP ranges for Google APIs and services default domains:")
      for i in goog_cidrs.difference(cloud_cidrs).iter_cidrs():
         print(i)

if __name__=='__main__':
   main()

Configuration de l'accès privé à Google

Vous pouvez activer l'accès privé à Google une fois que votre réseau VPC répond aux exigences réseau.

Activer l'accès privé à Google

Pour activer l'accès privé à Google, procédez comme suit :

Console

  1. Accédez à la page Réseaux VPC dans Google Cloud Console.
    Accéder à la page Réseaux VPC
  2. Cliquez sur le nom du réseau contenant le sous-réseau pour lequel vous devez activer l'accès privé à Google.
  3. Pour un sous-réseau existant :
    1. Cliquez sur le nom du sous-réseau. La page Détails du sous-réseau s'affiche.
    2. Cliquez sur Modifier.
    3. Dans la section Accès privé à Google, sélectionnez Activé.
    4. Cliquez sur Save.
  4. Pour un nouveau sous-réseau :
    1. Cliquez sur Ajouter un sous-réseau.
    2. Indiquez le nom et la région du nouveau sous-réseau.
    3. Spécifiez la plage d'adresses IP du sous-réseau. Cette plage ne peut chevaucher aucun sous-réseau du réseau VPC actuel, ni aucun réseau connecté via l'appairage de réseaux VPC ou via VPN.
    4. Effectuez des sélections supplémentaires pour que le nouveau sous-réseau réponde à vos besoins. Par exemple, vous devrez peut-être créer des plages d'adresses IP de sous-réseau secondaires ou activer les journaux de flux VPC.
    5. Sélectionnez Activé dans la section Accès privé à Google.
    6. Cliquez sur Ajouter.

gcloud

Pour un sous-réseau existant :

  1. Déterminez le nom et la région du sous-réseau. Pour répertorier les sous-réseaux d'un réseau particulier, utilisez la commande suivante :

    gcloud compute networks subnets list --filter=network-name
    
  2. Exécutez la commande suivante pour activer l'accès privé à Google :

    gcloud compute networks subnets update subnet-name \
    --region=region \
    --enable-private-ip-google-access
    
  3. Vérifiez que l'accès privé à Google est activé en exécutant la commande suivante :

    gcloud compute networks subnets describe subnet-name \
    --region=region \
    --format="get(privateIpGoogleAccess)"
    

Dans toutes les commandes ci-dessus, remplacez les valeurs suivantes par des valeurs valides :

  • subnet-name : nom du sous-réseau
  • region : région du sous-réseau
  • network-name : nom du réseau VPC contenant le sous-réseau

Lorsque vous créez un sous-réseau, utilisez l'option --enable-private-ip-google-access pour activer l'accès privé à Google :

gcloud compute networks subnets create subnet-name \
    --region=region \
    --network=network-name \
    --range=primary-ip-range \
    --enable-private-ip-google-access

Remplacez les éléments suivants par des valeurs valides :

  • subnet-name : nom du sous-réseau
  • region : région du sous-réseau
  • network-name : nom du réseau VPC contenant le sous-réseau
  • primary-ip-range : plage d'adresses IP principale du sous-réseau

Désactiver l'accès privé à Google

Pour désactiver l'accès privé à Google sur un sous-réseau existant, procédez comme suit :

Console

  1. Accédez à la page Réseaux VPC dans Google Cloud Console.
    Accéder à la page Réseaux VPC
  2. Cliquez sur le nom du réseau contenant le sous-réseau pour lequel vous devez désactiver l'accès privé à Google.
  3. Cliquez sur le nom d'un sous-réseau existant. La page Détails du sous-réseau s'affiche.
  4. Cliquez sur Modifier.
  5. Dans la section Accès privé à Google, sélectionnez Désactivé.
  6. Cliquez sur Enregistrer.

gcloud

  1. Déterminez le nom et la région du sous-réseau. Pour répertorier les sous-réseaux d'un réseau particulier, utilisez la commande suivante :

    gcloud compute networks subnets list \
        --filter=network-name
    
  2. Exécutez la commande suivante pour désactiver l'accès privé à Google :

    gcloud compute networks subnets update subnet-name \
        --region=region \
        --no-enable-private-ip-google-access
    
  3. Exécutez la commande suivante pour vérifier que l'accès privé à Google est désactivé :

    gcloud compute networks subnets describe subnet-name \
        --region=region \
        --format="get(privateIpGoogleAccess)"
    

Dans toutes les commandes ci-dessus, remplacez les valeurs suivantes par des valeurs valides :

  • subnet-name : nom du sous-réseau
  • region : région du sous-réseau
  • network-name : nom du réseau VPC contenant le sous-réseau

Étape suivante