Configurer des connecteurs dans le projet hôte de VPC partagé

Si votre organisation utilise un VPC partagé, vous pouvez configurer un connecteur d'accès au VPC sans serveur dans le projet de service ou le projet hôte. Ce guide explique comment configurer un connecteur dans le projet hôte.

Si vous devez configurer un connecteur dans un projet de service, consultez la section Configurer des connecteurs dans des projets de service. Pour en savoir plus sur les avantages offerts par chacune de ces deux méthodes, consultez la section Se connecter à un réseau VPC partagé.

Avant de commencer

  1. Vérifiez les rôles IAM (Identity and Access Management) pour le compte que vous utilisez actuellement. Le compte actif doit disposer des rôles suivants sur le projet hôte :

  2. Sélectionnez le projet hôte dans l'environnement de votre choix.

Console

  1. Ouvrez le tableau de bord de la console Google Cloud.

    Accéder au tableau de bord de la console Google Cloud

  2. Dans la barre de menu située en haut du tableau de bord, cliquez sur le menu déroulant du projet et sélectionnez le projet hôte.

gcloud

Dans gcloud CLI, définissez le projet par défaut sur le projet hôte en exécutant la commande suivante dans votre terminal :

gcloud config set project HOST_PROJECT_ID

Remplacez les éléments suivants :

  • HOST_PROJECT_ID : ID du projet hôte de VPC partagé.

Créez un connecteur d'accès au VPC sans serveur.

Pour envoyer des requêtes à votre réseau VPC et recevoir les réponses correspondantes, vous devez créer un connecteur d'accès au VPC sans serveur. Vous pouvez créer un connecteur à l'aide de la console Google Cloud, de Google Cloud CLI ou de Terraform :

Console

  1. Activez l'API d'accès au VPC sans serveur (Serverless VPC Access) pour votre projet :

    Activer l'API

  2. Accédez à la page de présentation de l'accès au VPC sans serveur.

    Accéder à l'accès au VPC sans serveur

  3. Cliquez sur Créer un connecteur.

  4. Dans le champ Nom, saisissez le nom du connecteur. Le nom doit respecter la convention d'attribution de noms de Compute Engine et comporter moins de 21 caractères. Les tirets (-) comptent pour deux caractères.

  5. Dans le champ Région, sélectionnez une région pour votre connecteur. Elle doit correspondre à la région de votre service sans serveur.

    Si votre service se trouve dans la région us-central ou europe-west, utilisez us-central1 ou europe-west1.

  6. Dans le champ Réseau, sélectionnez le réseau VPC auquel associer le connecteur.

  7. Cliquez sur le menu déroulant Sous-réseau :

    Sélectionnez un sous-réseau /28 non utilisé.

    • Les sous-réseaux doivent être utilisés exclusivement par le connecteur. Ils ne peuvent pas être utilisés par d'autres ressources telles que les VM, Private Service Connect et les équilibreurs de charge.
    • Pour vérifier que votre sous-réseau n'est pas utilisé par Private Service Connect ni Cloud Load Balancing, vérifiez que le paramètre purpose du sous-réseau est bien défini sur PRIVATE en exécutant la commande suivante dans gcloud CLI :
      gcloud compute networks subnets describe SUBNET_NAME
      
      Remplacez SUBNET_NAME par le nom de votre sous-réseau.
  8. (Facultatif) Pour définir les options de scaling afin de renforcer le contrôle du connecteur, cliquez sur Afficher les paramètres de scaling pour afficher le formulaire de scaling.

    1. Définissez le nombre minimal et maximal d'instances de votre connecteur ou utilisez les valeurs par défaut, qui sont 2 (min.) et 10 (max.). Le connecteur effectue un scaling horizontal jusqu'à la valeur maximale spécifiée à mesure que le trafic augmente, mais il ne réduit pas le nombre d'instances lorsque le trafic diminue. Vous devez utiliser des valeurs comprises entre 2 et 10, et la valeur MIN doit être inférieure à la valeur MAX.
    2. Dans le menu déroulant Type d'instance, choisissez le type de machine à utiliser pour le connecteur ou utilisez la valeur par défaut e2-micro. Notez la barre latérale des coûts sur la droite lorsque vous choisissez le type d'instance, qui affiche des estimations de bande passante et de coûts.
  9. Cliquez sur Créer.

  10. Une coche verte apparaît à côté du nom du connecteur lorsque celui-ci est prêt à être utilisé.

