Se connecter à une instance à l'aide de Private Service Connect

Cette page explique comment utiliser Private Service Connect pour se connecter à une instance AlloyDB pour PostgreSQL.

Vous pouvez utiliser Private Service Connect pour vous connecter à une instance AlloyDB principale ou à l'une de ses instances répliquées avec accès en lecture, ou à une instance AlloyDB secondaire à partir de plusieurs réseaux de cloud privé virtuel (VPC) appartenant à différents groupes, équipes, projets ou organisations.

Rôles requis

Vous devez accorder tous les rôles suivants à un utilisateur de votre réseau VPC pour qu'il puisse se connecter à une instance AlloyDB.

Rôle Description
compute.networkAdmin Accorde un contrôle total sur le réseau VPC qui lance une connexion à une instance AlloyDB. Si vous utilisez Private Service Connect pour vous connecter à une instance AlloyDB à partir de plusieurs réseaux VPC, chaque réseau a son propre administrateur.
dns.admin Accorde un contrôle total sur les ressources Cloud DNS, y compris les zones et enregistrements DNS.
alloydb.admin Fournit un contrôle complet sur une instance AlloyDB et contrôle l'instance tout au long de son cycle de vie.
alloydb.databaseUser (facultatif) Fournit un accès à l'instance AlloyDB. Si vous vous connectez via le client proxy d'authentification AlloyDB, vous devez disposer du rôle Client AlloyDB. Si vous vous connectez directement, vous n'avez pas besoin de rôles ni d'autorisations IAM (Identity and Access Management).
Custom AlloyDB role (facultatif) Si vous utilisez un rôle personnalisé, en plus d'accorder les rôles compute.networkAdmin et dns.admin, accordez les autorisations suivantes:
  • alloydb.clusters.create: permet d'activer Private Service Connect pour un cluster.
  • alloydb.instances.create et alloydb.instances.update: permet d'ajouter une liste de projets autorisés et de définir un URI de rattachement réseau pour une instance.

Activer Private Service Connect

Pour activer la connectivité entrante, créez un cluster AlloyDB avec Private Service Connect activé. Lorsque vous créez une instance principale, spécifiez les projets autorisés à se connecter. Pour la connectivité sortante, fournissez l'URI de l'attachement réseau.

Créer un cluster principal AlloyDB

L'exemple suivant utilise la commande gcloud alloydb clusters create avec l'option --enable-private-service-connect, qui crée un cluster AlloyDB avec Private Service Connect activé.

Le processus de création d'un cluster reste le même, à l'exception de la transmission de l'indicateur --enable-private-service-connect. Pour en savoir plus sur la création d'un cluster, consultez la section Créer un cluster et son instance principale.

Pour créer le cluster, utilisez la commande gcloud alloydb clusters create.

  gcloud alloydb clusters create CLUSTER_ID \
    --password=PASSWORD \
    --region=REGION_ID \
    --project=PROJECT_ID \
    --enable-private-service-connect

Remplacez les éléments suivants :

  • CLUSTER_ID: ID du cluster que vous créez. Il doit commencer par une lettre minuscule et peut contenir des lettres minuscules, des chiffres et des traits d'union.

  • PASSWORD: mot de passe à utiliser pour l'utilisateur postgres par défaut.

  • REGION_ID: région dans laquelle vous souhaitez placer le cluster.

  • PROJECT_ID: ID du projet dans lequel vous souhaitez placer le cluster.

Cette commande lance une opération de longue durée et renvoie un ID d'opération.

Un cluster secondaire créé pour un cluster principal avec Private Service Connect activé hérite automatiquement de la configuration Private Service Connect. Pour en savoir plus, consultez Créer un cluster secondaire.

Créer une instance AlloyDB

L'exemple suivant montre comment créer une instance principale avec une liste de projets autorisés configurés. La procédure de création d'une instance reste la même, à l'exception de la transmission de la liste des projets autorisés à l'aide de l'indicateur --allowed-psc-projects pour un cluster principal avec Private Service Connect activé.

