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

VPC Service Controls vous permet de contrôler l'accès aux API et aux services Google à partir d'hôtes utilisant des adresses IP privées. Ces hôtes peuvent être des instances de VM dans un réseau VPC ou des clients dans un réseau sur site.

Pour limiter l'accès privé à Google au sein d'un périmètre de service aux seuls API et services Google compatibles avec VPC Service Controls, les hôtes doivent envoyer des requêtes au nom de domaine restricted.googleapis.com au lieu de *.googleapis.com. Le domaine restricted.googleapis.com se résout en une plage d'adresses IP virtuelles 199.36.153.4/30. Cette plage d'adresses IP n'est pas exposée sur Internet.

Les sections suivantes expliquent comment configurer la connectivité privée pour les hôtes d'un réseau VPC ou d'un réseau sur site. Pour obtenir une présentation et des exemples de schémas de topologie, reportez-vous à la section 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 Google Cloud Console.
  • 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 concernant les rôles IAM.
  • L'accès privé à Google et l'accès privé à Google pour les hôtes sur site nécessitent un réseau VPC. Les réseaux VPC en mode automatique et en mode personnalisé sont tous les deux compatibles. Les anciens réseaux ne sont pas compatibles.
  • Les instances de VM d'un réseau VPC doivent posséder une adresse IP privée uniquement (pas d'adresse IP publique) et se trouver dans un sous-réseau avec l'accès privé à Google activé.
  • Pour les hôtes sur site, vous devez disposer d'un tunnel Cloud VPN ou d'une connexion Cloud Interconnect sur votre réseau VPC.

Présentation de la procédure

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

  • Configurez des routes pour la destination 199.36.153.4/30. Pour en savoir plus, consultez la section Configurer des routes.
  • Configurez des règles de pare-feu pour autoriser le trafic approprié vers la plage d'adresses IP des API Google limitées. Pour en savoir plus, consultez la section Configurer les règles de pare-feu.
  • Configurez le service DNS de sorte que le trafic vers les API Google pointe vers la plage d'adresses IP des API Google limitées. Pour en savoir plus, consultez la section Configurer un DNS.

Configurer une route vers restricted.googleapis.com

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 199.36.153.4/30 et dont le saut suivant correspond à la passerelle Internet par défaut. Même si le saut suivant est une passerelle Internet par défaut, le trafic envoyé à 199.36.153.4/30 reste au sein du réseau de Google. Votre réseau VPC comporte peut-être déjà une route par défaut dont le saut suivant est la passerelle Internet par défaut. Si ce n'est pas le cas, vous pouvez créer une route statique personnalisée dont la destination est 199.36.153.4/30 et dont le saut suivant est la passerelle Internet par défaut.

En plus d'une route statique personnalisée, l'accès privé à Google pour les hôtes sur site nécessite une annonce de routage personnalisée pour que les hôtes du réseau sur site puissent découvrir la plage restreinte d'adresses IP virtuelles. Vous pouvez créer une route dynamique personnalisée à l'aide de Cloud Router pour exposer la plage restreinte d'adresses IP virtuelles.

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

Configurer une route statique personnalisée dans un réseau VPC

Ajoutez une route statique personnalisée pour activer l'accès aux services gérés de Google compatibles avec VPC Service Controls.

  • Ajoutez une route personnalisée qui n'autorise l'accès qu'aux services gérés par Google et sécurisés par VPC Service Controls.

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

    Où :

    • ROUTE_NAME est le nom de la route personnalisée.

    • NETWORK_NAME est le nom du réseau VPC.

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 la plage restreinte d'adresses IP virtuelles (199.36.153.4/30) à votre réseau sur site, utilisez l'annonce de routage personnalisée de Cloud Router. Cette plage d'adresses IP n'est accessible qu'aux hôtes sur site qui peuvent atteindre 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).

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

Console


  1. Accédez à la page Cloud Router de Google Cloud Console.
    Liste des 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 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.
  9. Source : sélectionnez Plage d'adresses IP personnalisée pour spécifier une plage d'adresses IP personnalisée.
  10. Plage d'adresses IP : spécifiez 199.36.153.4/30.
  11. Description : ajoutez cette description : Restricted Google APIs IPs.
  12. Après avoir ajouté les 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 le routeur cloud my-router pour annoncer tous les sous-réseaux et la plage d'adresses IP limitées des API Google 199.36.153.4/30 :

    gcloud compute routers update my-router \
        --advertisement-mode CUSTOM \
        --set-advertisement-groups ALL_SUBNETS \
        --set-advertisement-ranges 199.36.153.4/30
    
  • 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 la plage d'adresses IP personnalisée Restricted Google APIs IPs aux annonces du routeur cloud :

    gcloud compute routers update my-router \
        --add-advertisement-ranges 199.36.153.4/30
    

