Configurer à la fois l'accès aux services privés et Private Service Connect

Cette page explique comment configurer à la fois l'accès aux services privés et Private Service Connect.

En configurant l'accès aux services privés, vous pouvez allouer une plage d'adresses IP et créer une connexion de service privée pour le réseau cloud privé virtuel (VPC) de votre projet Google Cloud. Cela permet aux ressources du réseau VPC de se connecter à vos instances Cloud SQL.

En configurant Private Service Connect, vous pouvez vous connecter à une instance Cloud SQL principale ou à l'une de ses instances répliquées avec accès en lecture à partir de plusieurs réseaux VPC appartenant à différents groupes, équipes, projets ou organisations.

Créer une instance compatible avec l'accès aux services privés et Private Service Connect

En créant une instance Cloud SQL compatible à la fois avec l'accès aux services privés et Private Service Connect, vous bénéficiez des avantages des deux services. Pour en savoir plus, consultez la section Options de connexion pour les instances.

Private Service Connect vous permet de vous connecter à une instance Cloud SQL à partir de plusieurs réseaux VPC appartenant à différents groupes, équipes, projets ou organisations.

Vous pouvez créer une instance Cloud SQL compatible avec l'accès aux services privés et Private Service Connect à l'aide de la gcloud CLI ou de l'API.

gcloud

Pour créer une instance compatible à la fois avec l'accès aux services privés et Private Service Connect, utilisez la commande gcloud beta sql instances create:

gcloud beta sql instances create INSTANCE_NAME \
--project=PROJECT_ID \
--region=REGION_NAME \
--enable-private-service-connect \
--allowed-psc-projects=ALLOWED_PROJECTS \
--availability-type=AVAILABILITY_TYPE \
--no-assign-ip \
--allocated-ip-range-name=RANGE_NAME \
--enable-google-private-path \
--tier=MACHINE_TYPE \
--database-version=DATABASE_VERSION \
--network=VPC_PSA_NETWORK_PATH \
--enable-bin-log \
--psc-auto-connections=network=VPC_PSC_NETWORK_PATH,project=SERVICE_PROJECT

Effectuez les remplacements suivants :

  • INSTANCE_NAME : nom de l'instance.
  • PROJECT_ID : ID ou numéro de projet du projet Google Cloud contenant l'instance.
  • REGION_NAME : nom de la région pour l'instance.
  • ALLOWED_PROJECTS : liste d'ID ou de numéros de projet autorisés, séparés par une virgule. Si un projet ne figure pas dans cette liste, vous ne pouvez pas créer de points de terminaison Private Service Connect dans le projet pour vous connecter à l'instance.

  • AVAILABILITY_TYPE : permet d'activer la haute disponibilité pour l'instance. Pour ce paramètre, spécifiez l'une des valeurs suivantes :
    • REGIONAL : permet d'activer la haute disponibilité (recommandé pour les instances de production). L'instance bascule vers une autre zone dans la région sélectionnée.
    • ZONAL : n'offre aucune fonctionnalité de basculement. Il s'agit de la valeur par défaut.

    Pour en savoir plus sur la définition et la suppression de la haute disponibilité pour les instances, consultez les sections Configurer la haute disponibilité d'une instance existante et Désactiver la haute disponibilité pour une instance.

  • RANGE_NAME: pour ce paramètre facultatif, définissez un nom de plage pour lequel une plage d'adresses IP est allouée. Le nom de la plage doit respecter la norme RFC 1035 et contenir entre 1 et 63 caractères.
  • MACHINE_TYPE : type de machine de l'instance.
  • DATABASE_VERSION : version de la base de données pour l'instance (par exemple, MYSQL_8_0).
  • VPC_PSA_NETWORK_PATH: nom et chemin d'accès du réseau VPC auquel l'instance se connecte (par exemple, "projects/PROJECT_ID/global/networks/default"). Ce réseau est utilisé pour les connexions d'accès aux services privés et l'adresse IP d'accès aux services privés de l'instance Cloud SQL.
  • VPC_PSC_NETWORK_PATH: chemin d'accès au réseau VPC à partir duquel le point de terminaison Private Service Connect doit être créé. Exemple :
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: projet dans lequel le point de terminaison Private Service Connect est créé. Si le réseau VPC n'est pas un VPC partagé, il ne peut s'agir que du projet hôte du réseau. S'il s'agit d'un VPC partagé, il peut s'agir du projet hôte ou du projet de service.