Pour en savoir plus sur la création d'autres types d'instances, consultez les sections Créer une instance de pool de lecture et Créer une instance secondaire.

gcloud

Pour utiliser gcloud CLI, vous pouvez installer et initialiser Google Cloud CLI ou utiliser Cloud Shell.

Pour créer l'instance principale, utilisez la commande gcloud alloydb instances create.

gcloud alloydb instances create INSTANCE_ID \
    --instance-type=PRIMARY \
    --cpu-count=CPU_COUNT \
    --availability-type=AVAILABILITY \
    --region=REGION_ID \
    --cluster=CLUSTER_ID \
    --project=PROJECT_ID \
    --allowed-psc-projects=ALLOWED_PROJECT_LIST
    --psc-network-attachment-uri=NETWORK_ATTACHMENT_URI

Remplacez les éléments suivants :

  • INSTANCE_ID: ID de l'instance que vous créez. Il doit commencer par une lettre minuscule et peut contenir des lettres minuscules, des chiffres et des tirets.
  • CPU_COUNT: nombre de processeurs virtuels souhaités pour l'instance. Les valeurs valides sont les suivantes :
    • 2: 2 vCPU, 16 Go de RAM
    • 4: 4 vCPU, 32 Go de RAM
    • 8: 8 vCPU, 64 Go de RAM
    • 16: 16 vCPU, 128 Go de RAM
    • 32: 32 processeurs virtuels, 256 Go de RAM
    • 64: 64 vCPU, 512 Go de RAM
    • 96: 96 vCPU, 768 Go de RAM
    • 128: 128 vCPU, 864 Go de RAM
  • AVAILABILITY: indique si cette instance doit être hautement disponible (HA), avec des nœuds dans plusieurs zones. Les valeurs valides sont les suivantes :
    • REGIONAL: crée une instance HA avec des nœuds actifs et de secours distincts, et un basculement automatique entre eux. Il s'agit de la valeur par défaut, adaptée aux environnements de production.
    • ZONAL: crée une instance de base, ne contenant qu'un seul nœud et sans basculement automatique.
  • REGION_ID: région dans laquelle vous souhaitez placer l'instance.
  • CLUSTER_ID: ID du cluster que vous avez créé précédemment.
  • ALLOWED_PROJECT_LIST: liste des ID de projet ou numéros de projet séparés par une virgule auxquels vous souhaitez autoriser l'accès à l'instance (par exemple, my-project-1, 12345,my-project-n).
  • NETWORK_ATTACHMENT_URI: nom de ressource complet de l'URI de l'attachement réseau que vous créez. Par exemple : projects/PROJECT_ID/regions/REGION_ID/networkAttachments/NETWORK_ATTACHMENT_ID.

Terraform

Pour créer une instance dans votre cluster de bases de données, utilisez une ressource Terraform.

resource "google_alloydb_instance" "default" {
  cluster       = google_alloydb_cluster.default.name
  instance_id   = "alloydb-instance"
  instance_type = "PRIMARY"
  machine_config {
    cpu_count = 2
  }
  psc_instance_config {
  allowed_consumer_projects = ["123456789"]
  psc_interface_configs {
    network_attachment_resource = google_compute_network_attachment.default.id
  }
  }
}

resource "google_compute_network" "default" {
    name = "alloydb-network"
    auto_create_subnetworks = false
}

resource "google_compute_subnetwork" "default" {
    name = "alloydb-subnetwork"
    region = "us-central1"
    network = google_compute_network.default.id
    ip_cidr_range = "10.0.0.0/16"
}

resource "google_compute_network_attachment" "default" {
  name                  = "alloydb-network-attachment"
  region                = "us-central1"
  connection_preference = "ACCEPT_AUTOMATIC"
  subnetworks = [
    google_compute_subnetwork.default.self_link
  ]
}

