Accéder aux API Google via des points de terminaison (original) (raw)

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 requis

Pour obtenir les autorisations nécessaires pour gérer les points de terminaison qui accèdent aux API Google globales, demandez à votre administrateur de vous accorder les rôles IAM suivants :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Ces rôles prédéfinis contiennent les autorisations requises pour gérer les points de terminaison qui accèdent aux API Google mondiales. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour gérer les points de terminaison qui accèdent aux API Google globales :

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Avant de commencer

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

  1. Dans la console Google Cloud , accédez à la page Réseaux VPC.
    Accéder aux 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. Cliquez sur le nom du sous-réseau. La page Détails du sous-réseau s'affiche.
  4. Cliquez sur Modifier.
  5. Dans la section Accès privé à Google, sélectionnez Activé.
  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 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)"

Remplacez les éléments suivants :

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

Autorisations requises pour cette tâche

Pour effectuer cette tâche, vous devez disposer des autorisations suivantes ou de l'un des rôles IAM suivants.

Autorisations pour gcloud CLI et l'API

Autorisations pour la console Google Cloud

Rôles

Pour en savoir plus sur les rôles, consultez la section Rôles.

Console

  1. Dans la console Google Cloud , accédez à la page Private Service Connect.
    Accéder à la page "Private Service Connect"
  2. Cliquez sur l'onglet Points de terminaison connectés.
  3. Cliquez sur Connecter le point de terminaison.
  4. Dans le champ Cible, sélectionnez le bundle d'API cible que vous souhaitez utiliser :
    • Toutes les API Google
    • VPC SC
  5. Dans le champ Nom du point de terminaison, saisissez un nom pour le point de terminaison.
  6. Sélectionnez un réseau pour le point de terminaison.
  7. 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 :
    1. Cliquez sur Créer une adresse IP.
    2. Saisissez un nom et une description pour l'adresse IP.
    3. Saisissez l'adresse IP que vous souhaitez utiliser, puis cliquez sur Enregistrer.
  8. 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.
  9. 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 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.
  10. Cliquez sur Ajouter un point de terminaison.

gcloud

  1. 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 les éléments suivants :
    • 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.
  2. Créez une règle de transfert pour connecter le point de terminaison aux API et services Google. L'option --service-directory-registration est facultative. Si vous l'omettez, un espace de noms existant est réutilisé. S'il n'y en a pas, un espace de noms généré par le système est attribué.
    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 les éléments suivants :
    • 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 : 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_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

  1. 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.
  2. Créez une règle de transfert pour connecter le point de terminaison aux API et services Google. L'objet serviceDirectoryRegistrations est facultatif. Si vous l'omettez, un espace de noms existant est réutilisé. S'il n'existe aucun espace de noms, un espace de noms généré par le système est attribué.
    POST https://compute.googleapis.com/compute/v1/projects/PROJECT/global/forwardingRules
    {
    "name": "ENDPOINT_NAME",
    "IPAddress": "projects/PROJECT/global/addresses/ADDRESS_NAME",
    "network": "projects/PROJECT/global/networks/NETWORK",
    "target": "API_BUNDLE",
    "serviceDirectoryRegistrations": [
    {
    "service_directory_region": REGION,
    "namespace": "NAMESPACE"
    }
    ],
    }
    Remplacez les éléments suivants :
    • PROJECT : 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 : réseau VPC pour le point de terminaison.
    • ADDRESS_NAME : nom de l'adresse réservée sur le réseau associé.
    • 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. Par exemple, us-central1. Si vous omettez REGION 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 sur us-central1.
    • NAMESPACE : nom de l'espace de noms de l'annuaire des services que vous souhaitez utiliser. Si vous omettez NAMESPACE 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.

Autorisations requises pour cette tâche

Pour effectuer cette tâche, vous devez disposer des autorisations suivantes ou de l'un des rôles IAM suivants.

Autorisations pour gcloud CLI et l'API

Autorisations pour la console Google Cloud

Rôles

Pour en savoir plus sur les rôles, consultez la section Rôles.

Console

  1. Dans la console Google Cloud , accédez à la page Private Service Connect.
    Accéder à la page "Private Service Connect"
  2. 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.

Autorisations requises pour cette tâche

Pour effectuer cette tâche, vous devez disposer des autorisations suivantes ou de l'un des rôles IAM suivants.

Autorisations pour gcloud CLI et l'API

Autorisations pour la console Google Cloud

Rôles

Pour en savoir plus sur les rôles, consultez la section Rôles.

Console

  1. Dans la console Google Cloud , accédez à la page Private Service Connect.
    Accéder à la page "Private Service Connect"
  2. Cliquez sur l'onglet Points de terminaison connectés.
    Les points de terminaison s'affichent.
  3. 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.

Autorisations requises pour cette tâche

Pour effectuer cette tâche, vous devez disposer des autorisations suivantes ou de l'un des rôles IAM suivants.

Autorisations

Rôles

Pour en savoir plus sur les rôles, consultez la section Rôles.

Supprimer un point de terminaison

Vous pouvez supprimer un point de terminaison.

Autorisations requises pour cette tâche

Pour effectuer cette tâche, vous devez disposer des autorisations suivantes ou de l'un des rôles IAM suivants.

Autorisations pour gcloud CLI et l'API

Autorisations pour la console Google Cloud

Rôles

Pour en savoir plus sur les rôles, consultez la section Rôles.

Console

  1. Dans la console Google Cloud , accédez à la page Private Service Connect.
    Accéder à la page "Private Service Connect"
  2. Cliquez sur l'onglet Points de terminaison connectés.
  3. 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.

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 :

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 :

Pour créer des enregistrements DNS pointant vers votre point de terminaison Private Service Connect, procédez comme suit :

  1. Créez une zone DNS pour le domaine que vous devez utiliser (par exemple, googleapis.com ou gcr.io). Envisagez pour cela de créer une zone privée Cloud DNS.
  2. Dans cette zone DNS, procédez comme suit :
    1. Créez un enregistrement A pour le nom de domaine (zone) lui-même, par exemple, googleapis.com ou gcr.io. Faites pointer cet enregistrement A vers l'adresse IP du point de terminaison. Si vous utilisez Cloud DNS, consultez la page Ajouter un enregistrement.
    2. 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 enregistrement CNAME vers l'enregistrement A dans la même zone. Par exemple, faites pointer *.googleapis.com vers googleapis.com ou *.gcr.io vers gcr.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.

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 :

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 :

  1. Vérifiez que l'API Cloud DNS est activée dans votre projet.
  2. 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
  3. Supprimez la zone DNS.
  4. 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 :

Pour résoudre ce problème, procédez comme suit :

  1. 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.
  2. Supprimez la zone DNS.