Connectivité réseau dans le VPC Google Cloud

Cette page explique comment configurer une connectivité privée entre les Integration Connectors et votre service de backend, tel que MySQL, Postgres et SQL Server hébergés dans un VPC Google Cloud.

Sur cette page, nous partons du principe que vous connaissez bien les éléments suivants :

La connectivité privée au VPC Google Cloud peut appartenir à l'une des catégories suivantes:

  • Le service de backend et le rattachement de service PSC se trouvent dans le même projet ou VPC Google Cloud.
  • Le service de backend et le rattachement de service PSC se trouvent dans différents projets ou VPC Google Cloud.

Remarques

Lorsque vous créez un rattachement de service PSC, tenez compte des points clés suivants:

  • Le rattachement de service PSC et l'équilibreur de charge sont créés dans différents sous-réseaux du même VPC. Plus précisément, le rattachement de service est toujours créé dans un sous-réseau NAT.
  • Le trafic provenant de l'équilibreur de charge et de la sonde de vérification de l'état doit être envoyé au même port.
  • Configurez les règles de pare-feu pour faciliter le flux de trafic.

    Règles d'entrée

    Le trafic provenant du sous-réseau de l'association de service PSC doit atteindre votre service de backend.

    Règles de sortie

    Le trafic de sortie est activé par défaut dans un projet Google Cloud, sauf si des règles de refus spécifiques sont configurées.

  • Tous vos composants Google Cloud, tels que le rattachement de service PSC et l'équilibreur de charge, doivent se trouver dans la même région.

Connectivité privée à un service de backend dans un VPC Google Cloud

Cette section explique comment établir une connectivité privée lorsque le service de backend et l'attachement de service PSC se trouvent dans le même projet Google Cloud.

L'image suivante montre la configuration de la connectivité réseau privée des Integration Connectors à un service hébergé dans un VPC Google Cloud:

Pour configurer une connectivité privée à un service de backend dans un VPC Google Cloud, procédez comme suit:

Créer un rattachement de service PSC