data "google_project" "project" {}

Préparer Cloud Shell

Pour appliquer votre configuration Terraform dans un projet Google Cloud, préparez Cloud Shell comme suit:

  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 de fichier doit être un fichier TF, par exemple main.tf. Dans ce document, le fichier est appelé main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 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.
    git clone https://github.com/terraform-google-modules/terraform-docs-samples
  3. Dans le répertoire terraform-docs-samples, accédez au répertoire alloydb.
    cd terraform-docs-samples/alloydb
  4. Copiez l'exemple de code dans le fichier main.tf que vous venez de créer.
    cp SAMPLE_FILE
    Remplacez <var>SAMPLE_FILE</var> par le nom de l'exemple de fichier à copier (par exemple, main.tf).
  5. Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
  6. Enregistrez les modifications.
  7. Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
    terraform init
    Facultatif: Pour utiliser la dernière version du fournisseur Google, incluez l'option -upgrade:
    terraform init -upgrade

Appliquer les modifications

  1. Examinez la configuration pour vous assurer que les mises à jour Terraform 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 complete!.

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.

Configurer la connectivité entrante

Une fois que vous avez activé le PSC pour une instance AlloyDB, vous pouvez obtenir l'URL d'attachement du service et configurer un point de terminaison dans votre VPC de consommation pour vous connecter de manière sécurisée à l'instance AlloyDB.

Obtenir le rattachement de service

Après avoir créé une instance AlloyDB avec Private Service Connect activé, obtenez l'URL du rattachement de service et utilisez-la pour créer le point de terminaison Private Service Connect.

Utilisez la commande gcloud alloydb instances describe pour afficher les détails d'une instance.

gcloud alloydb instances describe INSTANCE_ID \
 --cluster=CLUSTER_ID --region=REGION_ID

Remplacez les éléments suivants :

  • INSTANCE_ID : ID de l'instance
  • CLUSTER_ID: ID du cluster.
  • REGION_ID: région dans laquelle le cluster AlloyDB est déployé.

Voici un exemple de réponse à la commande:

  "pscInstanceConfig": {
    "serviceAttachmentLink:": "https://www.googleapis.com/compute/v1/projects/my-project/regions/my-region/serviceAttachments/my-service-attachment-id"
        "allowedConsumerProjects": {
          "45678",
          "12345",
              "67890",
            },
            "pscDnsName": "11111111-1111-1111-1111-111111111111.22222222-2222-2222-2222-222222222222.alloydb-psc.goog."
          }

Le paramètre serviceAttachmentLink contient la valeur de l'URL du rattachement de service.

Créer un point de terminaison Private Service Connect

Pour créer un point de terminaison Private Service Connect, transmettez l'URL du rattachement de service avec un nom de point de terminaison unique. Pour en savoir plus sur la création d'un point de terminaison Private Service Connect, consultez Créer un point de terminaison.

Vous pouvez également réserver une adresse IP interne pour le point de terminaison Private Service Connect à l'aide de la commande gcloud compute addresses create, puis utiliser l'adresse IP réservée lorsque vous créez le point de terminaison.

Configurer la connectivité sortante

Pour activer la connectivité sortante, définissez l'URI d'association réseau lorsque vous créez ou mettez à jour une instance AlloyDB. Cet URI permet une connectivité sécurisée entre votre projet et l'instance AlloyDB lors des opérations sortantes telles que les migrations.

Créer le rattachement de réseau

Vous pouvez créer un rattachement de réseau qui peut accepter les connexions automatiquement(ACCEPT_AUTOMATIC) ou manuellement (ACCEPT_MANUAL). Pour en savoir plus sur la création d'un rattachement de réseau, consultez Créer et gérer des rattachements de réseau.