gcloud

  1. Mettez à jour les composants gcloud vers la dernière version :

    gcloud components update
    
  2. Activez l'API Serverless VPC Access pour votre projet :

    gcloud services enable vpcaccess.googleapis.com
    
  3. Créez un connecteur d'accès au VPC sans serveur :

    gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
    --region=REGION \
    --subnet=SUBNET \
    --subnet-project=HOST_PROJECT_ID \
    # Optional: specify minimum and maximum instance values between 2 and 10, default is 2 min, 10 max.
    --min-instances=MIN \
    --max-instances=MAX \
    # Optional: specify machine type, default is e2-micro
    --machine-type=MACHINE_TYPE

    Remplacez les éléments suivants :

    • CONNECTOR_NAME : nom du connecteur. Le nom doit respecter la convention d'attribution de noms de Compute Engine et comporter moins de 21 caractères. Les tirets (-) comptent pour deux caractères.
    • REGION : région de votre connecteur. Elle doit correspondre à la région de votre service sans serveur. Si votre service se trouve dans la région us-central ou europe-west, utilisez us-central1 ou europe-west1.
    • SUBNET : nom d'un sous-réseau /28 inutilisé
      • Les sous-réseaux doivent être utilisés exclusivement par le connecteur. Ils ne peuvent pas être utilisés par d'autres ressources telles que les VM, Private Service Connect et les équilibreurs de charge.
      • Pour vérifier que votre sous-réseau n'est pas utilisé par Private Service Connect ni Cloud Load Balancing, vérifiez que le paramètre purpose du sous-réseau est bien défini sur PRIVATE en exécutant la commande suivante dans gcloud CLI :
        gcloud compute networks subnets describe SUBNET_NAME
        
        Remplacez les éléments suivants :
        • SUBNET_NAME : nom de votre sous-réseau
    • HOST_PROJECT_ID : ID du projet hôte
    • MIN : nombre minimal d'instances à utiliser pour le connecteur. Saisissez un nombre entier compris entre 2 et 9. La valeur par défaut est 2. Pour en savoir plus sur le scaling des connecteurs, consultez la page Débit et scaling.
    • MAX : nombre maximal d'instances à utiliser pour le connecteur. Saisissez un nombre entier compris entre 3 et 10. La valeur par défaut est 10. Si le trafic l'exige, le connecteur effectue un scaling horizontal jusqu'aux instances [MAX], mais il ne réduit pas le nombre d'instances. Pour en savoir plus sur le scaling des connecteurs, consultez la page Débit et scaling.
    • MACHINE_TYPE : f1-micro, e2-micro ou e2-standard-4. Pour en savoir plus sur le débit du connecteur, y compris le type de machine et le scaling, consultez la section Débit et scaling.

    Pour plus d'informations et d'arguments facultatifs, consultez la documentation de référence sur gcloud.

  4. Avant d'utiliser le connecteur, vérifiez qu'il est dans l'état READY :

    gcloud compute networks vpc-access connectors describe CONNECTOR_NAME \
    --region=REGION

    Remplacez les éléments suivants :

    • CONNECTOR_NAME : nom du connecteur. Il s'agit du nom que vous avez spécifié à l'étape précédente.
    • REGION : région du connecteur. Il s'agit de la région que vous avez spécifiée à l'étape précédente.

    Le résultat doit contenir la ligne state: READY.

Terraform

Vous pouvez utiliser une ressource Terraform pour activer l'API vpcaccess.googleapis.com.

resource "google_project_service" "vpcaccess-api" {
  project = var.project_id # Replace this with your project ID in quotes
  service = "vpcaccess.googleapis.com"
}

Vous pouvez utiliser les modules Terraform pour créer un réseau et un sous-réseau VPC, puis créer le connecteur.

module "test-vpc-module" {
  source       = "terraform-google-modules/network/google"
  version      = "~> 9.0"
  project_id   = var.project_id # Replace this with your project ID in quotes
  network_name = "my-serverless-network"
  mtu          = 1460

  subnets = [
    {
      subnet_name   = "serverless-subnet"
      subnet_ip     = "10.10.10.0/28"
      subnet_region = "us-central1"
    }
  ]
}

module "serverless-connector" {
  source     = "terraform-google-modules/network/google//modules/vpc-serverless-connector-beta"
  version    = "~> 9.0"
  project_id = var.project_id
  vpc_connectors = [{
    name        = "central-serverless"
    region      = "us-central1"
    subnet_name = module.test-vpc-module.subnets["us-central1/serverless-subnet"].name
    # host_project_id = var.host_project_id # Specify a host_project_id for shared VPC
    machine_type  = "e2-standard-4"
    min_instances = 2
    max_instances = 7
    }
    # Uncomment to specify an ip_cidr_range
    #   , {
    #     name          = "central-serverless2"
    #     region        = "us-central1"
    #     network       = module.test-vpc-module.network_name
    #     ip_cidr_range = "10.10.11.0/28"
    #     subnet_name   = null
    #     machine_type  = "e2-standard-4"
    #     min_instances = 2
    #   max_instances = 7 }
  ]
  depends_on = [
    google_project_service.vpcaccess-api
  ]
}