Pour savoir comment vous connecter à une instance pour laquelle Private Service Connect est activé, consultez Se connecter à une instance Cloud SQL.

Pour désactiver l'adresse IP publique, utilisez le paramètre --no-assign-ip.

Vous pouvez également utiliser le paramètre --enable-google-private-path pour autoriser d'autres Google Cloud services tels que BigQuery à accéder aux données dans Cloud SQL et à effectuer des requêtes sur ces données via une connexion IP privée. Ce paramètre n'est valide que dans les cas suivants :

  • Vous utilisez le paramètre --no-assign-ip.
  • Vous utilisez le paramètre --network pour spécifier le nom du réseau VPC que vous souhaitez utiliser pour créer une connexion privée.

Terraform

Pour créer une instance avec à la fois l'accès aux services privés et Private Service Connect activés, utilisez la ressource Terraform google_sql_database_instance.


resource "google_compute_network" "peering_network" {
  name                    = "private-network"
  auto_create_subnetworks = "false"
}

resource "google_compute_global_address" "private_ip_address" {
  name          = "private-ip-address"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.peering_network.id
}

resource "google_service_networking_connection" "default" {
  network                 = google_compute_network.peering_network.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.private_ip_address.name]
}

resource "google_sql_database_instance" "default" {
  name             = "mysql-instance"
  region           = "us-central1"
  database_version = "MYSQL_8_0"

  depends_on = [google_service_networking_connection.default]

  settings {
    tier = "db-f1-micro"
    ip_configuration {
      psc_config {
        psc_enabled               = true
        allowed_consumer_projects = [] # Add consumer project IDs here.
      }
      ipv4_enabled    = false
      private_network = google_compute_network.peering_network.id
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

resource "google_compute_network_peering_routes_config" "peering_routes" {
  peering              = google_service_networking_connection.default.peering
  network              = google_compute_network.peering_network.name
  import_custom_routes = true
  export_custom_routes = true
}

resource "google_compute_address" "default" {
  name         = "psc-compute-address-${google_sql_database_instance.default.name}"
  region       = "us-central1"
  address_type = "INTERNAL"
  subnetwork   = "default"      # Replace value with the name of the subnet here.
  address      = "192.168.0.43" # Replace value with the IP address to reserve.
}

data "google_sql_database_instance" "default" {
  name = resource.google_sql_database_instance.default.name
}

resource "google_compute_forwarding_rule" "default" {
  name                  = "psc-forwarding-rule-${google_sql_database_instance.default.name}"
  region                = "us-central1"
  network               = "default"
  ip_address            = google_compute_address.default.self_link
  load_balancing_scheme = ""
  target                = data.google_sql_database_instance.default.psc_service_attachment_link
}

Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.

Préparer Cloud Shell

  1. Lancez Cloud Shell.
  2. Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.

    Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.

Préparer le répertoire

Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).

  1. Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension .tf, par exemple main.tf. Dans ce tutoriel, le fichier est appelé main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.

    Copiez l'exemple de code dans le fichier main.tf que vous venez de créer.

    Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.

  3. Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
  4. Enregistrez les modifications.
  5. Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
    terraform init

    Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option -upgrade :

    terraform init -upgrade

Appliquer les modifications

  1. Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
    terraform plan

    Corrigez les modifications de la configuration si nécessaire.

  2. Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant yes lorsque vous y êtes invité :
    terraform apply

    Attendez que Terraform affiche le message "Apply completed!" (Application terminée).

  3. Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.

REST

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID ou numéro de projet du projet Google Cloud contenant l'instance.
  • INSTANCE_NAME : nom de l'instance.
  • REGION_NAME : nom de la région pour l'instance.
  • AVAILABILITY_TYPE : active la haute disponibilité pour l'instance. Pour ce paramètre, spécifiez l'une des valeurs suivantes :
    • REGIONAL : permet d'activer la haute disponibilité (recommandé pour les instances de production). L'instance bascule vers une autre zone dans la région sélectionnée.
    • ZONAL : n'offre aucune fonctionnalité de basculement. Il s'agit de la valeur par défaut.

    Pour en savoir plus sur la définition et la suppression de la haute disponibilité pour les instances, consultez les sections Configurer la haute disponibilité d'une instance existante et Désactiver la haute disponibilité pour une instance.

  • VPC_PSA_NETWORK_PATH: chemin d'accès au réseau VPC auquel l'instance se connecte (par exemple, "projects/PROJECT_ID/global/networks/default"). Ce réseau est utilisé pour les connexions d'accès aux services privés et l'adresse IP d'accès aux services privés de l'instance Cloud SQL.
  • RANGE_NAME: pour ce paramètre facultatif, définissez un nom de plage pour lequel une plage d'adresses IP est allouée. Le nom de la plage doit respecter la norme RFC 1035 et comporter entre 1 et 63 caractères.
  • ALLOWED_PROJECTS : liste d'ID ou de numéros de projet autorisés, séparés par une virgule. Si un projet ne figure pas dans cette liste, vous ne pouvez pas créer de points de terminaison Private Service Connect dans le projet pour vous connecter à l'instance.

  • VPC_PSC_NETWORK_PATH: chemin d'accès au réseau VPC à partir duquel le point de terminaison Private Service Connect doit être créé. Exemple :
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: projet dans lequel le point de terminaison Private Service Connect est créé. Si le réseau VPC n'est pas un VPC partagé, il ne peut s'agir que du projet hôte du réseau. S'il s'agit d'un VPC partagé, il peut s'agir du projet hôte ou du projet de service.

  • MACHINE_TYPE : type de machine de l'instance.

Pour savoir comment vous connecter à une instance pour laquelle Private Service Connect est activé, consultez Se connecter à une instance Cloud SQL.

Vous avez défini le paramètre ipv4Enabled sur false, car votre instance possède une adresse IP interne.

Si vous définissez le paramètre enablePrivatePathForGoogleCloudServices facultatif sur true, vous autorisez d'autres Google Cloud services, tels que BigQuery, à accéder aux données dans Cloud SQL et à interroger ces données via une connexion IP interne. Si vous définissez ce paramètre sur false, les autres services Google Cloud ne peuvent pas accéder aux données dans Cloud SQL via une connexion IP interne.

Méthode HTTP et URL :

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

Corps JSON de la requête :

{
  "name": "INSTANCE_NAME",
  "project": PROJECT_ID",
  "region": "REGION_NAME",
  "databaseVersion": "MYSQL_8_0",
  "kind": "sql#instance",
  "settings": {
    "availabilityType": "AVAILABILITY_TYPE",
    "backupConfiguration": {
      "binaryLogEnabled": true,
      "enabled": true,
      "kind": "sql#backupConfiguration",
      "startTime": "00:00"
    },
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": VPC_PSA_NETWORK_PATH,
      "allocatedIpRange": "RANGE_NAME",
      "enablePrivatePathForGoogleCloudServices": true,
      "pscConfig": {
        "allowedConsumerProjects": [
          "ALLOWED_PROJECTS"
        ],
        "pscAutoConnections": [
          {
            "consumerProject":"SERVICE_PROJECT",
            "consumerNetwork":"projects/SERVICE_PROJECT/global/networks/VPC_PSC_NETWORK_PATH"
          }
        ],
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "SYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME",
  "status": "RUNNING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "2023-06-14T18:48:35.499Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Désactiver Private Service Connect pour une instance

Vous pouvez désactiver Private Service Connect pour une instance pour laquelle l'accès aux services privés et Private Service Connect sont activés.

Lorsque vous désactivez Private Service Connect pour l'instance, cette opération prend environ huit minutes, avec un temps d'arrêt d'environ 45 secondes sur votre instance. Une fois l'opération terminée, l'accès aux services privés et les chemins de connectivité Private Service Connect ne coexistent plus sur la même instance. Vous ne pouvez pas vous connecter à l'instance à l'aide de Private Service Connect.

Vous pouvez désactiver Private Service Connect pour une instance à l'aide de gcloud CLI ou de l'API.

gcloud

Pour désactiver Private Service Connect pour une instance, utilisez la commande gcloud beta sql instances patch:

gcloud beta sql instances patch INSTANCE_NAME \
--project=PROJECT_ID \
--no-enable-private-service-connect \
--clear-allowed-psc-projects

Effectuez les remplacements suivants :

  • INSTANCE_NAME : nom de l'instance
  • PROJECT_ID : ID ou numéro de projet du projet Google Cloud contenant l'instance.

REST

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID ou numéro de projet du projet Google Cloud contenant l'instance.
  • INSTANCE_NAME : nom de l'instance

Méthode HTTP et URL :

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

Corps JSON de la requête :

{
  "kind": "sql#instance",
  "name": "INSTANCE_NAME",
  "project": "PROJECT_ID",
  "settings": {
    "ipConfiguration": {
      "pscConfig": {
        "pscEnabled": "false",
        "allowedConsumerProjects": [{}]
      }
    },
    "kind": "sql#settings"
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME",
  "status": "RUNNING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "2023-06-14T18:48:35.499Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Activer Private Service Connect pour une instance

Vous pouvez activer Private Service Connect pour une instance pour laquelle l'accès aux services privés est déjà activé. Vous pouvez utiliser Private Service Connect pour vous connecter à une instance Cloud SQL à partir de plusieurs réseaux VPC.

Lorsque vous activez Private Service Connect pour l'instance, cette opération prend environ huit minutes, avec un temps d'arrêt d'environ 45 secondes sur votre instance. Une fois l'opération terminée, l'accès aux services privés et les chemins de connectivité Private Service Connect coexistent sur la même instance.

Vous pouvez activer Private Service Connect pour une instance à l'aide de gcloud CLI ou de l'API.

gcloud

Pour activer Private Service Connect pour une instance, utilisez la commande gcloud beta sql instances patch:

gcloud beta sql instances patch INSTANCE_NAME \
--project=PROJECT_ID \
--enable-private-service-connect \
--allowed-psc-projects=ALLOWED_PROJECTS \
--psc-auto-connections=network=VPC_PSC_NETWORK_PATH,project=SERVICE_PROJECT

Effectuez les remplacements suivants :

  • INSTANCE_NAME : nom de l'instance
  • PROJECT_ID : ID ou numéro de projet du projet Google Cloud contenant l'instance.
  • ALLOWED_PROJECTS : liste d'ID ou de numéros de projet autorisés, séparés par une virgule. Si un projet ne figure pas dans cette liste, vous ne pouvez pas créer de points de terminaison Private Service Connect dans le projet pour vous connecter à l'instance.

  • VPC_PSC_NETWORK_PATH: chemin d'accès au réseau VPC à partir duquel le point de terminaison Private Service Connect est créé. Exemple :
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: projet dans lequel le point de terminaison Private Service Connect est créé. Si le réseau VPC n'est pas un VPC partagé, il ne peut s'agir que du projet hôte du réseau. S'il s'agit d'un VPC partagé, il peut s'agir du projet hôte ou du projet de service.

Pour savoir comment vous connecter à une instance pour laquelle Private Service Connect est activé, consultez Se connecter à une instance Cloud SQL.

REST

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID ou numéro de projet du projet Google Cloud contenant l'instance.
  • INSTANCE_NAME : nom de l'instance.
  • ALLOWED_PROJECTS : liste d'ID ou de numéros de projet autorisés, séparés par une virgule. Ces projets remplacent les projets déjà configurés pour utiliser Private Service Connect. Si un projet ne figure pas dans cette liste, vous ne pouvez pas créer de points de terminaison Private Service Connect dans le projet pour vous connecter à l'instance.
  • VPC_PSC_NETWORK_PATH: chemin d'accès au réseau VPC à partir duquel le point de terminaison Private Service Connect est créé. Exemple :
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: projet dans lequel le point de terminaison Private Service Connect est créé. Si le réseau VPC n'est pas un VPC partagé, il ne peut s'agir que du projet hôte du réseau. S'il s'agit d'un VPC partagé, il peut s'agir du projet hôte ou du projet de service.

Méthode HTTP et URL :

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

Corps JSON de la requête :

{
  "kind": "sql#instance",
  "name": "INSTANCE_NAME",
  "project": "PROJECT_ID",
  "settings": {
    "ipConfiguration": {
      "pscConfig": {
        "pscAutoConnections": [
          {
            "consumerProject":"SERVICE_PROJECT",
            "consumerNetwork":"projects/SERVICE_PROJECT/global/networks/VPC_PSC_NETWORK_PATH"
          }
        ],
        "pscEnabled": "true",
        "allowedConsumerProjects": [ALLOWED_PROJECTS]
      }
    },
    "kind": "sql#settings"
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME",
  "status": "RUNNING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "2023-06-14T18:48:35.499Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Pour savoir comment vous connecter à une instance pour laquelle Private Service Connect est activé, consultez Se connecter à une instance Cloud SQL.