Accéder aux API Google via des points de terminaison
Ce document explique comment utiliser des points de terminaison Private Service Connect pour se connecter aux API Google. Au lieu d'envoyer des requêtes API aux adresses IP disponibles publiquement pour les points de terminaison de service tels que storage.googleapis.com
, vous pouvez envoyer les requêtes à l'adresse IP interne d'un point de terminaison.
Vous pouvez également utiliser Private Service Connect pour accéder aux services d'un autre réseau VPC et pour publier des services.
Rôles
Les rôles IAM suivants fournissent les autorisations nécessaires pour effectuer les tâches décrites dans ce guide.
Tâche | Rôles |
---|---|
Créer un point de terminaison | Tous les rôles suivants : Administrateur de réseaux Compute ( roles/compute.networkAdmin ),Éditeur de l'annuaire des services ( roles/servicedirectory.editor ) et Administrateur DNS ( roles/dns.admin ) |
Configurer l'accès privé à Google (facultatif) | Administrateur de réseaux Compute (roles/compute.networkAdmin ) |
Avant de commencer
Pour en savoir plus, y compris sur la configuration et les limites DNS, consultez la page À propos de la connexion aux API Google à l'aide de points de terminaison.
Private Service Connect n'active pas automatiquement les API. Vous devez activer séparément les API Google dont vous avez besoin depuis la page API et services de Google Cloud Console.
Vous devez activer l'API Compute Engine dans votre projet.
Vous devez activer l'API de l'Annuaire des services dans votre projet.
Vous devez activer l'API Cloud DNS dans votre projet.
Vous devez choisir une adresse IP à utiliser pour le point de terminaison. Pour en savoir plus sur les adresses IP que vous pouvez utiliser, consultez la section Exigences relatives à l'adresse IP.
Les règles de pare-feu de sortie doivent autoriser le trafic vers le point de terminaison. La configuration de pare-feu par défaut d'un réseau VPC autorise ce trafic, car elle contient une règle implicite de sortie autorisée. Vérifiez que vous n'avez pas créé de règle de sortie de priorité plus élevée qui bloque le trafic.
Les instances de machines virtuelles (VM) sans adresse IP externe attribuée doivent utiliser un sous-réseau avec l'accès privé à Google activé pour accéder aux API et services Google à l'aide d'un point de terminaison.
Une VM avec une adresse IP externe peut accéder aux API et services Google à l'aide de points de terminaison, même si l'accès privé à Google est désactivé pour son sous-réseau. La connectivité au point de terminaison reste dans le réseau de Google.
Si votre réseau VPC ne contient aucun point de terminaison, vérifiez s'il existe une zone privée Cloud DNS pour
p.googleapis.com
. Si la zone existe, supprimez-la avant de créer le point de terminaison. Si vous ne la supprimez pas, la création de la zone DNS de l'annuaire des services utilisé pour Private Service Connect échoue. Pour en savoir plus, consultez la section Dépannage.Les points de terminaison ne sont pas accessibles à partir des réseaux VPC appairés.
Activer l'accès privé à Google pour un sous-réseau
Les VM sans adresse IP externe attribuée doivent être connectées à un sous-réseau avec l'accès privé à Google activé pour accéder aux API et services Google à l'aide d'un point de terminaison.
Si la VM comporte plusieurs interfaces, connectez celle qui est configurée avec une route par défaut (généralement nic0
).
L'adresse IP source des paquets envoyés depuis la VM doit correspondre à l'adresse IPv4 interne principale de l'interface de VM, ou à une adresse IPv4 interne issue d'une plage d'adresses IP d'alias.
Pour activer l'accès privé à Google sur un sous-réseau, procédez comme suit :
Console
Dans Google Cloud Console, accédez à la page Réseaux VPC.
Cliquez sur le nom du réseau contenant le sous-réseau pour lequel vous devez activer l'accès privé à Google.
Cliquez sur le nom du sous-réseau. La page Détails du sous-réseau s'affiche.
Cliquez sur Modifier.
Dans la section Accès privé à Google, sélectionnez Activé.
Cliquez sur Enregistrer.
gcloud
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
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
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)"
Remplacez les éléments suivants :
SUBNET_NAME
: nom du sous-réseauREGION
: région du sous-réseauNETWORK_NAME
: nom du réseau VPC contenant le sous-réseau
Terraform
Vous pouvez activer l'accès privé à Google sur un sous-réseau à l'aide de la ressource Terraform.
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.
Créer un point de terminaison
Après avoir choisi une adresse IP qui répond aux exigences, vous pouvez créer un point de terminaison.
Un point de terminaison se connecte aux API et services Google à l'aide d'une règle de transfert globale. Chaque règle de transfert est comptabilisée dans le quota de réseaux VPC pour Private Service Connect.
Vous ne pouvez pas mettre à jour un point de terminaison pour les API et services Google après sa création. Si vous devez mettre à jour un point de terminaison pour les API et services Google, supprimez-le, puis créez-en un autre.
Console
Dans Google Cloud Console, accédez à la page Private Service Connect.
Cliquez sur l'onglet Points de terminaison connectés.
Cliquez sur Connecter le point de terminaison.
Dans le champ Cible, sélectionnez le bundle d'API cible que vous souhaitez utiliser :
- Toutes les API Google
- VPC SC
Dans le champ Nom du point de terminaison, saisissez un nom pour le point de terminaison.
Sélectionnez un réseau pour le point de terminaison.
Sélectionnez une adresse IP pour le point de terminaison.
L'adresse IP choisie doit respecter ces critères.
Si vous avez besoin d'une nouvelle adresse IP, vous pouvez en créer une :
- Cliquez sur Créer une adresse IP.
- Saisissez un nom et une description pour l'adresse IP.
- Saisissez l'adresse IP que vous souhaitez utiliser, puis cliquez sur Enregistrer.
Si une région de l'annuaire des services n'est pas déjà configurée pour ce réseau VPC, sélectionnez la région que vous souhaitez utiliser.
Tous les points de terminaison utilisés pour accéder aux API et aux services Google d'un réseau VPC donné utilisent la même région de l'annuaire des services.
Si un espace de noms de l'annuaire des services n'est pas déjà configuré pour ce réseau VPC, configurez l'espace de noms que vous souhaitez utiliser :
Pour utiliser un espace de noms attribué automatiquement, cliquez sur le menu déroulant Espace de noms et sélectionnez l'espace de noms attribué automatiquement.
Pour sélectionner un espace de noms existant utilisé dans un autre réseau, cliquez sur le menu déroulant Espace de noms et sélectionnez un espace de noms dans la liste. La liste affiche tous les espaces de noms du projet. Vous devez sélectionner un espace de noms utilisé uniquement pour les points de terminaison permettant d'accéder aux API Google.
Pour créer un espace de noms, cliquez sur le menu déroulant Espace de noms, puis sur Créer un espace de noms. Saisissez l'espace de noms et cliquez sur Créer.
Tous les points de terminaison que vous utilisez pour accéder aux API et services Google d'un réseau VPC donné utilisent le même espace de noms de l'annuaire des services.
Cliquez sur Ajouter un point de terminaison.
gcloud
Réservez une adresse IP interne globale à attribuer au point de terminaison.
gcloud compute addresses create ADDRESS_NAME \ --global \ --purpose=PRIVATE_SERVICE_CONNECT \ --addresses=ENDPOINT_IP \ --network=NETWORK_NAME
Remplacez l'élément suivant :
ADDRESS_NAME
: nom à attribuer à l'adresse IP réservée.ENDPOINT_IP
: adresse IP à réserver pour le point de terminaison.L'adresse IP choisie doit respecter ces critères.
NETWORK_NAME
: nom du réseau VPC utilisé pour le point de terminaison.
Créez une règle de transfert pour connecter le point de terminaison aux API et services Google.
gcloud compute forwarding-rules create ENDPOINT_NAME \ --global \ --network=NETWORK_NAME \ --address=ADDRESS_NAME \ --target-google-apis-bundle=API_BUNDLE \ [ --service-directory-registration=REGION_NAMESPACE_URI ]
Remplacez l'élément suivant :
ENDPOINT_NAME
: nom à attribuer au point de terminaison. Le nom doit être une chaîne de 1 à 20 caractères ne contenant que des lettres minuscules et des chiffres. Le nom doit commencer par une lettre.NETWORK_NAME
: nom du réseau VPC utilisé pour le point de terminaison.ADDRESS_NAME
: nom de l'adresse réservée sur le réseau associé.API_BUNDLE
: groupe d'API à mettre à disposition à l'aide du point de terminaison. Consultez la liste des API compatibles.Utilisez
all-apis
pour accorder l'accès à toutes les API compatibles.Utilisez
vpc-sc
pour limiter l'accès aux API Google compatibles avec VPC Service Controls.
REGION_NAMESPACE_URI
: URI de la région ou de l'espace de noms de l'annuaire des services que vous souhaitez utiliser. Cet URI doit faire référence au projet dans lequel vous créez le point de terminaison.Vous ne pouvez définir une région qu'avec
projects/PROJECT_NAME/locations/REGION
.Vous pouvez définir une région et un espace de noms avec
projects/PROJECT_NAME/locations/REGION/namespaces/NAMESPACE
.
Si vous omettez complètement
--service-directory-registration
ou définissez une région sans espace de noms, les événements suivants se produisent :Si une région ou un espace de noms est déjà configuré pour ce réseau VPC, ces valeurs par défaut sont utilisées.
Si une région n'est pas configurée, elle est définie sur
us-central1
. Si un espace de noms n'est pas configuré, un espace de noms généré par le système est attribué.
API
Réservez une adresse IP interne globale à attribuer au point de terminaison.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses { "name": ADDRESS_NAME, "address": ENDPOINT_IP, "addressType": "INTERNAL", "purpose": PRIVATE_SERVICE_CONNECT, "network": NETWORK_URL }
Remplacez l'élément suivant :
PROJECT_ID
: ID de votre projet.ADDRESS_NAME
: nom à attribuer à l'adresse IP réservée.ENDPOINT_IP
: adresse IP à réserver pour le point de terminaison.L'adresse IP choisie doit respecter ces critères.
NETWORK_URL
: réseau VPC pour le point de terminaison. Utilisez la méthode network.list ougcloud compute networks list --uri
pour rechercher les URL de vos réseaux.
Créez une règle de transfert pour connecter le point de terminaison aux API et services Google.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules { "IPAddress": ADDRESS_URL, "network": NETWORK_URL, "name": ENDPOINT_NAME, "target": API_BUNDLE, "serviceDirectoryRegistrations : [ { "service_directory_region": REGION, "namespace": "NAMESPACE" } ], }
Remplacez l'élément suivant :
PROJECT_ID
: ID de votre projet.ENDPOINT_NAME
: nom à attribuer au point de terminaison. Le nom doit être une chaîne de 1 à 20 caractères ne contenant que des lettres minuscules et des chiffres. Le nom doit commencer par une lettre.NETWORK_URL
: réseau VPC pour le point de terminaison. Utilisez la méthode network.list ougcloud compute networks list --uri
pour rechercher les URL de vos réseaux.ADDRESS_URL
: URL de l'adresse réservée sur le réseau associé. Utilisez la méthode globalAddresses.list ougcloud compute addresses list --uri
pour rechercher les URL de vos adresses réservées.API_BUNDLE
: bundle d'API à mettre à disposition à l'aide du point de terminaison. Consultez la liste des API compatibles.Utilisez
all-apis
pour accorder l'accès à toutes les API compatibles.Utilisez
vpc-sc
pour limiter l'accès aux API Google compatibles avec VPC Service Controls.
REGION
: région de l'annuaire des services que vous souhaitez utiliser. Exemple :us-central1
. Si vous omettezREGION
et qu'une région est déjà configurée pour ce réseau VPC, cette région est utilisée. Si une région n'est pas configurée, elle est définie surus-central1
.NAMESPACE
: nom de l'espace de noms de l'annuaire des services que vous souhaitez utiliser. Si vous omettezNAMESPACE
et qu'un espace de noms est déjà configuré pour ce réseau VPC, cet espace de noms est utilisé. Si un espace de noms n'est pas configuré, un espace de noms généré par le système est attribué.
Terraform
Vous pouvez utiliser les ressources Terraform suivantes pour créer un point de terminaison :
Vérifier que le point de terminaison fonctionne
Créez une instance de VM dans le réseau VPC sur lequel Private Service Connect est configuré. Exécutez la commande suivante sur la VM pour vérifier que le point de terminaison Private Service Connect fonctionne. Les points de terminaison ne répondent pas aux requêtes ping (ICMP).
curl -v ENDPOINT_IP/generate_204
Remplacez ENDPOINT_IP
par l'adresse IP du point de terminaison.
Si le point de terminaison fonctionne, un code de réponse HTTP 204
s'affiche.
Répertorier les points de terminaison
Vous pouvez répertorier tous les points de terminaison configurés.
Console
Dans Google Cloud Console, accédez à la page Private Service Connect.
Cliquez sur l'onglet Points de terminaison connectés.
Les points de terminaison s'affichent.
gcloud
gcloud compute forwarding-rules list \ --filter target="(all-apis OR vpc-sc)" --global
Le résultat ressemble à ce qui suit :
NAME REGION IP_ADDRESS IP_PROTOCOL TARGET RULE IP TCP all-apis
Obtenir des informations sur un point de terminaison
Vous pouvez afficher tous les détails de configuration d'un point de terminaison.
Console
Dans Google Cloud Console, accédez à la page Private Service Connect.
Cliquez sur l'onglet Points de terminaison connectés.
Les points de terminaison s'affichent.
Cliquez sur le point de terminaison dont vous souhaitez afficher les détails.
gcloud
gcloud compute forwarding-rules describe \ ENDPOINT_NAME --global
Ajouter un libellé à un point de terminaison
Vous pouvez gérer les libellés des points de terminaison. Pour en savoir plus, consultez la section Attribuer des libellés à des ressources.
Supprimer un point de terminaison
Vous pouvez supprimer un point de terminaison.
Console
Dans Google Cloud Console, accédez à la page Private Service Connect.
Cliquez sur l'onglet Points de terminaison connectés.
Sélectionnez le point de terminaison que vous souhaitez supprimer, puis cliquez sur Supprimer.
gcloud
gcloud compute forwarding-rules delete \ ENDPOINT_NAME --global
Remplacez ENDPOINT_NAME
par le nom du point de terminaison que vous souhaitez supprimer.
Utiliser un point de terminaison
Pour utiliser un point de terminaison, vous devez envoyer des requêtes à un nom d'hôte DNS qui pointe vers l'adresse IP du point de terminaison.
Vous pouvez utiliser les noms DNS
p.googleapis.com
créés automatiquement si vous pouvez configurer vos clients pour utiliser un point de terminaison personnalisé et si des enregistrements DNSp.googleapis.com
sont créés pour les API et les services que vous souhaitez utiliser. Pour en savoir plus, consultez la section Utiliser des noms DNSp.googleapis.com
.Par exemple, si le nom de votre point de terminaison est
xyz
, des enregistrements DNS sont créés pourstorage-xyz.p.googleapis.com
,compute-xyz.p.googleapis.com
et d'autres API couramment utilisées dans le groupe d'API.Vous pouvez créer des enregistrements DNS à l'aide des noms DNS par défaut si vous utilisez un client qui n'a pas été configuré pour utiliser un point de terminaison personnalisé, ou si aucun enregistrement DNS
p.googleapis.com
n'existe pour le service que vous souhaitez utiliser. Pour en savoir plus, consultez la section Créer des enregistrements DNS à l'aide de noms DNS par défaut.Par exemple, créez des enregistrements DNS pour
storage.googleapis.com
etcompute.googleapis.com
.
Utiliser des noms DNS p.googleapis.com
Lorsque vous créez un point de terminaison, l'Annuaire des services crée des enregistrements DNS pour les API et les services couramment utilisés disponibles à l'aide du point de terminaison. Les enregistrements DNS ne sont créés que pour les API et les services dont les noms DNS par défaut se terminent par googleapis.com
, et uniquement pour un sous-ensemble de ces API et services.
Les enregistrements DNS sont créés dans une zone privée p.googleapis.com
. Les enregistrements pointent vers l'adresse IP du point de terminaison et utilisent le format suivant : SERVICE-ENDPOINT.p.googleapis.com
Par exemple, si le nom de votre point de terminaison est xyz
, des enregistrements DNS sont créés pour storage-xyz.p.googleapis.com
, compute-xyz.p.googleapis.com
et d'autres API compatibles.
Les clients pouvant être configurés de manière à utiliser un point de terminaison personnalisé peuvent utiliser les noms DNS p.googleapis.com
pour envoyer des requêtes à un point de terminaison.
Consultez la documentation de votre client ou bibliothèque cliente pour en savoir plus sur sa configuration afin d'utiliser des points de terminaison personnalisés. Exemple :
Python : vous pouvez configurer
api_endpoint
dans la section Options client.Go : vous pouvez configurer
WithEndpoint
dans ClientOptions..NET : vous pouvez configurer
Endpoint
dans la classe de compilateur du client.gcloud : vous pouvez configurer
api_endpoint_overrides
dans la gcloud CLI.
Créer des enregistrements DNS à l'aide de noms DNS par défaut
Vous devez créer des enregistrements DNS pour diriger les noms DNS par défaut des API et des services vers votre point de terminaison dans les cas suivants :
Votre client ou votre application ne peuvent pas être configurés pour utiliser un nom DNS
p.googleapis.com
.Vous devez accéder à un service compatible, mais il n'existe pas de nom DNS
p.googleapis.com
créé automatiquement pour ce service.
Pour créer des enregistrements DNS pointant vers votre point de terminaison Private Service Connect, procédez comme suit :
Créez une zone DNS pour le domaine que vous devez utiliser (par exemple,
googleapis.com
ougcr.io
). Envisagez pour cela de créer une zone privée Cloud DNS.Dans cette zone DNS, procédez comme suit :
Créez un enregistrement
A
pour le nom de domaine (zone) lui-même, par exemple,googleapis.com
ougcr.io
. Faites pointer cet enregistrementA
vers l'adresse IP du point de terminaison. Si vous utilisez Cloud DNS, consultez la page Ajouter un enregistrement.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,*.googleapis.com
ou*.gcr.io
. Faites pointer cet enregistrementCNAME
vers l'enregistrementA
dans la même zone. Par exemple, faites pointer*.googleapis.com
versgoogleapis.com
ou*.gcr.io
versgcr.io
.
Accéder au point de terminaison à partir d'hôtes sur site
Si votre réseau sur site est connecté à un réseau VPC, vous pouvez utiliser Private Service Connect pour accéder aux API et services Google à partir d'hôtes sur site à l'aide de l'adresse IP interne du point de terminaison.
Votre réseau sur site doit être connecté à un réseau VPC à l'aide de tunnels Cloud VPN ou de rattachements de VLAN pour Cloud Interconnect.
Le point de terminaison doit se trouver dans le réseau VPC connecté à votre réseau sur site.
Le réseau sur site doit disposer des routes appropriées pour le point de terminaison. Configurez une annonce de routage personnalisée du routeur cloud pour annoncer les routes du point de terminaison sur la session BGP qui gère les routes du tunnel Cloud VPN ou du rattachement de VLAN.
- Si votre réseau sur site utilise le routage ECMP (Equal-Cost Multi-Path) pour distribuer le trafic vers les points de terminaison Private Service Connect, vous devez vous assurer que tous les paquets d'une même connexion TCP sont acheminés via le protocole tunnel Cloud VPN ou rattachement de VLAN. Si les paquets d'une connexion TCP établie sont acheminés sur plusieurs chemins, vous pouvez rencontrer des réinitialisations TCP intermittentes (RST). Pour éviter les réinitialisations, configurez vos routeurs pairs sur site de manière à maintenir des destinations de saut suivant cohérentes.
Vous devez configurer des systèmes sur site afin qu'ils puissent envoyer des requêtes vers vos zones DNS privées.
Si vous avez mis en œuvre les zones DNS privées à l'aide de Cloud DNS, procédez comme suit :
Créez une règle de serveur entrant dans le réseau VPC auquel votre réseau sur site se connecte.
Identifiez les points d'entrée du système de transfert entrant dans les régions où se trouvent vos tunnels Cloud VPN et vos rattachements de VLAN, dans le réseau VPC auquel votre réseau sur site se connecte.
Configurez des systèmes sur site et des serveurs de noms DNS sur site pour transférer les noms DNS des points de terminaison Private Service Connect vers un point d'entrée du système de transfert entrant dans la même région que celle du tunnel Cloud VPN ou du rattachement de VLAN qui se connecte au réseau VPC
Dépannage
Les sections suivantes contiennent des informations sur la résolution des problèmes liés aux points de terminaison Private Service Connect utilisés pour accéder aux API Google.
Échec de la création de la zone DNS privée
Lorsque vous créez un point de terminaison, une zone DNS de l'Annuaire des services est créée. La création de zone peut échouer pour les raisons suivantes :
Vous n'avez pas activé l'API Cloud DNS dans votre projet.
Vous ne disposez pas des autorisations nécessaires pour créer une zone DNS de l'annuaire de service.
Ce réseau VPC contient une zone DNS portant le même nom de zone.
Une zone DNS pour
p.googleapis.com
existe déjà dans ce réseau VPC.
Des zones en conflit peuvent exister en raison d'une échec de suppression précédente.
Pour créer la zone DNS de l'annuaire de service, procédez comme suit :
Vérifiez que l'API Cloud DNS est activée dans votre projet.
Vérifiez que vous disposez des autorisations nécessaires pour créer la zone DNS de l'annuaire de service :
dns.managedZones.create
servicedirectory.namespaces.associatePrivateZone
Créez une zone DNS de l'Annuaire des services reposant sur l'espace de noms de l'Annuaire des services associé à votre point de terminaison.
Utilisez les valeurs suivantes lorsque vous créez la zone :
Nom de la zone : utilisez le même nom de zone que le système utilisé lors de la tentative de création ayant échoué. Le message d'erreur indique le nom de zone utilisé.
Nom DNS :
p.googleapis.com.
(incluez le point final).Espace de noms de l'annuaire de service : recherchez l'espace de noms de l'annuaire de service pour le point de terminaison Private Service Connect que vous avez créé, et utilisez cet espace de noms lorsque vous créez la zone DNS de l'annuaire des services.
L'espace de noms de l'annuaire des services est au format suivant :
goog-psc-NETWORK_NAME-NETWORK_ID
.
Échec de la suppression de la zone DNS privée
Lorsque vous supprimez le dernier point de terminaison d'un réseau VPC, la configuration de l'Annuaire des services associée, y compris la zone DNS, est supprimée.
Cette suppression peut échouer pour les raisons suivantes :
Vous ne disposez pas des autorisations nécessaires pour supprimer la zone DNS.
La zone contient des entrées DNS définies par l'utilisateur qui n'ont pas été créées par l'annuaire des services.
Pour résoudre ce problème, procédez comme suit :
Vérifiez que vous disposez de l'autorisation
dns.managedZones.delete
. Pour en savoir plus, consultez la page Contrôle des accès dans la documentation Cloud DNS.