Pour établir une connectivité privée à partir d'Integration Connectors, votre service doit être exposé à Integration Connectors à l'aide d'un rattachement de service PSC. Une pièce jointe de service utilise toujours un équilibreur de charge. Par conséquent, si votre service n'est pas derrière un équilibreur de charge, vous devez en configurer un.

  1. Créez une sonde de vérification de l'état et autorisez le trafic provenant de la sonde.
    1. Créez la sonde de vérification de l'état.
      gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port BACKEND_SERVER_PORT --region=REGION

      Dans cette commande, définissez BACKEND_SERVER_PORT sur 3306, qui est le port par défaut sur lequel le serveur MySQL s'exécute.

    2. Créez une règle de pare-feu pour autoriser le trafic provenant de la sonde.
      gcloud compute firewall-rules create VPC_NETWORK-allow-health-check --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:BACKEND_SERVER_PORT --source-ranges=35.191.0.0/16,130.211.0.0/22
  2. Créez un équilibreur de charge interne L4 et autorisez le trafic provenant de l'équilibreur de charge.
    1. Créez un service de backend.
      gcloud compute backend-services create BACKEND_SERVICE --load-balancing-scheme=internal --protocol=tcp --health-checks=HEALTH_CHECK_NAME --health-checks-region=REGION 
    2. Ajoutez le groupe d'instances au service de backend.
      gcloud compute backend-services add-backend BACKEND_SERVICE --instance-group=INSTANCE_GROUP_NAME --instance-group-zone=ZONE
    3. Créez une règle de transfert.
      gcloud compute forwarding-rules create FORWARDING_RULE_NAME --load-balancing-scheme=internal --network=VPC_NETWORK --subnet=SUBNET_NAME_2 --ip-protocol=TCP --ports=BACKEND_SERVER_PORT --backend-service=BACKEND_SERVICE --backend-service-region=REGION
    4. Créez une règle de pare-feu pour autoriser le trafic interne de l'équilibreur de charge vers le groupe d'instances.
      gcloud compute firewall-rules create VPC_NETWORK-allow-internal --direction=INGRESS --priority=1000 --network=VPC_NETWORK --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2
  3. Créez le rattachement de service.
    1. Créez un sous-réseau pour le NAT PSC. La commande suivante crée un sous-réseau nommé psc-nat-subnet1 et dont l'objectif est PRIVATE_SERVICE_CONNECT.
      gcloud compute networks subnets create psc-nat-subnet1 \
                --network=VPC_NETWORK --range=SUBNET_RANGE_1 \
                --purpose=PRIVATE_SERVICE_CONNECT
    2. Créez une règle de pare-feu pour autoriser le trafic du NAT du PSC vers l'équilibreur de charge.
      gcloud compute network-firewall-policies rules create PRIORITY --firewall-policy FIREWALL_POLICY_NAME_SA \
          --direction=INGRESS  --network=VPC_NETWORK \
          --action=allow --allow=tcp:BACKEND_SERVER_PORT --src-ip-ranges=SUBNET_RANGE_1
    3. Créez un rattachement de service avec une approbation explicite.
      gcloud compute service-attachments create SERVICE_ATTACHMENT_NAME --producer-forwarding-rule=FORWARDING_RULE_NAME  --connection-preference=ACCEPT_MANUAL --consumer-accept-list=SERVICE_DIRECTORY_PROJECT_ID=LIMIT --nat-subnets=psc-nat-subnet1

      Dans cette commande, LIMIT correspond à la limite de connexion du projet. La limite de connexion est le nombre de points de terminaison PSC client pouvant se connecter à ce service. Pour obtenir l'SERVICE_DIRECTORY_PROJECT_ID, procédez comme suit:

      • Vous pouvez créer le rattachement de service PSC de sorte qu'il n'accepte que les requêtes provenant des projets Google Cloud spécifiés. Toutefois, pour ce faire, vous avez besoin de l'ID de projet du répertoire de services associé à votre projet Google Cloud. Pour obtenir l'ID de projet du répertoire de services, vous pouvez utiliser l'API List Connections, comme illustré dans l'exemple suivant.

        Syntaxe

        curl -X GET \
            -H "authorization: Bearer $(gcloud auth print-access-token)" \
            -H "Content-Type: application/json" \
            "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"

        Remplacez les éléments suivants :

        • CONNECTORS_PROJECT_ID: ID de votre projet Google Cloud dans lequel vous avez créé votre connexion.

        Exemple

        Cet exemple obtient l'ID de projet du répertoire de services pour le projet Google Cloud connectors-test.

        curl -X GET \
            -H "authorization: Bearer $(gcloud auth print-access-token)" \
            -H "Content-Type: application/json" \
            "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"

        L'exécution de cette commande dans le terminal affiche un résultat semblable à celui-ci:

        .....
        {
          "connections": [
            {
              "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa",
              "createTime": "2022-10-07T09:02:31.905048520Z",
              "updateTime": "2022-10-07T09:22:39.993778690Z",
              "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1",
              "status": {
                "state": "ACTIVE"
              },
              "configVariables": [
                {
                  "key": "project_id",
                  "stringValue": "connectors-test"
                },
                {
                  "key": "dataset_id",
                  "stringValue": "testDataset"
                }
              ],
              "authConfig": {},
              "serviceAccount": "564332356444-compute@developer.gserviceaccount.com",
              "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime",
              "nodeConfig": {
                "minNodeCount": 2,
                "maxNodeCount": 50
              }
            },
        ....
        

        Dans l'exemple de sortie, pour le projet Google Cloud connectors-test, l'ID du projet du répertoire de services est abcdefghijk-tp.

Après avoir créé un rattachement de service PSC, créez un rattachement de point de terminaison pour consommer le rattachement de service PSC. Pour en savoir plus, consultez Créer une pièce jointe de point de terminaison.

Connectivité privée pour différents projets Google Cloud

Cette section explique comment établir une connectivité privée lorsque le service de backend et le rattachement de service PSC se trouvent dans différents projets ou VPC Google Cloud.

L'image suivante montre la configuration de la connectivité réseau privée dans laquelle l'attachement de service PSC et le service de backend se trouvent dans différents projets Google Cloud:

Pour configurer la connectivité privée pour différents projets Google Cloud, procédez comme suit:

Configurer la connectivité privée

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

  1. Créer un équilibreur de charge Si vous disposez déjà d'un équilibreur de charge, ignorez cette étape.
    1. Créez un NEG zonal. Pour en savoir plus, consultez Créer un NEG zonal.
    2. Ajoutez le NEG zonal en tant que backend, puis créez les règles suivantes :
      1. Créez une règle de transfert.
        gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
        --load-balancing-scheme=internal --network=VPC_NETWORK --subnet=SUBNET_NAME_2 \
        --ip-protocol=TCP --ports=BACKEND_SERVER_PORT --backend-service=BACKEND_SERVICE \
        --backend-service-region=REGION
      2. Créez une règle de pare-feu pour autoriser le trafic interne de l'équilibreur de charge vers le groupe d'instances.
        gcloud compute firewall-rules create FIREWALL_RULE_NAME_INTERNAL \
        --direction=INGRESS --priority=1000 --network=VPC_NETWORK \
        --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2
  2. Créez le rattachement de service.
    1. Créez un sous-réseau pour le NAT PSC. La commande suivante crée un sous-réseau nommé psc-nat-subnet1 et dont l'objectif est PRIVATE_SERVICE_CONNECT.
      gcloud compute networks subnets create psc-nat-subnet1 \
                --network=VPC_NETWORK --range=SUBNET_RANGE_1 \
                --purpose=PRIVATE_SERVICE_CONNECT
    2. Créez une règle de pare-feu pour autoriser le trafic du NAT du PSC vers l'équilibreur de charge.
      gcloud compute network-firewall-policies rules create PRIORITY --firewall-policy FIREWALL_POLICY_NAME_SA \
          --direction=INGRESS  --network=VPC_NETWORK \
          --action=allow --allow=tcp:BACKEND_SERVER_PORT --src-ip-ranges=SUBNET_RANGE_1
    3. Créez un rattachement de service avec une approbation explicite.
      gcloud compute service-attachments create SERVICE_ATTACHMENT_NAME --producer-forwarding-rule=FORWARDING_RULE_NAME  --connection-preference=ACCEPT_MANUAL --consumer-accept-list=SERVICE_DIRECTORY_PROJECT_ID=LIMIT --nat-subnets=psc-nat-subnet1

      Dans cette commande, LIMIT correspond à la limite de connexion du projet. La limite de connexion est le nombre de points de terminaison PSC client pouvant se connecter à ce service. Pour obtenir l'SERVICE_DIRECTORY_PROJECT_ID, procédez comme suit:

      • Vous pouvez créer le rattachement de service PSC de sorte qu'il n'accepte que les requêtes provenant des projets Google Cloud spécifiés. Toutefois, pour ce faire, vous avez besoin de l'ID de projet du répertoire de services associé à votre projet Google Cloud. Pour obtenir l'ID de projet du répertoire de services, vous pouvez utiliser l'API List Connections, comme illustré dans l'exemple suivant.

        Syntaxe

        curl -X GET \
            -H "authorization: Bearer $(gcloud auth print-access-token)" \
            -H "Content-Type: application/json" \
            "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"

        Remplacez les éléments suivants :

        • CONNECTORS_PROJECT_ID: ID de votre projet Google Cloud dans lequel vous avez créé votre connexion.

        Exemple

        Cet exemple obtient l'ID de projet du répertoire de services pour le projet Google Cloud connectors-test.

        curl -X GET \
            -H "authorization: Bearer $(gcloud auth print-access-token)" \
            -H "Content-Type: application/json" \
            "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"

        L'exécution de cette commande dans le terminal affiche un résultat semblable à celui-ci:

        .....
        {
          "connections": [
            {
              "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa",
              "createTime": "2022-10-07T09:02:31.905048520Z",
              "updateTime": "2022-10-07T09:22:39.993778690Z",
              "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1",
              "status": {
                "state": "ACTIVE"
              },
              "configVariables": [
                {
                  "key": "project_id",
                  "stringValue": "connectors-test"
                },
                {
                  "key": "dataset_id",
                  "stringValue": "testDataset"
                }
              ],
              "authConfig": {},
              "serviceAccount": "564332356444-compute@developer.gserviceaccount.com",
              "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime",
              "nodeConfig": {
                "minNodeCount": 2,
                "maxNodeCount": 50
              }
            },
        ....
        

        Dans l'exemple de sortie, pour le projet Google Cloud connectors-test, l'ID du projet du répertoire de services est abcdefghijk-tp.

Ajouter le projet Integration Connectors à la liste d'autorisation dans un attachement de service

Vous pouvez créer le rattachement de service PSC de sorte qu'il n'accepte que les requêtes provenant des projets Google Cloud spécifiés. Toutefois, pour ce faire, vous avez besoin de l'ID de projet du répertoire de services associé à votre projet Google Cloud. Pour obtenir l'ID de projet du répertoire de services, vous pouvez utiliser l'API List Connections, comme illustré dans l'exemple suivant.

Syntaxe

curl -X GET \
    -H "authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"

Remplacez les éléments suivants :

  • CONNECTORS_PROJECT_ID: ID de votre projet Google Cloud dans lequel vous avez créé votre connexion.

Exemple

Cet exemple obtient l'ID de projet du répertoire de services pour le projet Google Cloud connectors-test.

curl -X GET \
    -H "authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"

L'exécution de cette commande dans le terminal affiche un résultat semblable à celui-ci:

.....
{
  "connections": [
    {
      "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa",
      "createTime": "2022-10-07T09:02:31.905048520Z",
      "updateTime": "2022-10-07T09:22:39.993778690Z",
      "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1",
      "status": {
        "state": "ACTIVE"
      },
      "configVariables": [
        {
          "key": "project_id",
          "stringValue": "connectors-test"
        },
        {
          "key": "dataset_id",
          "stringValue": "testDataset"
        }
      ],
      "authConfig": {},
      "serviceAccount": "564332356444-compute@developer.gserviceaccount.com",
      "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime",
      "nodeConfig": {
        "minNodeCount": 2,
        "maxNodeCount": 50
      }
    },
....

Dans l'exemple de sortie, pour le projet Google Cloud connectors-test, l'ID du projet du répertoire de services est abcdefghijk-tp.

Une fois que vous avez ajouté le projet Integration Connectors à la liste d'autorisations dans un rattachement de service PSC, créez un rattachement de point de terminaison pour consommer le rattachement de service PSC. Pour en savoir plus, consultez Créer une pièce jointe de point de terminaison.

Créer un rattachement de point de terminaison

Rattachement de point de terminaison en tant qu'adresse IP

Pour savoir comment créer un rattachement de point de terminaison en tant qu'adresse IP, consultez la section Créer un rattachement de point de terminaison en tant qu'adresse IP.

Rattachement de point de terminaison en tant que nom d'hôte

Dans certains cas, comme les backends compatibles avec TLS, la destination vous oblige à utiliser des noms d'hôte au lieu d'adresses IP privées pour effectuer la validation TLS. Dans les cas où un DNS privé est utilisé au lieu d'une adresse IP pour la destination de l'hôte, en plus de créer une pièce jointe de point de terminaison en tant qu'adresse IP, vous devez également configurer des zones gérées. Pour savoir comment créer un rattachement de point de terminaison en tant que nom d'hôte, consultez la section Créer un rattachement de point de terminaison en tant que nom d'hôte.

Plus tard, lorsque vous configurerez votre connexion pour utiliser le rattachement du point de terminaison, vous pourrez le sélectionner.

Configurer une connexion pour utiliser le rattachement de point de terminaison

Maintenant que vous avez créé un rattachement de point de terminaison, utilisez-le dans votre connexion. Lorsque vous créez une connexion ou modifiez une connexion existante, dans la section "Destinations", sélectionnez Rattachement du point de terminaison comme Type de destination, puis sélectionnez le rattachement du point de terminaison que vous avez créé dans la liste Rattachement du point de terminaison.

Si vous avez créé une zone gérée, sélectionnez Adresse hôte comme Type de destination et utilisez l'enregistrement A que vous avez créé lors de la création de la zone gérée.

Conseils de dépannage

Si vous rencontrez des problèmes de connectivité privée, suivez les consignes de cette section pour éviter les problèmes courants.

  • Pour vérifier que l'association du point de terminaison est correctement configurée et que la connexion PSC est établie, vérifiez l'état de la connexion. Pour en savoir plus, consultez Vérifier la connexion de l'attachement de point de terminaison.
  • Vérifiez que les règles de pare-feu sont configurées comme suit :
    • Le trafic provenant du sous-réseau de l'attachement de service PSC doit être autorisé à atteindre votre service de backend.
    • L'équilibreur de charge doit pouvoir envoyer du trafic vers votre service de backend.
      • Équilibreurs de charge passthrough (équilibreur de charge TCP/UDP de niveau 4) Les requêtes provenant des adresses NAT de l'attachement de service PSC doivent pouvoir atteindre votre backend. Ces adresses IP NAT sont allouées automatiquement à partir de la plage de sous-réseau NAT du PSC. Par conséquent, vous devez autoriser l'ensemble de la plage d'adresses IP du sous-réseau NAT dans lequel se trouve votre pièce jointe de service. Pour trouver le sous-réseau NAT du PSC, exécutez la commande suivante:
        gcloud compute networks subnets list --project=PROJECT_ID --region=REGION --filter="purpose=PRIVATE_SERVICE_CONNECT"
      • Équilibreurs de charge basés sur des proxys/HTTP(S) (équilibreur de charge proxy de niveau 4, équilibreur de charge de niveau 7) Les requêtes d'un équilibreur de charge proxy proviennent du sous-réseau proxy réservé de la région. Par conséquent, vos règles de pare-feu doivent être configurées pour autoriser les requêtes provenant des plages de sous-réseaux proxy réservés à atteindre votre backend. Pour trouver le sous-réseau proxy réservé, utilisez la commande suivante:
        gcloud compute networks subnets list --project=PROJECT_ID --region=REGION --filter="purpose=REGIONAL_MANAGED_PROXY"
      • Pour savoir comment résoudre les problèmes liés à l'équilibreur de charge, consultez Résoudre les problèmes liés aux équilibreurs de charge d'application internes.

      • La vérification de l'état doit pouvoir accéder à votre système backend. Les tests de vérification de l'état'état Google Cloud ont une plage d'adresses IP fixe (35.191.0.0/16, 130.211.0.0/22). Par conséquent, ces adresses IP doivent être autorisées à envoyer du trafic à votre serveur backend.
    • Le test de connectivité Google Cloud vous permet d'identifier les lacunes de votre configuration réseau. Pour en savoir plus, consultez la page Créer et exécuter des tests de connectivité.