Mengelola pengguna dengan autentikasi database IAM

Halaman ini menjelaskan cara menambahkan dan mengelola pengguna, akun layanan, dan grup ke instance Cloud SQL yang menggunakan autentikasi database IAM.

Untuk mengetahui informasi selengkapnya tentang integrasi IAM, lihat Autentikasi IAM.

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.
  5. To initialize the gcloud CLI, run the following command:

    gcloud init
  6. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  7. Make sure that billing is enabled for your Google Cloud project.

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init
  10. Pastikan Anda memiliki peran Admin Cloud SQL di akun pengguna.

    Buka halaman IAM

  11. Aktifkan autentikasi database IAM pada instance Cloud SQL Anda.
  12. Tetapkan peran IAM cloudsql.instanceUser yang diperlukan ke akun utama IAM seperti pengguna IAM, akun layanan, atau grup untuk login ke instance Cloud SQL.
    • Jika Anda menambahkan pengguna atau akun layanan individual ke instance Cloud SQL, Anda harus menetapkan peran IAM secara terpisah kepada setiap pengguna dan akun layanan.
    • Jika menambahkan grup, Anda harus menetapkan peran IAM ke grup karena anggota grup akan otomatis mewarisi izin IAM yang terkait dengan peran IAM. Untuk informasi selengkapnya tentang cara membuat grup di Cloud Identity, lihat Membuat dan mengelola grup Google di konsol Google Cloud.
    • Anda dapat memberikan peran tersebut di project yang berisi instance Cloud SQL menggunakan halaman IAM di konsol Google Cloud, gcloud CLI, Terraform, atau Cloud SQL Admin API. Untuk mengetahui informasi selengkapnya, lihat Menambahkan binding kebijakan IAM ke pengguna, akun layanan, atau grup.
  13. Jika Anda menggunakan akun layanan, pastikan Anda telah menambahkan akun layanan untuk setiap layanan yang memerlukan akses ke database dalam project.
  14. Untuk informasi selengkapnya tentang cara membuat akun layanan, lihat Membuat akun layanan.

Menambahkan binding kebijakan IAM ke pengguna, akun layanan, atau grup

Prosedur ini menambahkan binding kebijakan ke kebijakan IAM project tertentu, dengan ID project dan binding. Perintah binding terdiri dari anggota, peran, dan kondisi opsional.

Nama pengguna database harus berupa alamat email pengguna IAM, misalnya, example-user@example.com. Nama ini harus menggunakan huruf kecil dan tanda kutip karena berisi karakter khusus (@ dan .).

Konsol

  1. Di konsol Google Cloud, buka halaman IAM.

    Buka IAM

  2. Klik Tambahkan.
  3. Di bagian Anggota baru, masukkan alamat email. Anda dapat menambahkan pengguna individu, akun layanan, atau grup sebagai anggota, tetapi setiap project harus memiliki setidaknya satu akun utama sebagai anggota.
  4. Di Peran, buka Cloud SQL lalu pilih Pengguna Instance Cloud SQL.
  5. Opsional: Jika Anda ingin terhubung menggunakan Proxy Auth Cloud SQL atau Cloud SQL Language Connectors, pilih juga Cloud SQL Client.
  6. Klik Simpan.

gcloud

Jalankan gcloud projects add-iam-policy-binding dengan flag --role=roles/cloudsql.instanceUser.

Menambahkan binding kebijakan ke akun pengguna

Ganti kode berikut:

  • PROJECT_ID: ID untuk project yang ingin Anda beri otorisasi untuk digunakan oleh pengguna.
  • USERNAME: alamat email untuk pengguna.
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=user:USERNAME \
    --role=roles/cloudsql.instanceUser
  

Jika Anda ingin terhubung menggunakan Proxy Auth Cloud SQL atau Cloud SQL Language Connectors, jalankan gcloud projects add-iam-policy-binding lagi dengan flag --role=roles/cloudsql.client.

Menambahkan binding kebijakan ke akun layanan

Ganti kode berikut:

  • PROJECT_ID: ID untuk project yang ingin Anda beri otorisasi untuk digunakan oleh pengguna.
  • SERVICE_ACCT: alamat email untuk akun layanan.
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:SERVICE_ACCT \
    --role=roles/cloudsql.instanceUser
  

Jika Anda ingin terhubung menggunakan Proxy Auth Cloud SQL atau Cloud SQL Language Connectors, jalankan gcloud projects add-iam-policy-binding lagi dengan flag --role=roles/cloudsql.client.

Menambahkan binding kebijakan ke grup Cloud Identity

Ganti kode berikut:

  • PROJECT_ID: ID untuk project yang ingin Anda izinkan untuk digunakan oleh anggota grup.
  • GROUP_EMAIL_ADDRESS: Alamat email untuk grup. Misalnya, example-group@example.com.
  gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=group:GROUP_EMAIL_ADDRESS \
    --role=roles/cloudsql.instanceUser
   

Semua anggota grup yang ditentukan akan diberi peran Cloud SQL Instance User dan dapat login ke instance dalam project ini.

Jika Anda ingin terhubung menggunakan Proxy Auth Cloud SQL atau Cloud SQL Language Connectors, jalankan gcloud projects add-iam-policy-binding lagi dengan flag --role=roles/cloudsql.client.

Terraform

Untuk menambahkan binding kebijakan yang diperlukan ke akun pengguna dan layanan IAM, gunakan resource Terraform.

data "google_project" "project" {
}

resource "google_project_iam_binding" "cloud_sql_user" {
  project = data.google_project.project.project_id
  role    = "roles/cloudsql.instanceUser"
  members = [
    "user:test-user@example.com",
    "serviceAccount:${google_service_account.default.email}"
  ]
}