Pour créer une annonce de routage personnalisée pour la plage restreinte sur une session BGP spécifique d'un routeur cloud existant :

Console


  1. Accédez à la page Cloud Router de Google Cloud Console.
    Liste des 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.
  9. Source : sélectionnez Plage d'adresses IP personnalisée pour spécifier une plage d'adresses IP personnalisée.
  10. Plage d'adresses IP : spécifiez 199.36.153.4/30.
  11. Description : ajoutez cette description : Restricted Google APIs IPs.
  12. 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 l'option --set-advertisement-ranges. Toute annonce personnalisée existante est remplacée. 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 199.36.153.4/30 :

    gcloud compute routers update-bgp-peer my-router \
        --peer-name my-bgp-session \
        --advertisement-mode CUSTOM \
        --set-advertisement-groups ALL_SUBNETS \
        --set-advertisement-ranges 199.36.153.4/30
    
  • 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. L'exemple suivant ajoute la plage d'adresses IP des API Google limitées 199.36.153.4/30 aux annonces du routeur cloud :

    gcloud compute routers update-bgp-peer my-router \
        --peer-name my-bgp-session \
        --add-advertisement-ranges 199.36.153.4/30
    

    Pour plus d'informations sur les annonces personnalisées, reportez-vous à la section Annonces personnalisées du routeur cloud.

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 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, puis créer une règle d'autorisation du trafic sortant de priorité supérieure vers des destinations sélectionnées de votre réseau VPC et vers la plage d'adresses IP 199.36.153.4/30 (restricted.googleapis.com). Toutes les communications vers restricted.googleapis.com s'effectuent sur le port TCP 443.

Pour plus d'informations sur l'utilisation des règles de pare-feu VPC, consultez la section Utiliser des règles de pare-feu de la documentation sur les VPC.

Règles de pare-feu dans les réseaux sur site

Configurez des règles dans votre pare-feu sur site pour autoriser le trafic provenant de vos hôtes sur site à accéder à 199.36.153.4/30.

Configurer un DNS

Pour exploiter les adresses IP des API Google limitées, configurez votre serveur DNS afin qu'il résolve *.googleapis.com en tant que CNAME sur restricted.googleapis.com, puis configurez un enregistrement A pour restricted.googleapis.com. Pour une utilisation générale de VPC Service Controls, il est vivement recommandé d'utiliser des zones privées gérées Cloud DNS pour vos réseaux VPC.

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. :

  • Les zones DNS privées de Cloud DNS permettent d'héberger une zone DNS accessible à partir de réseaux VPC autorisés et, si vous configurez le transfert, à partir de certains serveurs de noms locaux. Vous pouvez créer une zone privée pour googleapis.com avec un enregistrement A pour restricted.googleapis.com et des enregistrements CNAME appropriés pour chaque nom de domaine *.googleapis.com. Les zones privées Cloud DNS n'acceptent pas les remplacements partiels, ce qui signifie que vous pouvez seulement choisir de rediriger toutes les requêtes envoyées à *.googleapis.com vers restricted.googleapis.com. Par conséquent, vous ne pouvez pas utiliser d'API ou services Google qui n'acceptent pas l'adresse IP virtuelle restricted.googleapis.com. Pour en savoir plus, consultez la section Gérer les zones.
  • 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.

Configurer le DNS avec Cloud DNS

Utilisez 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. 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é, 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.

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

    gcloud beta 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
    
    • ZONE_NAME est le nom de la zone que vous créez. Par exemple, vpc. Ce nom sera utilisé dans chacune des étapes suivantes.

    • PROJECT_ID est l'ID du projet qui héberge votre réseau VPC.

    • NETWORK_NAME est le nom du réseau VPC.

    • DESCRIPTION est une description lisible et facultative de la zone gérée.

  2. Lancez une transaction.

    gcloud dns record-sets transaction start --zone=ZONE_NAME
    
    • ZONE_NAME est 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
    
    • ZONE_NAME est 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
    
    • ZONE_NAME est le nom de la zone que vous avez créée à la première étape.
  4. Exécutez la transaction.

    gcloud dns record-sets transaction execute --zone=ZONE_NAME
    
    • ZONE_NAME est 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 beta dns policies create POLICY_NAME \
       --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \
       --enable-inbound-forwarding \
       --description=DESCRIPTION
      
      • POLICY_NAME est le nom de la règle que vous créez. Par exemple, apipolicy.

      • PROJECT_ID est l'ID du projet qui héberge votre réseau VPC.

      • NETWORK_NAME est le nom du réseau VPC.

      • DESCRIPTION est 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.