Activer Cloud Run pour le projet de service

Activez l'API Cloud Run pour le projet de service. Cela est nécessaire pour ajouter des rôles IAM lors des étapes suivantes et pour que le projet de service puisse utiliser Cloud Run.

Console

  1. Ouvrez la page de l'API Cloud Run.

    API Cloud Run

  2. Dans la barre de menu située en haut du tableau de bord, cliquez sur le menu déroulant du projet et sélectionnez le projet de service.

  3. Cliquez sur Activer.

gcloud

Exécutez la commande suivante dans votre terminal :

gcloud services enable run.googleapis.com --project=SERVICE_PROJECT_ID

Remplacez les éléments suivants :

  • SERVICE_PROJECT_ID : ID du projet de service

Fournir un accès au connecteur

Accordez l'accès au connecteur en attribuant au projet de service l'agent de service Cloud Run le rôle IAM Utilisateur de l'accès au VPC sans serveur sur le projet hôte.

Console

  1. Ouvrez la page IAM.

    Accéder à IAM

  2. Cliquez sur le menu déroulant du projet et sélectionnez le projet hôte.

  3. Cliquez sur Ajouter.

  4. Dans le champ Nouveaux comptes principaux, saisissez l'adresse e-mail de l'agent de service Cloud Run pour le service Cloud Run :

    service-SERVICE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com

    Remplacez les éléments suivants :

    • SERVICE_PROJECT_NUMBER : numéro du projet de service associé au projet de service Cette valeur est différente de l'ID du projet. Vous pouvez trouver le numéro de projet sur la page Paramètres du projet du projet de service dans la console Google Cloud.
  5. Dans le champ Rôle, sélectionnez Rôle d'utilisateur pour l'accès au VPC sans serveur.

  6. Cliquez sur Enregistrer.

gcloud

Exécutez la commande suivante dans votre terminal :

gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
--member=serviceAccount:service-SERVICE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \
--role=roles/vpcaccess.user

Remplacez les éléments suivants :

  • HOST_PROJECT_ID : ID du projet hôte de VPC partagé.
  • SERVICE_PROJECT_NUMBER : numéro du projet associé au compte de service. Cette valeur est différente de l'ID du projet. Vous pouvez trouver le numéro de projet en exécutant la commande suivante :

    gcloud projects describe SERVICE_PROJECT_ID
    

Rendre le connecteur visible

Sur la stratégie IAM du projet hôte, vous devez attribuer les deux rôles prédéfinis suivants aux comptes principaux qui déploient les services Cloud Run :

Vous pouvez également utiliser des rôles personnalisés ou d'autres rôles prédéfinis qui incluent toutes les autorisations du rôle Lecteur d'accès au VPC sans serveur (vpcaccess.viewer).

Console

  1. Ouvrez la page IAM.

    Accéder à IAM

  2. Cliquez sur le menu déroulant du projet et sélectionnez le projet hôte.

  3. Cliquez sur Ajouter.

  4. Dans le champ Nouveaux comptes principaux, saisissez l'adresse e-mail du compte principal pour lequel le connecteur du projet de service doit être visible. Vous pouvez saisir plusieurs adresses e-mail dans ce champ.

  5. Dans le champ Rôle, sélectionnez les deux rôles suivants :

    • Rôle de lecteur pour l'accès au VPC sans serveur
    • Lecteur de réseau Compute
  6. Cliquez sur Enregistrer.

gcloud

Exécutez les commandes suivantes dans votre terminal :

gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
--member=PRINCIPAL \
--role=roles/vpcaccess.viewer

gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
--member=PRINCIPAL \
--role=roles/compute.networkViewer

Remplacez les éléments suivants :

  • HOST_PROJECT_ID : ID du projet hôte de VPC partagé.
  • PRINCIPAL : compte principal qui déploie les services Cloud Run. En savoir plus sur l'option --member.

Configurer votre service pour utiliser le connecteur

Pour chaque service Cloud Run qui nécessite l'accès à votre VPC partagé, vous devez spécifier le connecteur du service. Vous pouvez spécifier le connecteur à l'aide de Google Cloud Console, de Google Cloud CLI, du fichier YAML ou de Terraform lors du déploiement d'un nouveau service ou de la mise à jour d'un service existant.

