Mengonfigurasi akses layanan pribadi dan Private Service Connect

Halaman ini menjelaskan cara mengonfigurasi akses layanan pribadi dan Private Service Connect.

Dengan mengonfigurasi akses layanan pribadi, Anda dapat mengalokasikan rentang alamat IP dan membuat koneksi layanan pribadi untuk jaringan Virtual Private Cloud (VPC) di project Google Cloud Anda. Tindakan ini memungkinkan resource dalam jaringan VPC terhubung ke instance Cloud SQL Anda.

Dengan mengonfigurasi Private Service Connect, Anda dapat terhubung ke instance Cloud SQL utama atau replika bacanya dari beberapa jaringan VPC yang tergabung dalam grup, tim, project, atau organisasi yang berbeda.

Membuat instance yang mendukung akses layanan pribadi dan Private Service Connect

Dengan membuat instance Cloud SQL yang mendukung akses layanan pribadi dan Private Service Connect, Anda mendapatkan manfaat dari kedua layanan tersebut. Untuk mengetahui informasi selengkapnya, lihat Opsi koneksi untuk instance.

Dengan menggunakan Private Service Connect, Anda dapat terhubung ke instance Cloud SQL dari beberapa jaringan VPC yang tergabung dalam grup, tim, project, atau organisasi yang berbeda.

Anda dapat membuat instance Cloud SQL yang mendukung akses layanan pribadi dan Private Service Connect menggunakan gcloud CLI atau API.

Untuk membuat instance yang mendukung akses layanan pribadi dan Private Service Connect, gunakan perintah 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 \
--psc-auto-connections=network=VPC_PSC_NETWORK_PATH,project=SERVICE_PROJECT

Lakukan penggantian berikut:

  • INSTANCE_NAME: nama instance.
  • PROJECT_ID: ID atau nomor project project Google Cloud yang berisi instance.
  • REGION_NAME: nama region untuk instance.
  • ALLOWED_PROJECTS: daftar project ID atau nomor yang diizinkan, dipisahkan koma. Jika project tidak ada dalam daftar ini, Anda tidak dapat membuat endpoint Private Service Connect dalam project untuk terhubung ke instance.

  • AVAILABILITY_TYPE: mengaktifkan ketersediaan tinggi untuk instance. Untuk parameter ini, tentukan salah satu nilai berikut:
    • REGIONAL: mengaktifkan ketersediaan tinggi dan direkomendasikan untuk instance produksi. Instance akan difailover ke zona lain dalam region yang Anda pilih.
    • ZONAL: tidak menyediakan kemampuan failover. Ini adalah nilai defaultnya.

    Untuk informasi selengkapnya tentang cara menetapkan dan menghapus ketersediaan tinggi untuk instance, lihat Mengonfigurasi instance yang ada untuk ketersediaan tinggi dan Menonaktifkan ketersediaan tinggi untuk instance.

  • RANGE_NAME: untuk parameter opsional ini, tetapkan nama rentang yang dialokasikan untuk rentang IP. Nama rentang harus sesuai dengan RFC 1035 dan berisi 1 hingga 63 karakter.
  • MACHINE_TYPE: jenis mesin untuk instance.
  • DATABASE_VERSION: versi database untuk instance (misalnya, POSTGRES_13).
  • VPC_PSA_NETWORK_PATH: nama dan jalur jaringan VPC yang dihubungkan oleh instance (misalnya, "projects/PROJECT_ID/global/networks/default"). Jaringan ini digunakan untuk koneksi akses layanan pribadi dan alamat IP akses layanan pribadi untuk instance Cloud SQL.
  • VPC_PSC_NETWORK_PATH: jalur ke jaringan VPC tempat endpoint Private Service Connect perlu dibuat. Misalnya:
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: project tempat endpoint Private Service Connect dibuat. Jika jaringan VPC bukan VPC bersama, jaringan ini hanya dapat menjadi project host untuk jaringan. Jika ini adalah VPC bersama, project tersebut dapat berupa project host atau project layanan.

Untuk mempelajari cara terhubung ke instance yang mengaktifkan Private Service Connect, lihat Terhubung ke instance Cloud SQL.

Untuk menonaktifkan IP publik, gunakan parameter --no-assign-ip.

Selain itu secara opsional, gunakan parameter --enable-google-private-path untuk mengizinkan layanan Google Cloud lain seperti BigQuery untuk mengakses data di Cloud SQL dan membuat kueri terhadap data ini melalui koneksi IP pribadi. Parameter ini hanya valid jika:

  • Anda menggunakan parameter --no-assign-ip.
  • Menggunakan parameter --network untuk menentukan nama jaringan VPC yang ingin Anda gunakan untuk membuat koneksi pribadi.

Untuk membuat instance dengan akses layanan pribadi dan Private Service Connect yang diaktifkan, gunakan resource 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             = "postgres-instance"
  region           = "us-central1"
  database_version = "POSTGRES_17"

  depends_on = [google_service_networking_connection.default]

  settings {
    tier              = "db-custom-2-7680"
    availability_type = "REGIONAL"
    backup_configuration {
      enabled = true
    }
    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 # Set to "true" to prevent destruction of the resource
}

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"
  region       = "us-central1"
  address_type = "INTERNAL"
  subnetwork   = "default"      # Replace value with the name of the subnet here.
  address      = "192.168.0.42" # 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
}