Si vous choisissez de créer un rattachement de réseau qui accepte les connexions automatiquement, vous n'avez pas besoin de définir explicitement une liste de projets acceptés. Pour accepter manuellement les connexions, vous devez ajouter le numéro de projet appartenant au service du projet dans lequel se trouve votre instance AlloyDB à la liste des projets acceptés.

Pour trouver le numéro de projet appartenant au service, exécutez la commande suivante:

gcloud alpha alloydb clusters describe CLUSTER_ID --region=REGION_ID

Voici un exemple de réponse :

pscConfig:
pscEnabled: true
serviceOwnedProjectNumber: 123456789012

Après avoir identifié le numéro de projet appartenant au service, ajoutez le projet à la liste des projets acceptés, puis créez le rattachement de réseau.

Assurez-vous que la région du rattachement réseau est la même que celle de l'instance AlloyDB. En outre, le sous-réseau utilisé pour créer l'association réseau doit appartenir aux plages d'adresses IP RFC 1918, à savoir 10.0.0.0/8, 172.16.0.0/12 et 192.168.0.0/16.

Mettre à jour une instance pour la connectivité sortante

Pour activer la connectivité sortante d'une instance AlloyDB existante avec Private Service Connect activé, transmettez le paramètre --psc-network-attachment-uri à la commande gcloud alloydb instances update.

Les instances AlloyDB créées avant le 1er mars 2025 ne peuvent pas être mises à jour pour activer les connexions sortantes. Nous vous recommandons d'utiliser l'une des options suivantes:


Désactiver la connectivité sortante

Pour désactiver la connectivité sortante d'une instance AlloyDB existante, transmettez le paramètre --clear-psc-network-attachment-uri à la commande gcloud alloydb instances update.

Se connecter à une instance AlloyDB

Vous pouvez vous connecter à une instance AlloyDB avec Private Service Connect activé à l'aide de l'une des options suivantes:

  • une adresse IP interne ;
  • un enregistrement DNS
  • Proxy d'authentification AlloyDB
  • Connecteurs de langage AlloyDB

Pour vous connecter à l'aide d'enregistrements DNS, vous devez créer un enregistrement DNS dans une zone DNS privée du réseau VPC correspondant. Une fois que vous avez créé un enregistrement DNS, vous pouvez vous connecter à une instance avec Private Service Connect activé directement à l'aide d'un enregistrement DNS, du proxy d'authentification AlloyDB ou des connecteurs de langage AlloyDB.

Configurer une zone gérée DNS et un enregistrement DNS