resource "google_project_iam_binding" "cloud_sql_client" {
  project = data.google_project.project.project_id
  role    = "roles/cloudsql.client"
  members = [
    "user:test-user@example.com",
    "serviceAccount:${google_service_account.default.email}"
  ]
}

Menerapkan perubahan

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.

Menghapus perubahan

Untuk menghapus perubahan Anda, lakukan langkah-langkah berikut:

  1. Untuk menonaktifkan perlindungan penghapusan, di file konfigurasi Terraform Anda, tetapkan argumen deletion_protection ke false.
    deletion_protection =  "false"
  2. Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan yes pada prompt:
    terraform apply
  1. Hapus resource yang sebelumnya diterapkan dengan konfigurasi Terraform Anda dengan menjalankan perintah berikut dan memasukkan yes pada prompt:

    terraform destroy

Terraform

Untuk menambahkan binding kebijakan yang diperlukan ke akun pengguna dan layanan IAM, gunakan resource Terraform.

data "google_project" "project" {
}

resource "google_project_iam_binding" "cloud_sql_user" {
  project = data.google_project.project.project_id
  role    = "roles/cloudsql.instanceUser"
  members = [
    "group:example-group@example.com"
  ]
}

Menerapkan perubahan

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.

Menghapus perubahan

Untuk menghapus perubahan Anda, lakukan langkah-langkah berikut:

  1. Untuk menonaktifkan perlindungan penghapusan, di file konfigurasi Terraform Anda, tetapkan argumen deletion_protection ke false.
    deletion_protection =  "false"
  2. Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan yes pada prompt:
    terraform apply
  1. Hapus resource yang sebelumnya diterapkan dengan konfigurasi Terraform Anda dengan menjalankan perintah berikut dan memasukkan yes pada prompt:

    terraform destroy

REST

Berikan peran cloudsql.instanceUser dan cloudsql.client ke kedua jenis akun dengan mengedit kebijakan binding JSON atau YAML yang ditampilkan oleh perintah get-iam-policy. Perlu diperhatikan bahwa perubahan kebijakan ini tidak akan diterapkan hingga Anda menetapkan kebijakan yang diperbarui.

    {
      "role": "roles/cloudsql.instanceUser",
      "members": [
                   "user:example-user@example.com"
                   "serviceAccount:service1@sql."
                   "group:example-group@example.com"
      ]
    }
    {
      "role": "roles/cloudsql.client",
      "members": [
                   "user:example-user@example.com"
                   "serviceAccount:service1@sql."
      ]
    }

Menambahkan akun pengguna atau akun layanan IAM individual ke instance Cloud SQL

Anda harus membuat akun pengguna baru untuk setiap pengguna IAM atau akun layanan yang Anda tambahkan ke instance Cloud SQL agar dapat mengakses database. Jika menambahkan grup IAM, Anda tidak perlu membuat akun pengguna untuk setiap anggota grup tersebut.

Nama pengguna database harus berupa alamat email pengguna IAM dan semua huruf kecil. Misalnya, example-user@example.com.

Saat menggunakan perintah REST, nama pengguna harus menggunakan tanda kutip karena berisi karakter khusus (@ dan .). Akun layanan menggunakan format service-account-name@project-id..

Untuk menambahkan akun pengguna atau akun layanan IAM individual, Anda dapat menambahkan akun pengguna baru dan memilih IAM sebagai metode autentikasi:

Konsol

  1. Di konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Untuk membuka halaman Ringkasan instance, klik nama instance.
  3. Pilih Pengguna dari menu navigasi SQL.
  4. Klik Tambahkan akun pengguna. Tab Tambahkan akun pengguna ke instance instance_name akan terbuka.
  5. Klik tombol pilihan Cloud IAM.
  6. Tambahkan alamat email untuk akun pengguna atau akun layanan yang ingin Anda tambahkan di kolom Principal.
  7. Klik Tambahkan. Pengguna atau akun layanan kini berada dalam daftar akun pengguna.
  8. Jika pengguna tidak memiliki peran IAM cloudsql.instanceUser yang ditetapkan setelah pembuatan akun pengguna, ikon segitiga akan muncul di samping nama pengguna.

    Untuk memberikan izin login kepada pengguna, klik ikon, lalu pilih Tambahkan peran IAM. Jika ikon tidak lagi muncul, akun pengguna akan diberi peran IAM yang memberikan izin login.

gcloud

Buat akun pengguna

Gunakan email, seperti example-user@example.com, untuk mengidentifikasi pengguna.

Ganti kode berikut:

  • USERNAME: alamat email untuk pengguna.
  • INSTANCE_NAME: nama instance yang ingin Anda izinkan untuk diakses pengguna.
gcloud sql users create USERNAME \
--instance=INSTANCE_NAME \
--type=cloud_iam_user

Membuat akun layanan

Ganti kode berikut:

  • SERVICE_ACCT: alamat email akun layanan.
  • INSTANCE_NAME: nama instance yang ingin Anda izinkan untuk diakses akun layanan.
gcloud sql users create SERVICE_ACCT \
--instance=INSTANCE_NAME \
--type=cloud_iam_service_account

Terraform

Untuk menambahkan akun pengguna dan layanan IAM di instance dengan autentikasi database IAM yang diaktifkan, gunakan resource Terraform.

resource "google_sql_database_instance" "default" {
  name             = "postgres-db-auth-instance-name-test"
  region           = "us-west4"
  database_version = "POSTGRES_14"
  settings {
    tier = "db-custom-2-7680"
    database_flags {
      name  = "cloudsql.iam_authentication"
      value = "on"
    }
  }
  # 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
}

# Specify the email address of the IAM user to add to the instance
# This resource does not create a new IAM user account; this account must
# already exist

