Mengelola pengguna dengan autentikasi database IAM

Halaman ini menjelaskan cara menambahkan akun pengguna atau akun layanan yang menggunakan autentikasi database IAM ke database dan cara mengelola akun pengguna dan layanan tersebut. Untuk mengetahui informasi lebih lanjut mengenai integrasi IAM, lihat autentikasi IAM.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Menginstal Google Cloud CLI.
  5. Untuk initialize gcloud CLI, jalankan perintah berikut:

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

    Buka pemilih project

  7. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  8. Menginstal Google Cloud CLI.
  9. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  10. Aktifkan Cloud Key Management Service API.

    Mengaktifkan API

  11. Pastikan Anda memiliki peran Admin Cloud SQL di akun pengguna.

    Buka halaman IAM

  12. Aktifkan autentikasi database IAM pada instance Cloud SQL Anda.
  13. Pastikan Anda memberikan akses IAM kepada pengguna yang membutuhkannya untuk setiap project yang berisi database yang perlu diakses pengguna. Lihat Memberikan, mengubah, dan mencabut akses ke resource.
  14. Pastikan Anda telah menambahkan akun layanan untuk setiap layanan yang memerlukan akses ke database dalam project.

Menambahkan pengguna IAM atau akun layanan ke instance database

Anda harus membuat pengguna database baru untuk setiap pengguna IAM yang ingin Anda beri akses ke instance database. Nama pengguna database harus berupa alamat email pengguna IAM, misalnya, test-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.iam.gserviceaccount.com.

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

Konsol

  1. Pada 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 kini berada dalam daftar pengguna.
  8. Jika pengguna tidak ditetapkan ke peran Cloud SQL Instance User, ikon segitiga akan muncul di sebelah kiri nama pengguna.

    Untuk memberikan hak istimewa login kepada pengguna, klik ikon, lalu pilih Tambahkan peran IAM. Ikon tidak akan muncul lagi. Pengguna kini menjadi anggota peran tersebut.

gcloud

Membuat akun pengguna

Gunakan email, seperti test-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: Masukkan 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 pada instance yang mengaktifkan autentikasi database IAM, 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 terbaru dengan menjalankan perintah berikut dan memasukkan yes pada perintah:
    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

Membuat akun pengguna

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • project-id: ID project Anda.
  • instance-id: ID instance untuk instance tempat Anda menambahkan pengguna
  • username: Alamat email untuk pengguna.
  • operation-id: ID untuk operasi

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 Anda
  • project-id: ID project Anda.
  • instance-id: ID instance untuk instance tempat Anda menambahkan akun layanan
  • operation-id: ID untuk operasi

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

Membuat akun pengguna

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • project-id: ID project Anda.
  • instance-id: ID instance untuk instance tempat Anda menambahkan pengguna
  • username: Alamat email untuk pengguna.
  • operation-id: ID untuk operasi

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 Anda
  • project-id: ID project Anda.
  • instance-id: ID instance untuk instance tempat Anda menambahkan akun layanan
  • operation-id: ID untuk operasi

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 menerima respons JSON yang serupa seperti di bawah ini:

{
"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 binding kebijakan IAM ke pengguna atau akun layanan

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, test-user@example.com. Nama ini harus menggunakan tanda kutip karena mengandung 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 individual, akun layanan, atau grup sebagai anggota, tetapi setiap project harus memiliki setidaknya satu akun utama sebagai anggota.
  4. Di Role, buka Cloud SQL lalu pilih Cloud SQL Instance User dan Cloud SQL Client.
  5. Untuk pengguna individu dan akun layanan, pilih Cloud SQL Client.
  6. Klik Save.

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
  

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
  

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

Terraform

Untuk menambahkan binding kebijakan yang diperlukan ke akun layanan dan pengguna 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 terbaru dengan menjalankan perintah berikut dan memasukkan yes pada perintah:
    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:test-user@example.com"
                   "serviceAccount:service1@sql.iam.gserviceaccount.com"

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

Memberikan hak istimewa database kepada pengguna IAM

Saat pengguna IAM ditambahkan ke instance database, pengguna baru tersebut tidak diberi hak istimewa di database mana pun, secara default.

Saat akun pengguna atau akun layanan terhubung ke database, mereka dapat menjalankan kueri terhadap objek database yang aksesnya telah diberikan ke Publik.

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";

Menghapus akun pengguna atau akun layanan IAM dari database

Untuk menghapus akun pengguna atau akun layanan dari database, Anda dapat menghapus akun tersebut dari instance:

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 test-user@example.com, untuk mengidentifikasi pengguna.

Ganti kode berikut:

  • USERNAME: Alamat email tanpa @nama domain.
  • INSTANCE_NAME: Nama instance yang ingin Anda hapus penggunanya.
gcloud sql users delete USERNAME \
--instance=INSTANCE_NAME

Menghapus akun layanan

Ganti kode berikut:

  • SERVICE_ACCT: Masukkan 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"
}

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.

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 pengguna IAM atau akun layanan diberi izin cloudsql.instances.login menggunakan peran Cloud SQL Instance User atau peran khusus yang telah ditetapkan dalam kebijakan IAM project instance. 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 diamankan.

Langkah selanjutnya