Untuk menerapkan konfigurasi Terraform di project Google Cloud, selesaikan langkah-langkah di bagian berikut.

Menyiapkan Cloud Shell

  1. Luncurkan Cloud Shell.
  2. Tetapkan project Google Cloud default tempat Anda ingin menerapkan konfigurasi Terraform.

    Anda hanya perlu menjalankan perintah ini sekali per project, dan dapat dijalankan di direktori mana pun.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Variabel lingkungan akan diganti jika Anda menetapkan nilai eksplisit dalam file konfigurasi Terraform.

Menyiapkan direktori

Setiap file konfigurasi Terraform harus memiliki direktorinya sendiri (juga disebut modul root).

  1. Di Cloud Shell, buat direktori dan file baru di dalam direktori tersebut. Nama file harus memiliki ekstensi .tf—misalnya main.tf. Dalam tutorial ini, file ini disebut sebagai main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Jika mengikuti tutorial, Anda dapat menyalin kode contoh di setiap bagian atau langkah.

    Salin kode contoh ke dalam main.tf yang baru dibuat.

    Atau, salin kode dari GitHub. Tindakan ini direkomendasikan jika cuplikan Terraform adalah bagian dari solusi menyeluruh.

  3. Tinjau dan ubah contoh parameter untuk diterapkan pada lingkungan Anda.
  4. Simpan perubahan Anda.
  5. Lakukan inisialisasi Terraform. Anda hanya perlu melakukan ini sekali per direktori.
    terraform init

    Secara opsional, untuk menggunakan versi penyedia Google terbaru, sertakan opsi -upgrade:

    terraform init -upgrade

Menerapkan perubahan

  1. Tinjau konfigurasi dan pastikan resource yang akan dibuat atau diupdate oleh Terraform sesuai yang Anda inginkan:
    terraform plan

    Koreksi konfigurasi jika diperlukan.

  2. Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan yes pada prompt:
    terraform apply

    Tunggu hingga Terraform menampilkan pesan "Apply complete!".

  3. Buka project Google Cloud Anda untuk melihat hasilnya. Di Konsol Google Cloud, buka resource Anda di UI untuk memastikan bahwa Terraform telah membuat atau mengupdatenya.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: ID atau nomor project project Google Cloud yang berisi instance.
  • INSTANCE_NAME: nama instance.
  • REGION_NAME: nama region untuk instance.
  • AVAILABILITY_TYPE: mengaktifkan ketersediaan tinggi untuk instance. Untuk parameter ini, tentukan salah satu nilai berikut:
    • REGIONAL: mengaktifkan ketersediaan tinggi dan direkomendasikan untuk instance produksi. Instance akan difailover ke zona lain dalam region yang Anda pilih.
    • ZONAL: tidak menyediakan kemampuan failover. Ini adalah nilai defaultnya.

    Untuk informasi selengkapnya tentang cara menetapkan dan menghapus ketersediaan tinggi untuk instance, lihat Mengonfigurasi instance yang ada untuk ketersediaan tinggi dan Menonaktifkan ketersediaan tinggi untuk instance.

  • VPC_PSA_NETWORK_PATH: jalur jaringan VPC yang dihubungkan dengan instance (misalnya, "projects/PROJECT_ID/global/networks/default"). Jaringan ini digunakan untuk koneksi akses layanan pribadi dan alamat IP akses layanan pribadi untuk instance Cloud SQL.
  • RANGE_NAME: untuk parameter opsional ini, tetapkan nama rentang yang dialokasikan untuk rentang IP. Nama rentang harus sesuai dengan RFC 1035 dan berisi 1 hingga 63 karakter.
  • ALLOWED_PROJECTS: daftar project ID atau nomor yang diizinkan, dipisahkan koma. Jika project tidak ada dalam daftar ini, Anda tidak dapat membuat endpoint Private Service Connect dalam project untuk terhubung ke instance.

  • VPC_PSC_NETWORK_PATH: jalur ke jaringan VPC tempat endpoint Private Service Connect perlu dibuat. Misalnya:
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: project tempat endpoint Private Service Connect dibuat. Jika jaringan VPC bukan VPC bersama, jaringan ini hanya dapat menjadi project host untuk jaringan. Jika ini adalah VPC bersama, project tersebut dapat berupa project host atau project layanan.

  • MACHINE_TYPE: jenis mesin untuk instance.

Untuk mempelajari cara terhubung ke instance yang mengaktifkan Private Service Connect, lihat Terhubung ke instance Cloud SQL.

Anda menetapkan parameter ipv4Enabled ke false karena instance Anda memiliki alamat IP internal.