Pour configurer une zone gérée DNS et un enregistrement DNS dans votre réseau, procédez comme suit:

  1. Pour afficher des informations récapitulatives sur une instance AlloyDB, y compris son nom DNS, utilisez la commande gcloud alloydb instances describe:

    gcloud alloydb instances describe INSTANCE_ID \
    --cluster=CLUSTER_ID --region=REGION_ID

    Remplacez les éléments suivants :

    • INSTANCE_ID : ID de l'instance
    • CLUSTER_ID: ID du cluster.

    Dans la réponse, vérifiez que le nom DNS apparaît. Le nom DNS suit le schéma INSTANCE_UID.PROJECT_UID.REGION_NAME.alloydb-psc.goog..

  2. Pour créer une zone DNS privée, utilisez la commande gcloud dns managed-zones create. Cette zone est associée au réseau VPC utilisé pour se connecter à l'instance AlloyDB via le point de terminaison Private Service Connect.

    gcloud dns managed-zones create ZONE_NAME \
    --project=PROJECT_ID \
    --description=DESCRIPTION \
    --dns-name=DNS_NAME \
    --networks=NETWORK_NAME \
    --visibility=private

    Remplacez les éléments suivants :

    • ZONE_NAME: nom de la zone DNS.
    • PROJECT_ID: ID ou numéro de projet du Google Cloud projet contenant la zone.
    • DESCRIPTION: une description de la zone (par exemple, une zone DNS pour l'instance AlloyDB).
    • DNS_NAME: nom DNS de la zone, tel que INSTANCE_UID.PROJECT_UID.REGION_NAME.alloydb-psc.goog..
    • NETWORK_NAME : nom du réseau VPC.
  3. Après avoir créé le point de terminaison Private Service Connect, utilisez la commande gcloud dns record-sets create pour créer un enregistrement DNS dans la zone:

    gcloud dns record-sets create DNS_NAME \
    --project=PROJECT_ID \
    --type=RRSET_TYPE \
    --rrdatas=RR_DATA \
    --zone=ZONE_NAME

    Remplacez les éléments suivants :

    • DNS_NAME : le nom DNS que vous avez récupéré précédemment dans cette procédure.
    • RRSET_TYPE: type d'enregistrement de ressource du jeu d'enregistrements DNS (par exemple, A).
    • RR_DATA: adresse IP allouée au point de terminaison Private Service Connect (par exemple, 198.51.100.5). Vous pouvez également saisir plusieurs valeurs, par exemple rrdata1 rrdata2 rrdata3 (10.1.2.3 10.2.3.4 10.3.4.5).

Se connecter directement à l'aide d'un enregistrement DNS

Une fois que vous avez créé un point de terminaison Private Service Connect et un enregistrement DNS, vous pouvez vous connecter directement à l'aide de l'enregistrement DNS.

  1. Pour récupérer l'enregistrement DNS du point de terminaison Private Service Connect, utilisez la commande gcloud compute addresses describe :

    gcloud compute addresses describe DNS_RECORD \
    --project=PROJECT_ID \
    --region=REGION_NAME

    Remplacez les éléments suivants :

    • DNS_RECORD: enregistrement DNS du point de terminaison.
    • PROJECT_ID: ID ou numéro de projet du Google Cloud projet contenant le point de terminaison.
    • REGION_NAME : nom de la région du point de terminaison.
  2. Pour vous connecter à l'instance AlloyDB, utilisez l'enregistrement DNS.

    psql -U USERNAME -h DNS_RECORD

    Remplacez les éléments suivants :

    • USERNAME: nom de l'utilisateur qui se connecte à l'instance.
    • DNS_RECORD: enregistrement DNS du point de terminaison.

Se connecter à l'aide du proxy d'authentification AlloyDB

Le proxy d'authentification AlloyDB est un connecteur qui vous permet d'établir des connexions autorisées et chiffrées aux bases de données AlloyDB. Le proxy d'authentification AlloyDB fonctionne avec un client local qui s'exécute dans l'environnement local. Votre application communique avec le proxy d'authentification AlloyDB à l'aide du protocole de base de données standard de votre base de données.

Lorsque vous définissez l'indicateur --psc au démarrage du client du proxy d'authentification, le proxy d'authentification AlloyDB utilise l'enregistrement DNS que vous avez créé pour se connecter à l'instance avec Private Service Connect activé.

Assurez-vous de démarrer le client du proxy d'authentification en transmettant l'URI de l'instance que vous récupérez à l'aide de la commande gcloud alloydb instances list, puis définissez l'option --psc.

Pour en savoir plus sur la connexion à une instance à l'aide du proxy d'authentification, consultez la section Se connecter à l'aide du proxy d'authentification.

Se connecter à l'aide des connecteurs de langage AlloyDB

Les connecteurs de langage AlloyDB sont des bibliothèques qui fournissent une mTLS automatisée avec TLS 1.3 et une autorisation IAM (Identity and Access Management) lors de la connexion à une instance AlloyDB.

Une fois que le connecteur linguistique a déterminé que l'instance est compatible avec Private Service Connect, il utilise l'enregistrement DNS que vous avez créé pour se connecter à l'instance.

Java

Si vous utilisez Private Service Connect pour vous connecter à votre instance AlloyDB, incluez les éléments suivants:

config.addDataSourceProperty("alloydbIpType", "PSC");

Pour en savoir plus sur l'utilisation du point de terminaison Private Service Connect dans les connecteurs de langage Java, consultez le dépôt GitHub.

Python (pg8000)

Si vous utilisez Private Service Connect pour vous connecter à votre instance AlloyDB, incluez les éléments suivants:

  def getconn() -> pg8000.dbapi.Connection:
      conn: pg8000.dbapi.Connection = connector.connect(
          inst_uri,
          "pg8000",
          user=user,
          password=password,
          db=db,
          # use ip_type to specify PSC
          ip_type=IPTypes.PSC,
      )
      return conn

Pour en savoir plus sur l'utilisation du point de terminaison Private Service Connect dans les connecteurs de langage Python, consultez le dépôt GitHub.

Python (asyncpg)

Si vous utilisez Private Service Connect pour vous connecter à votre instance AlloyDB, incluez les éléments suivants:

  async def getconn() -> asyncpg.Connection:
    conn: asyncpg.Connection = await connector.connect(
        inst_uri,
        "asyncpg",
        user=user,
        password=password,
        db=db,
        # use ip_type to specify PSC
        ip_type=IPTypes.PSC,
    )
    return conn

Pour en savoir plus sur l'utilisation du point de terminaison Private Service Connect dans les connecteurs de langage Python, consultez le dépôt GitHub.

Go (pgx)

Si vous utilisez Private Service Connect pour vous connecter à votre instance AlloyDB, incluez les éléments suivants:

d.Dial(ctx, instURI, alloydbconn.WithPSC())

Pour en savoir plus sur l'utilisation du point de terminaison Private Service Connect dans les connecteurs de langage Go, consultez le dépôt GitHub.

Go (database/sql)

Si vous utilisez Private Service Connect pour vous connecter à votre instance AlloyDB, incluez les éléments suivants:

  cleanup, err := pgxv5.RegisterDriver(
    "alloydb",
    alloydbconn.WithDefaultDialOptions(alloydbconn.WithPSC())
)

Pour en savoir plus sur l'utilisation du point de terminaison Private Service Connect dans les connecteurs de langage Go, consultez le dépôt GitHub.

Se connecter directement via une adresse IP interne

Une fois que vous avez créé un point de terminaison Private Service Connect, vous pouvez vous connecter directement à une instance AlloyDB à l'aide de l'adresse IP que vous avez configurée.

  1. Pour récupérer l'adresse IP du point de terminaison Private Service Connect, utilisez la commande gcloud compute addresses describe :

    gcloud compute addresses describe ADDRESS_NAME \
    --project=PROJECT_ID \
    --region=REGION_NAME

    Remplacez les éléments suivants :

    • ADDRESS_NAME: nom de l'adresse IP du point de terminaison.
    • PROJECT_ID: ID ou numéro de projet du Google Cloud projet contenant le point de terminaison.
    • REGION_NAME : nom de la région du point de terminaison.
  2. Pour vous connecter à l'instance AlloyDB, utilisez l'adresse IP interne.

    psql -U USERNAME -h IP_ADDRESS"

    Remplacez les éléments suivants :

    • USERNAME: nom de l'utilisateur qui se connecte à l'instance.
    • IP_ADDRESS: adresse IP du point de terminaison.

Limites

  • Vous pouvez configurer jusqu'à 20 points de terminaison Private Service Connect qui se connectent au rattachement de service d'une instance AlloyDB sur laquelle Private Service Connect est activé.
  • Vous ne pouvez pas utiliser l'option --network lorsque vous créez un cluster avec Private Service Connect activé, car elle est associée à l'accès aux services privés.
  • Vous ne pouvez pas activer ni désactiver Private Service Connect sur une instance existante.
  • Vous ne pouvez pas configurer une instance pour laquelle Private Service Connect est activé afin d'utiliser l'accès aux services privés.