resource "google_sql_user" "iam_user" {
  name     = "test-user@example.com"
  instance = google_sql_database_instance.default.name
  type     = "CLOUD_IAM_USER"
}

# Specify the email address of the IAM service account to add to the instance
# This resource does not create a new IAM service account; this service account
# must already exist

# Create a new IAM service account

resource "google_service_account" "default" {
  account_id   = "cloud-sql-postgres-sa"
  display_name = "Cloud SQL for Postgres Service Account"
}

resource "google_sql_user" "iam_service_account_user" {
  # Note: for PostgreSQL only, Google Cloud requires that you omit the
  # ".gserviceaccount.com" suffix
  # from the service account email due to length limits on database usernames.
  name     = trimsuffix(google_service_account.default.email, ".gserviceaccount.com")
  instance = google_sql_database_instance.default.name
  type     = "CLOUD_IAM_SERVICE_ACCOUNT"
}

Menerapkan perubahan

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.

Menghapus perubahan

Untuk menghapus perubahan Anda, lakukan langkah-langkah berikut:

  1. Untuk menonaktifkan perlindungan penghapusan, di file konfigurasi Terraform Anda, tetapkan argumen deletion_protection ke false.
    deletion_protection =  "false"
  2. Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan yes pada prompt:
    terraform apply
  1. Hapus resource yang sebelumnya diterapkan dengan konfigurasi Terraform Anda dengan menjalankan perintah berikut dan memasukkan yes pada prompt:

    terraform destroy

REST v1

Buat akun pengguna

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: the project ID
  • INSTANCE_ID: ID instance untuk instance tempat Anda menambahkan pengguna
  • USERNAME: alamat email untuk pengguna

Metode HTTP dan URL:

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

Meminta isi JSON:

{
  "name": "USERNAME",
  "type": "CLOUD_IAM_USER"
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan menerima respons JSON yang mirip seperti berikut:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:44:16.656Z",
  "startTime": "2020-02-07T22:44:16.686Z",
  "endTime": "2020-02-07T22:44:20.437Z",
  "operationType": "CREATE_USER",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Membuat akun layanan

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • SERVICE_ACCT: email akun layanan
  • PROJECT_ID: the project ID
  • INSTANCE_ID: ID instance untuk instance tempat Anda menambahkan akun layanan

Metode HTTP dan URL:

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

Meminta isi JSON:

{
    "name": "SERVICE_ACCT",
    "type": "CLOUD_IAM_SERVICE_ACCOUNT"
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

{
"kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-11-20T04:08:00.211Z",
  "startTime": "2020-11-20T04:08:00.240Z",
  "endTime": "2020-11-20T04:08:02.003Z",
  "operationType": "CREATE_USER",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

Buat akun pengguna

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: the project ID
  • INSTANCE_ID: ID instance untuk instance tempat Anda menambahkan pengguna
  • USERNAME: alamat email untuk pengguna

Metode HTTP dan URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users

Meminta isi JSON:

{
  "name": "USERNAME",
  "type": "CLOUD_IAM_USER"
  }

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan menerima respons JSON yang mirip seperti berikut:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:44:16.656Z",
  "startTime": "2020-02-07T22:44:16.686Z",
  "endTime": "2020-02-07T22:44:20.437Z",
  "operationType": "CREATE_USER",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Membuat akun layanan

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • SERVICE_ACCT: email akun layanan
  • PROJECT_ID: the project ID
  • INSTANCE_ID: ID instance untuk instance tempat Anda menambahkan akun layanan

Metode HTTP dan URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users

Meminta isi JSON:

{
    "name": "SERVICE_ACCT",
    "type": "CLOUD_IAM_SERVICE_ACCOUNT"
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

{
"kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-11-20T04:08:00.211Z",
  "startTime": "2020-11-20T04:08:00.240Z",
  "endTime": "2020-11-20T04:08:02.003Z",
  "operationType": "CREATE_USER",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Menambahkan grup IAM ke instance Cloud SQL

Untuk menggunakan autentikasi grup IAM dan menambahkan grup IAM ke instance Cloud SQL, gunakan salah satu prosedur di bagian ini. Setelah menambahkan grup IAM, Anda tidak perlu menambahkan setiap anggota grup ke instance. Untuk informasi selengkapnya, lihat Menambahkan anggota grup ke instance Cloud SQL secara otomatis.

Konsol

  1. Di konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Untuk membuka halaman Ringkasan instance, klik nama instance.
  3. Pilih Pengguna dari menu navigasi SQL.
  4. Klik Tambahkan akun pengguna. Tab Tambahkan akun pengguna ke instance instance_name akan terbuka.
  5. Klik tombol pilihan Cloud IAM.
  6. Tambahkan alamat email untuk grup yang ingin Anda tambahkan di kolom Principal.
  7. Klik Tambahkan. Grup kini berada dalam daftar pengguna.
  8. Jika grup tidak memiliki peran IAM cloudsql.instanceUser yang ditetapkan setelah pembuatan akun pengguna, ikon segitiga akan muncul di samping grup.

    Untuk memberikan izin login kepada anggota grup, klik ikon, lalu pilih Tambahkan peran IAM. Jika ikon tidak lagi muncul, semua anggota grup akan diberi peran yang memberikan izin login.

gcloud

Ganti kode berikut:

  • GROUP_EMAIL_ADDRESS: alamat email grup Cloud Identity yang ingin Anda tambahkan ke instance. Misalnya, example-group@example.com.
  • INSTANCE_NAME: nama instance tempat Anda ingin menambahkan grup.

Jalankan perintah berikut:

gcloud sql users create GROUP_EMAIL_ADDRESS \
  --instance=INSTANCE_NAME \
  --type=cloud_iam_group

Terraform

Untuk menambahkan akun pengguna dan layanan IAM di instance dengan autentikasi database IAM yang diaktifkan, gunakan resource Terraform.

resource "google_sql_database_instance" "default" {
  name             = "postgres-iam-group-auth-instance-name"
  region           = "us-west4"
  database_version = "POSTGRES_16"
  settings {
    tier = "db-custom-2-7680"
    database_flags {
      name  = "cloudsql.iam_authentication"
      value = "on"
    }
  }
  # 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
}

# Specify the email address of the Cloud Identity group to add to the instance
# This resource does not create a Cloud Identity group; the group must
# already exist

resource "google_sql_user" "iam_group" {
  name     = "example-group@example.com"
  instance = google_sql_database_instance.default.name
  type     = "CLOUD_IAM_GROUP"
}

data "google_project" "project" {
}

resource "google_project_iam_binding" "cloud_sql_user" {
  project = data.google_project.project.project_id
  role    = "roles/cloudsql.instanceUser"
  members = [
    "group:example-group@example.com"
  ]
}

Menerapkan perubahan

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.

Menghapus perubahan

Untuk menghapus perubahan Anda, lakukan langkah-langkah berikut:

  1. Untuk menonaktifkan perlindungan penghapusan, di file konfigurasi Terraform Anda, tetapkan argumen deletion_protection ke false.
    deletion_protection =  "false"
  2. Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan yes pada prompt:
    terraform apply
  1. Hapus resource yang sebelumnya diterapkan dengan konfigurasi Terraform Anda dengan menjalankan perintah berikut dan memasukkan yes pada prompt:

    terraform destroy

REST v1

Sebelum menggunakan salah satu data permintaan, buatlah pengganti berikut:

  • PROJECT_ID: the project ID
  • INSTANCE_ID: ID instance untuk instance tempat Anda menambahkan grup Cloud Identity
  • GROUP_EMAIL: alamat email untuk grup Cloud Identity

Metode HTTP dan URL:

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

Meminta isi JSON:

{
  "name": "GROUP_EMAIL",
  "type": "CLOUD_IAM_GROUP"
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "DONE",
  "user": "example-group@example.com",
  "insertTime": "2023-12-07T22:44:16.656Z",
  "startTime": "2023-12-07T22:44:16.686Z",
  "endTime": "2023-12-07T22:44:20.437Z",
  "operationType": "CREATE_USER",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

Sebelum menggunakan salah satu data permintaan, buatlah pengganti berikut:

  • PROJECT_ID: the project ID
  • INSTANCE_ID: ID instance untuk instance tempat Anda menambahkan grup Cloud Identity
  • GROUP_EMAIL: alamat email untuk grup Cloud Identity

Metode HTTP dan URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users

Meminta isi JSON:

{
  "name": "GROUP_EMAIL",
  "type": "CLOUD_IAM_GROUP"
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "DONE",
  "user": "example-group@example.com",
  "insertTime": "2023-12-07T22:44:16.656Z",
  "startTime": "2023-12-07T22:44:16.686Z",
  "endTime": "2023-12-07T22:44:20.437Z",
  "operationType": "CREATE_USER",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Menambahkan anggota grup ke instance Cloud SQL secara otomatis

Saat Anda menambahkan grup IAM ke instance Cloud SQL, semua anggota (pengguna dan akun layanan) grup tersebut akan mewarisi izin IAM untuk melakukan autentikasi ke instance. Anda tidak perlu menambahkan anggota grup satu per satu ke instance Cloud SQL. Setelah anggota grup login dan berhasil melakukan autentikasi ke instance untuk pertama kalinya, Cloud SQL akan membuat akun pengguna grup atau akun layanan grup untuk anggota grup tersebut. Anda dapat melihat anggota grup yang tercantum di instance setelah login pertama mereka berhasil.

Untuk mengetahui informasi selengkapnya tentang login, lihat Login menggunakan autentikasi database IAM.

Mengelola anggota grup di instance Cloud SQL

Saat Anda menambahkan grup IAM ke instance Cloud SQL, semua anggota (akun pengguna atau layanan) grup tersebut akan mewarisi izin IAM untuk melakukan autentikasi ke instance. Anda dapat mengontrol akses ke instance dengan mengelola grup di Cloud Identity. Misalnya, jika Anda ingin memberi pengguna baru akses ke instance, tambahkan pengguna tersebut sebagai anggota grup di Cloud Identity. Anda tidak perlu menghapus atau menambahkan anggota grup secara terpisah di tingkat instance Cloud SQL karena perubahan pada keanggotaan grup disebarkan dari ke instance Cloud SQL secara otomatis. Perubahan pada keanggotaan grup, seperti penambahan atau penghapusan anggota, memerlukan waktu sekitar 15 menit untuk diterapkan. Hal ini selain waktu yang diperlukan untuk perubahan IAM.

Memberikan atau mencabut hak istimewa database untuk grup IAM di PostgreSQL akan langsung berlaku. Misalnya, jika Anda mencabut akses ke tabel, anggota grup IAM tersebut akan langsung kehilangan akses ke tabel tersebut.

Pengguna atau akun layanan dapat menjadi anggota beberapa grup IAM. Jika pengguna atau akun layanan termasuk dalam beberapa grup IAM di instance, mereka memiliki semua izin IAM dan hak istimewa database yang digabungkan dari setiap grup IAM tersebut.

Saat Anda menambahkan anggota baru (pengguna atau akun layanan) ke grup IAM di Cloud Identity dan mereka berhasil login ke instance untuk pertama kalinya, mereka akan mewarisi hak istimewa database yang diberikan ke grup secara otomatis.

Memberikan hak istimewa database kepada setiap akun pengguna atau layanan IAM

Saat pengguna atau layanan IAM individual ditambahkan ke instance Cloud SQL, akun baru tersebut tidak diberi hak istimewa di database mana pun, secara default. Mereka hanya dapat menjalankan kueri terhadap objek database yang aksesnya telah diberikan ke PUBLIC.

Jika membutuhkan akses tambahan, lebih banyak hak istimewa dapat diberikan menggunakan pernyataan GRANT. Lihat halaman referensi GRANT untuk melihat daftar lengkap hak istimewa yang dapat Anda berikan kepada akun pengguna dan akun layanan. Jalankan GRANT dari command line.

Ganti kode berikut:

  • USERNAME: alamat email untuk pengguna. Anda harus memberi tanda kutip pada email karena berisi karakter khusus (@ dan .)
  • TABLE_NAME: nama tabel yang ingin Anda berikan akses kepada pengguna.
grant select on TABLE_NAME to "USERNAME";

Memberikan hak istimewa database kepada grup IAM

Saat menggunakan autentikasi grup IAM, Anda memberikan hak istimewa database ke grup IAM, bukan memberikan hak istimewa ke setiap pengguna atau akun layanan. Secara default, saat Anda menambahkan grup IAM ke instance Cloud SQL, grup tersebut tidak memiliki hak istimewa database.

Untuk memberikan hak istimewa database kepada grup IAM, gunakan pernyataan GRANT. Setelah login ke instance Cloud SQL untuk pertama kalinya, setiap anggota grup (termasuk pengguna dan akun layanan) akan mewarisi hak istimewa database yang diberikan ke grup secara otomatis.

Ganti kode berikut:

  • GROUP_NAME: alamat email grup Cloud Identity, termasuk @ dan nama domain. Misalnya, jika alamat email grup IAM adalah example-group@example.com, nama grupnya adalah example-group@example.com. Anda harus menggunakan tanda kutip pada nama grup karena string berisi karakter khusus (@ dan .)
  • TABLE_NAME: nama tabel yang ingin Anda berikan akses kepada pengguna.

Jalankan GRANT dari command line psql.

grant select on TABLE_NAME to "GROUP_NAME";

Untuk informasi selengkapnya tentang cara memberikan hak istimewa, lihat halaman referensi GRANT dalam dokumentasi PostgreSQL.

Hak istimewa database yang Anda berikan ke grup IAM akan langsung berlaku.

Melihat pengguna, akun layanan, dan grup IAM yang ditambahkan ke instance Cloud SQL

Untuk melihat pengguna, akun layanan, dan grup IAM yang telah ditambahkan ke instance Cloud SQL, jalankan perintah berikut.

Konsol

  1. Di konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Untuk membuka halaman Ringkasan instance, klik nama instance.
  3. Pilih Pengguna dari menu navigasi SQL. Halaman ini menampilkan daftar pengguna IAM, akun layanan, dan grup Cloud Identity yang telah ditambahkan ke instance Anda.
  4. Opsional: Untuk melihat daftar pengguna IAM atau akun layanan yang telah login ke instance, klik Anggota grup IAM yang diautentikasi.

gcloud

Ganti INSTANCE_NAME dengan nama instance yang memiliki grup yang ingin Anda lihat.

  gcloud sql users list --instance=INSTANCE_NAME
  

Grup memiliki jenis pengguna CLOUD_IAM_GROUP.

Output juga mencantumkan akun pengguna dan akun layanan di instance Cloud SQL Anda.

  • Akun pengguna yang merupakan anggota grup memiliki jenis CLOUD_IAM_GROUP_USER.
  • Akun layanan yang merupakan anggota grup memiliki jenis CLOUD_IAM_GROUP_SERVICE_ACCOUNT.
  • Akun pengguna yang merupakan akun pengguna autentikasi database IAM perorangan memiliki jenis CLOUD_IAM_USER.
  • Akun layanan yang merupakan akun layanan autentikasi database IAM individual memiliki jenis CLOUD_IAM_SERVICE_ACCOUNT.

REST v1

Permintaan berikut menggunakan metode users.list untuk mencantumkan pengguna yang memiliki akun di instance Cloud SQL.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: project ID
  • INSTANCE_ID: ID instance

Metode HTTP dan URL:

GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users/list

Untuk mengirim permintaan, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:


{
  "kind": "sql#usersList",
  "items": [
    {
     "kind": "sql#user",
     "etag": "--redacted--",
     "name": "example-service-acct@PROJECT_ID.iam",
     "host": "",
     "instance": "INSTANCE_ID",
     "project": "PROJECT_ID",
     "type": "CLOUD_IAM_SERVICE_ACCOUNT"
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "another-example-service-acct@PROJECT_ID.iam",
      "host": "",
      "instance": "INSTANCE_ID",
      "project": "PROJECT_ID",
      "type": "CLOUD_IAM_GROUP_SERVICE_ACCOUNT"
     },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "postgres",
      "host": "",
      "instance": "INSTANCE_ID",
      "project": "PROJECT_ID",
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "example-user@example.com",
      "host": "",
      "instance": "INSTANCE_ID",
      "project": "PROJECT_ID",
      "type": "CLOUD_IAM_USER"
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "another-example-user@example.com",
      "host": "",
      "instance": "INSTANCE_ID",
      "project": "PROJECT_ID",
      "type": "CLOUD_IAM_GROUP_USER"
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "example-group@example.com",
      "host": "",
      "instance": "INSTANCE_ID",
      "project": "PROJECT_ID",
      "type": "CLOUD_IAM_GROUP"
    }
  ]
}

Grup memiliki jenis pengguna CLOUD_IAM_GROUP.

Output juga mencantumkan akun pengguna dan akun layanan di instance Cloud SQL Anda.

  • Akun pengguna yang merupakan anggota grup memiliki jenis CLOUD_IAM_GROUP_USER.
  • Akun layanan yang merupakan anggota grup memiliki jenis CLOUD_IAM_GROUP_SERVICE_ACCOUNT.
  • Akun pengguna yang merupakan akun pengguna autentikasi database IAM perorangan memiliki jenis CLOUD_IAM_USER.
  • Akun layanan yang merupakan akun layanan autentikasi database IAM individual memiliki jenis CLOUD_IAM_SERVICE_ACCOUNT.

REST v1beta4

Permintaan berikut menggunakan metode users.list untuk mencantumkan pengguna yang memiliki akun di instance Cloud SQL.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • project-id: project ID Anda
  • instance-id: ID instance yang diinginkan

Metode HTTP dan URL:

GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users

Untuk mengirim permintaan, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

{
  "kind": "sql#usersList",
  "items": [
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "sqlserver",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "user-id-1",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      "kind": "sql#user",
      "etag": "--redacted--",
      "name": "user-id-2",
      "host": "",
      "instance": "instance-id",
      "project": "project-id",
      "sqlserverUserDetails": {
        "serverRoles": [
          "CustomerDbRootRole"
        ]
      }
    },
    {
      ...
    },
    {
      ...
    }
  ]
}

Grup memiliki jenis pengguna CLOUD_IAM_GROUP.

Output juga mencantumkan akun pengguna dan akun layanan di instance Cloud SQL Anda.

  • Akun pengguna yang merupakan anggota grup memiliki jenis CLOUD_IAM_GROUP_USER.
  • Akun layanan yang merupakan anggota grup memiliki jenis CLOUD_IAM_GROUP_SERVICE_ACCOUNT.
  • Akun pengguna yang merupakan akun pengguna autentikasi database IAM perorangan memiliki jenis CLOUD_IAM_USER.
  • Akun layanan yang merupakan akun layanan autentikasi database IAM individual memiliki jenis CLOUD_IAM_SERVICE_ACCOUNT.

Menghapus akun pengguna atau akun layanan IAM individual dari instance Cloud SQL

Untuk menghapus akun pengguna atau akun layanan individual yang bukan anggota grup dari instance Cloud SQL, Anda dapat menghapus akun tersebut menggunakan perintah berikut:

Konsol

  1. Di konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Untuk membuka halaman Ringkasan instance, klik nama instance.
  3. Pilih Pengguna dari menu navigasi SQL.
  4. Klik untuk pengguna yang ingin Anda hapus.
  5. Pilih Hapus. Tindakan ini hanya akan mencabut akses ke instance ini.

gcloud

Mencabut akses pengguna

Gunakan email, seperti example-user@example.com, untuk mengidentifikasi pengguna.

Ganti kode berikut:

  • USERNAME: alamat email.
  • INSTANCE_NAME: nama instance yang ingin Anda hapus penggunanya.
gcloud sql users delete USERNAME \
--instance=INSTANCE_NAME

Menghapus akun layanan individual

Ganti kode berikut:

  • SERVICE_ACCT: alamat email akun layanan.
  • INSTANCE_NAME: nama instance yang ingin Anda hapus penggunanya.
gcloud sql users delete SERVICE_ACCT \
--instance=INSTANCE_NAME

REST v1

Permintaan berikut menggunakan metode users.delete untuk menghapus akun pengguna yang ditentukan.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: project ID Anda
  • INSTANCE_ID: ID instance yang diinginkan
  • USERNAME: Alamat email untuk pengguna atau akun layanan

Metode HTTP dan URL:

DELETE https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME

Untuk mengirim permintaan, perluas salah satu opsi berikut:

Anda akan menerima respons JSON seperti berikut:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:38:41.217Z",
  "startTime": "2020-02-07T22:38:41.217Z",
  "endTime": "2020-02-07T22:38:44.801Z",
  "operationType": "DELETE_USER",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

Permintaan berikut menggunakan metode users.delete untuk menghapus akun pengguna yang ditentukan.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: project ID Anda
  • INSTANCE_ID: ID instance yang diinginkan
  • USERNAME: Alamat email untuk pengguna atau akun layanan

Metode HTTP dan URL:

DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME

Untuk mengirim permintaan, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2020-02-07T22:38:41.217Z",
  "startTime": "2020-02-07T22:38:41.217Z",
  "endTime": "2020-02-07T22:38:44.801Z",
  "operationType": "DELETE_USER",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Menghapus anggota grup IAM dari instance Cloud SQL

Ada dua cara untuk menghapus anggota grup IAM dari instance Cloud SQL:

  • Penghapusan otomatis
  • Penghapusan manual

Penghapusan otomatis

Untuk menghapus anggota grup IAM, Anda harus menghapus keanggotaannya dari grup IAM yang berlaku di Cloud Identity. Setelah pengguna grup IAM kehilangan keanggotaan ke semua grup yang berlaku di Cloud Identity, Cloud SQL akan otomatis menghapus pengguna grup tersebut dari instance. Satu-satunya pengecualian untuk penghapusan ini adalah pengguna grup yang memiliki objek database. Pengguna grup ini harus dihapus secara manual.

Perubahan pada keanggotaan grup, seperti penambahan atau penghapusan anggota, memerlukan waktu sekitar 15 menit untuk diterapkan. Hal ini selain waktu yang diperlukan untuk perubahan IAM.

Penghapusan manual

Jika pengguna grup IAM tidak dapat dihapus secara otomatis, Anda dapat menghapusnya secara manual. Anda tidak dapat menghapus pengguna grup IAM secara manual dari instance Cloud SQL menggunakan gcloud CLI, Konsol Google Cloud, Terraform, atau Cloud SQL Admin API. Sebagai gantinya, pengguna database dengan hak istimewa superuser dapat menghapus pengguna grup IAM secara manual dari instance Cloud SQL menggunakan pernyataan DROP USER dari klien PostgreSQL.

Setelah Anda menghapus pengguna grup IAM secara manual dari instance Cloud SQL, pastikan Anda juga menghapusnya dari grup IAM di Cloud Identity untuk mencegah login lebih lanjut ke instance Cloud SQL.

Menghapus grup IAM dari instance Cloud SQL

Anda dapat menghapus grup IAM yang ditambahkan dari instance Cloud SQL. Setelah Anda menghapus grup IAM dari instance, semua pengguna dan akun layanan yang termasuk dalam grup IAM akan kehilangan hak istimewa database apa pun yang diberikan ke grup IAM. Selain itu, kondisi berikut berlaku:

  • Pengguna dan akun layanan yang termasuk dalam grup IAM masih dapat login hingga izin IAM cloudsql.instances.login dihapus dari grup.
  • Jika penghapusan grup menyebabkan pengguna grup IAM atau akun layanan tidak termasuk dalam grup lain di instance, Cloud SQL akan menghapus pengguna grup IAM atau akun layanan dari instance.
  • Namun, jika pengguna grup IAM memiliki objek database di instance, Anda harus menetapkan ulang kepemilikan objek tersebut sebelum dapat menghapus pengguna secara manual.

Jika Anda menghapus semua grup IAM dari instance Cloud SQL, semua pengguna grup IAM dan akun layanan akan kehilangan semua hak istimewa database mereka. Selain itu, kondisi berikut berlaku:

  • Semua pengguna grup IAM dan akun layanan tidak dapat login ke instance.
  • Cloud SQL juga menghapus semua pengguna grup IAM dan akun layanan dari instance secara otomatis.
  • Namun, jika pengguna grup IAM memiliki objek database di instance, Anda harus menetapkan ulang kepemilikan objek tersebut sebelum dapat menghapus pengguna secara manual.

Konsol

  1. Di konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Untuk membuka halaman Ringkasan instance, klik nama instance.
  3. Pilih Pengguna dari menu navigasi SQL.
  4. Klik untuk grup yang ingin Anda hapus.
  5. Pilih Hapus. Tindakan ini hanya akan mencabut akses ke instance ini.

gcloud

Untuk menghapus grup Cloud Identity dari instance, gunakan perintah gcloud sql users delete.

Ganti kode berikut:

  • GROUP_NAME: bagian pertama alamat email grup Cloud Identity. Misalnya, menggunakan alamat email example-group@example.com, nama grup Cloud Identity adalah example-group.
  • INSTANCE_NAME: nama instance Cloud SQL dengan grup Cloud Identity yang ingin Anda hapus.
gcloud sql users delete GROUP_NAME \
   --instance=INSTANCE_NAME

Menghapus izin login IAM dari grup IAM

Jika Anda mencabut peran cloudsql.instanceUser dari grup IAM, semua anggota grup akan kehilangan kemampuan untuk login ke instance Cloud SQL apa pun dalam project. Pengguna atau akun layanan hanya dapat login ke instance jika mereka adalah anggota grup IAM lain yang masih memiliki izin login.

Untuk mencabut peran dari grup Cloud Identity, lihat Mencabut satu peran.

Menghapus pengguna dari grup IAM

Anggota grup IAM seperti pengguna atau akun layanan dapat dihapus dari grup IAM di Cloud Identity.

Setelah penghapusan diterapkan melalui IAM, pengguna tidak dapat lagi login ke database kecuali jika mereka telah menerima izin login dari grup lain atau diberi hak istimewa login secara langsung. Selain itu, pengguna yang dihapus dari grup akan kehilangan hak istimewa database grup.

Jika pengguna grup IAM tidak termasuk dalam grup apa pun di instance, Cloud SQL akan otomatis menghapus pengguna dari instance. Namun, jika Cloud SQL mendeteksi bahwa pengguna grup IAM memiliki objek di instance, Cloud SQL tidak akan menghapus pengguna tersebut. Administrator harus menetapkan ulang kepemilikan objek dan menghapus pengguna secara manual.

Melihat informasi login di log audit

Anda dapat mengaktifkan log audit untuk mengambil login IAM ke database. Saat terjadi masalah saat login, Anda dapat menggunakan log audit untuk mendiagnosis masalah tersebut.

Setelah dikonfigurasi, Anda dapat melihat log audit Akses Data dari login yang berhasil menggunakan Logs Explorer.

Untuk autentikasi grup IAM, log audit menampilkan aktivitas dan login untuk setiap akun pengguna dan layanan.

Misalnya, sebuah log mungkin memiliki informasi yang mirip dengan yang berikut ini:

{
 insertId: "..."
 logName: "projects/.../logs/cloudaudit.googleapis.com%2Fdata_access"
 protoPayload: {
  @type: "type.googleapis.com/google.cloud.audit.AuditLog"
  authenticationInfo: {
   principalEmail: "..."
  }
  authorizationInfo: [
   0: {
    granted: true
    permission: "cloudsql.instances.login"
    resource: "instances/..."
    resourceAttributes: {
    }
   }
  ]
  methodName: "cloudsql.instances.login"
  request: {
   @type: "type.googleapis.com/google.cloud.sql.authorization.v1.InstancesLoginRequest"
   clientIpAddress: "..."
   database: "..."
   databaseSessionId: ...
   instance: "projects/.../locations/us-central1/instances/..."
   user: "..."
  }
  requestMetadata: {
   callerIp: "..."
   destinationAttributes: {
   }
   requestAttributes: {
    auth: {
    }
    time: "..."
   }
  }
  resourceName: "instances/..."
  serviceName: "cloudsql.googleapis.com"
  status: {
  }
 }
 receiveTimestamp: "..."
 resource: {
  labels: {
   database_id: "...:..."
   project_id: "..."
   region: "us-central"
  }
  type: "cloudsql_database"
 }
 severity: "INFO"
 timestamp: "..."
}

Memecahkan masalah kegagalan login

Jika upaya login gagal, PostgreSQL akan menampilkan pesan error minimal demi alasan keamanan. Contoh:

PGPASSWORD=not-a-password psql --host=... --username=... --dbname=...
psql: error: could not connect to server: FATAL:  Cloud SQL IAM user authentication failed for user "..."
FATAL:  pg_hba.conf rejects connection for host "...", user "...", database "...", SSL off

Anda dapat meninjau log error PostgreSQL untuk mengetahui detail selengkapnya tentang error tersebut. Untuk mengetahui informasi lebih lanjut, lihat Melihat Log.

Misalnya, untuk error sebelumnya, entri log berikut menjelaskan tindakan yang dapat Anda lakukan untuk menyelesaikan masalah.

F ... [152172]: [1-1] db=...,user=... FATAL:  Cloud SQL IAM user authentication failed for user "..."
I ... [152172]: [2-1] db=...,user=... DETAIL:  Request is missing required authentication credential. Expected OAuth 2 access token, log in cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.

Periksa pesan error yang Anda terima. Jika pesan tersebut tidak menunjukkan bahwa Anda menggunakan "Autentikasi pengguna IAM Cloud SQL" atau "Autentikasi akun layanan IAM Cloud SQL", pastikan bahwa jenis pengguna database yang digunakan untuk login adalahCLOUD_IAM_USER atau CLOUD_IAM_SERVICE_ACCOUNT. Anda dapat menggunakan Konsol Google Cloud atau perintah gcloud sql users list untuk memeriksa hal ini. Untuk pengguna IAM, pastikan nama pengguna database adalah email pengguna IAM.

Jika Anda menggunakan autentikasi database IAM, periksa detail pesan error. Anda dapat menemukan pesan error di log error database. Jika token akses tersebut menunjukkan bahwa token akses (OAuth 2.0) yang Anda kirim sebagai sandi tidak valid, Anda dapat menggunakan perintah gcloud auth application-default print-access-token gcloud untuk menemukan detail token, seperti berikut:

curl -H "Content-Type: application/x-www-form-urlencoded" \
-d "access_token=$(gcloud auth application-default print-access-token)" \
https://www.googleapis.com/oauth2/v1/tokeninfo

Pastikan token ditujukan untuk akun pengguna atau akun layanan IAM yang dimaksud dan belum habis masa berlakunya.

Jika detailnya menunjukkan kurangnya izin, pastikan bahwa akun pengguna atau akun layanan IAM diberi izin cloudsql.instances.login menggunakan peran Cloud SQL Instance User atau peran khusus yang telah ditetapkan dalam kebijakan IAM dari project instance Anda. Gunakan Pemecah Masalah Kebijakan IAM untuk mendapatkan bantuan lainnya.

Jika login gagal karena autentikasi database IAM tidak tersedia, pengguna dapat login menggunakan pengguna dan sandi PostgreSQL default. Metode login ini tetap memberi pengguna akses ke seluruh database. Verifikasi bahwa koneksi adalah koneksi yang aman.

Memecahkan masalah akun pengguna yang menggunakan autentikasi grup IAM

Bagian ini mencantumkan skenario pemecahan masalah untuk autentikasi grup IAM.

Gagal menambahkan grup ke database

Saat mencoba menambahkan grup ke instance, Anda akan menerima error berikut:

(gcloud.sql.users.create) HTTPError 400: Invalid request: Provided CLOUD_IAM_GROUP: EMAIL, does not exist.

Pastikan alamat email yang Anda berikan adalah grup yang valid.

Jika grup belum ada, buat grup. Untuk informasi selengkapnya tentang cara membuat grup, lihat Membuat dan mengelola grup Google di konsol Google Cloud.

Jika Anda menerima error berikut:

(gcloud.sql.users.create) HTTPError 400: Invalid request: IAM Group Authentication is disabled.

Kemudian, sebelum Anda dapat menggunakan autentikasi grup IAM, instance Cloud SQL Anda memerlukan update pemeliharaan berikut:

R20240514.00_04 atau yang lebih baru

Anda dapat menerapkan update pemeliharaan ke instance menggunakan pemeliharaan mandiri. Untuk mengetahui informasi selengkapnya, lihat Pemeliharaan mandiri.

Akun pengguna atau layanan IAM yang ada tidak mewarisi hak istimewa database yang diberikan ke grup IAM-nya

Jika akun pengguna atau akun layanan IAM yang ada tidak mewarisi hak istimewa database yang benar dari grupnya, selesaikan langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman IAM.

    Buka IAM

    Pastikan akun tersebut adalah anggota grup yang ditambahkan ke instance Cloud SQL.

  2. Cantumkan pengguna dan akun layanan di instance.

    gcloud sql users list --instance=INSTANCE_NAME

    Dalam output, periksa apakah akun pengguna atau layanan tercantum sebagai CLOUD_IAM_USER atau CLOUD_IAM_SERVICE_ACCOUNT.

  3. Jika akun pengguna atau akun layanan tercantum sebagai CLOUD_IAM_USER atau CLOUD_IAM_SERVICE_ACCOUNT, hapus akun tersebut dari instance. Akun yang Anda hapus adalah akun IAM individual yang tidak mewarisi hak istimewa database grup.

  4. Login lagi ke instance dengan akun pengguna atau layanan.

    Login lagi ke instance akan membuat ulang akun dengan jenis akun CLOUD_IAM_GROUP_USER atau CLOUD_IAM_GROUP_SERVICE_ACCOUNT yang benar.

Langkah selanjutnya