Console

  1. Dans la console Google Cloud, accédez à Cloud Run :

    Accédez à Cloud Run

  2. Cliquez sur Déployer un conteneur et sélectionnez Service pour configurer un nouveau service. Si vous configurez un service existant, cliquez sur celui-ci puis sur Modifier et déployer la nouvelle révision.

  3. Si vous configurez un nouveau service, remplissez la page initiale des paramètres du service, puis cliquez sur Conteneur(s), volumes, mise en réseau et sécurité pour développer la page de configuration du service.

  4. Cliquez sur l'onglet Connexions.

    image

    • Dans le champ Connecteur VPC, sélectionnez un connecteur à utiliser ou Aucun pour déconnecter votre service d'un réseau VPC.
  5. Cliquez sur Créer ou Déployer.

gcloud

  1. Définissez gcloud CLI pour utiliser le projet contenant la ressource Cloud Run :

    gcloud config set project PROJECT_ID
    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet contenant la ressource Cloud Run nécessitant un accès à votre VPC partagé. Si la ressource Cloud Run se trouve dans le projet hôte, il s'agit de l'ID du projet hôte. Si la ressource Cloud Run se trouve dans un projet de service, il s'agit de l'ID du projet de service.
  2. Utilisez l'option --vpc-connector.

  • Pour les services existants :
    gcloud run services update SERVICE --vpc-connector=CONNECTOR_NAME
  • Pour les nouveaux services :
    gcloud run deploy SERVICE --image=IMAGE_URL --vpc-connector=CONNECTOR_NAME
    Remplacez les éléments suivants :
    • SERVICE : nom de votre service.
    • IMAGE_URL : une référence à l'image de conteneur, par exemple us-docker.pkg.dev/cloudrun/container/hello:latest
    • CONNECTOR_NAME : nom du connecteur. Utilisez le nom complet lors du déploiement à partir d'un projet de service VPC partagé (par opposition au projet hôte), par exemple :
      projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
      HOST_PROJECT_ID est l'ID du projet hôte, CONNECTOR_REGION est la région de votre connecteur et CONNECTOR_NAME est le nom de votre connecteur.

YAML

Définissez gcloud CLI pour utiliser le projet contenant la ressource Cloud Run :

gcloud config set project PROJECT_ID

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet contenant la ressource Cloud Run nécessitant un accès à votre VPC partagé. Si la ressource Cloud Run se trouve dans le projet hôte, il s'agit de l'ID du projet hôte. Si la ressource Cloud Run se trouve dans un projet de service, il s'agit de l'ID du projet de service.
  1. Si vous créez un service, ignorez cette étape. Si vous mettez à jour un service existant, téléchargez sa configuration YAML :

    gcloud run services describe SERVICE --format export > service.yaml
  2. Ajoutez ou mettez à jour l'attribut run.googleapis.com/vpc-access-connector sous l'attribut annotations sous l'attribut de niveau supérieur spec :

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/vpc-access-connector: CONNECTOR_NAME
          name: REVISION

    Remplacez les éléments suivants :

    • SERVICE : nom de votre service Cloud Run.
    • CONNECTOR_NAME : nom du connecteur. Utilisez le nom complet lors du déploiement à partir d'un projet de service VPC partagé (par opposition au projet hôte), par exemple :
      projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
      HOST_PROJECT_ID est l'ID du projet hôte, CONNECTOR_REGION est la région de votre connecteur et CONNECTOR_NAME est le nom de votre connecteur.
    • REVISION par un nouveau nom de révision ou supprimez-le (le cas échéant). Si vous indiquez un nouveau nom de révision, il doit répondre aux critères suivants :
      • Commencer par SERVICE-
      • Ne contenir que des lettres minuscules, des chiffres et -
      • Ne pas se terminer par -
      • Ne pas dépasser 63 caractères
  3. Remplacez la configuration du service en utilisant la commande suivante :

    gcloud run services replace service.yaml

Terraform

Vous pouvez utiliser une ressource Terraform pour créer un service et le configurer pour qu'il utilise votre connecteur.

# Cloud Run service
resource "google_cloud_run_v2_service" "gcr_service" {
  name     = "mygcrservice"
  location = "us-west1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
      resources {
        limits = {
          cpu    = "1000m"
          memory = "512Mi"
        }
      }
      # the service uses this SA to call other Google Cloud APIs
      # service_account_name = myservice_runtime_sa
    }

    scaling {
      # Limit scale up to prevent any cost blow outs!
      max_instance_count = 5
    }

    vpc_access {
      # Use the VPC Connector
      connector = google_vpc_access_connector.connector.id
      # all egress from the service should go through the VPC Connector
      egress = "ALL_TRAFFIC"
    }
  }
}

Étapes suivantes