Jika Anda menetapkan parameter enablePrivatePathForGoogleCloudServices opsional ke true, berarti Anda mengizinkan layanan Google Cloud lain, seperti BigQuery, untuk mengakses data di Cloud SQL dan membuat kueri terhadap data ini melalui koneksi IP internal. Dengan menetapkan parameter ini ke false, layanan Google Cloud lainnya tidak dapat mengakses data di Cloud SQL melalui koneksi IP internal.

Metode HTTP dan URL:

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

Meminta isi JSON:

{
  "name": "INSTANCE_NAME",
  "project": PROJECT_ID",
  "region": "REGION_NAME",
  "databaseVersion": "POSTGRES_13",
  "kind": "sql#instance",
  "settings": {
    "availabilityType": "AVAILABILITY_TYPE",
    "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"
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances" | Select-Object -Expand Content

Anda akan melihat respons JSON seperti berikut:

{
  "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"
}

Menonaktifkan Private Service Connect untuk instance

Anda dapat menonaktifkan Private Service Connect untuk instance yang mengaktifkan akses layanan pribadi dan Private Service Connect.

Saat menonaktifkan Private Service Connect untuk instance, Anda dapat mengharapkan operasi ini memerlukan waktu 8 menit dengan waktu nonaktif sekitar 45 detik di instance Anda. Setelah operasi selesai, akses layanan pribadi dan jalur konektivitas Private Service Connect tidak lagi ada bersama di instance yang sama. Anda tidak dapat terhubung ke instance menggunakan Private Service Connect.

Anda dapat menonaktifkan Private Service Connect untuk instance menggunakan gcloud CLI atau API.

gcloudREST

Untuk menonaktifkan Private Service Connect untuk instance, gunakan perintah gcloud beta sql instances patch:

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

Lakukan penggantian berikut:

  • INSTANCE_NAME: nama instance
  • PROJECT_ID: ID atau nomor project project Google Cloud yang berisi instance

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: ID atau nomor project project Google Cloud yang berisi instance
  • INSTANCE_NAME: nama instance

Metode HTTP dan URL:

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

Meminta isi JSON:

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

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME"

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

Anda akan melihat respons JSON seperti berikut:

{
  "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"
}

Mengaktifkan Private Service Connect untuk instance

Anda dapat mengaktifkan Private Service Connect untuk instance yang telah mengaktifkan akses layanan pribadi. Anda dapat menggunakan Private Service Connect untuk terhubung ke instance Cloud SQL dari beberapa jaringan VPC.

Saat mengaktifkan Private Service Connect untuk instance, Anda dapat mengharapkan operasi ini memerlukan waktu 8 menit dengan waktu nonaktif sekitar 45 detik di instance Anda. Setelah operasi selesai, akses layanan pribadi dan jalur konektivitas Private Service Connect akan ada bersama di instance yang sama.

Anda dapat mengaktifkan Private Service Connect untuk instance menggunakan gcloud CLI atau API.

gcloudREST

Untuk mengaktifkan Private Service Connect untuk instance, gunakan perintah 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

Lakukan penggantian berikut:

  • INSTANCE_NAME: nama instance
  • PROJECT_ID: ID atau nomor project project Google Cloud yang berisi instance
  • ALLOWED_PROJECTS: daftar project ID atau nomor yang diizinkan, dipisahkan koma. Jika project tidak ada dalam daftar ini, Anda tidak dapat membuat endpoint Private Service Connect dalam project untuk terhubung ke instance.

  • VPC_PSC_NETWORK_PATH: jalur ke jaringan VPC tempat endpoint Private Service Connect dibuat. Misalnya:
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: project tempat endpoint Private Service Connect dibuat. Jika jaringan VPC bukan VPC bersama, jaringan ini hanya dapat menjadi project host untuk jaringan. Jika ini adalah VPC bersama, project tersebut dapat berupa project host atau project layanan.

Untuk mempelajari cara terhubung ke instance yang mengaktifkan Private Service Connect, lihat Terhubung ke instance Cloud SQL.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: ID atau nomor project project Google Cloud yang berisi instance.
  • INSTANCE_NAME: nama instance.
  • ALLOWED_PROJECTS: daftar project ID atau nomor yang diizinkan, dipisahkan koma. Project ini menggantikan project yang sudah dikonfigurasi untuk menggunakan Private Service Connect. Jika project tidak ada dalam daftar ini, Anda tidak dapat membuat endpoint Private Service Connect dalam project untuk terhubung ke instance.
  • VPC_PSC_NETWORK_PATH: jalur ke jaringan VPC tempat endpoint Private Service Connect dibuat. Misalnya:
    projects/my-host-project/global/networks/default.
  • SERVICE_PROJECT: project tempat endpoint Private Service Connect dibuat. Jika jaringan VPC bukan VPC bersama, jaringan ini hanya dapat menjadi project host untuk jaringan. Jika ini adalah VPC bersama, project tersebut dapat berupa project host atau project layanan.

Metode HTTP dan URL:

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

Meminta isi JSON:

{
  "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"
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME"

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

Anda akan melihat respons JSON seperti berikut:

{
  "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"
}

Untuk mempelajari cara terhubung ke instance yang mengaktifkan Private Service Connect, lihat Terhubung ke instance Cloud SQL.