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. Enable the Cloud Key Management Service API.

    Enable the 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.
  15. Jika menggunakan autentikasi grup IAM, pastikan Anda telah membuat grup Cloud Identity yang memerlukan akses ke database di project Anda.

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 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             = "mysql-db-auth-instance-name-test"
  region           = "us-west4"
  database_version = "MYSQL_8_0"
  settings {
    tier = "db-f1-micro"
    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"
}

# Create a new IAM service account

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

# Specify the email address of the IAM service account to add to the instance

resource "google_sql_user" "iam_service_account_user" {
  name     = google_service_account.default.email
  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: Project ID 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: Project ID 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 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 ke instance database

Guna mengonfigurasi autentikasi grup IAM untuk instance Anda, lakukan hal berikut:

  1. Jika belum membuat grup Cloud Identity, buatlah grup baru di project tempat Anda mengelola instance Cloud SQL. Untuk mengetahui informasi selengkapnya, lihat Ringkasan Cloud Identity.

  2. Jalankan perintah berikut untuk menambahkan grup ke instance Cloud SQL Anda.

    Konsol

    Penambahan grup ke instance tidak tersedia melalui Konsol Google Cloud selama pratinjau.

    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
       

    REST v1

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: ID project Anda.
    • INSTANCE_ID: ID instance untuk instance yang Anda tambahi grup Cloud Identity
    • GROUP_EMAIL: Alamat email untuk grup/li>
    • 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": "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 data permintaan mana pun, lakukan penggantian berikut:

    • PROJECT_ID: ID project Anda.
    • INSTANCE_ID: ID instance untuk instance yang Anda tambahi grup Cloud Identity
    • GROUP_EMAIL: Alamat email untuk grup Cloud Identity
    • 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": "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 pengguna atau akun layanan dalam grup ke instance database

Menambahkan grup Cloud Identity ke instance tidak secara otomatis menambahkan anggota grup sebagai pengguna ke instance tersebut. Saat anggota login ke instance untuk pertama kalinya, pengguna atau akun layanan akan dibuat pada instance tersebut.

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

Mengelola pengguna atau akun layanan dalam grup pada instance

Anda dapat mengontrol akses ke instance dengan mengelola keanggotaan grup Cloud Identity. Untuk informasi selengkapnya, lihat Ringkasan Cloud Identity.

Pengguna dapat menjadi anggota beberapa grup Cloud Identity. Jika pengguna termasuk dalam beberapa grup Cloud Identity di sebuah instance, pengguna tersebut memiliki semua izin IAM dan hak istimewa database yang digabungkan dari masing-masing grup tersebut.

Perubahan pada keanggotaan grup, seperti penambahan akun, memerlukan waktu sekitar 15 menit untuk diterapkan. Ini merupakan tambahan waktu yang diperlukan untuk perubahan IAM.

Setelah perubahan diterapkan, pengguna atau akun layanan harus logout dan login kembali agar perubahan dapat diterapkan. Namun, pemberian atau pencabutan hak istimewa database untuk grup di MySQL akan langsung diterapkan. Misalnya, jika Anda mencabut akses ke tabel, anggota grup Cloud Identity tersebut akan langsung kehilangan akses ke tabel tersebut tanpa perlu logout dan login kembali.

Saat Cloud Identity lain ditambahkan ke instance, pengguna harus logout dan login kembali untuk menerima izin dari grup baru.

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, 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.

Menambahkan binding kebijakan ke grup Cloud Identity

Ganti kode berikut:

  • PROJECT_ID: ID untuk project yang ingin Anda beri otorisasi 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 diberi peran Cloud SQL Instance User dan dapat login ke instance dalam project ini.

Autentikasi grup IAM berada dalam Pratinjau.

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"
                   "group:example-group@example.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.

Untuk memberikan akses login atau hak istimewa lainnya kepada pengguna, gunakan pernyataan GRANT. Buka halaman referensi GRANT untuk melihat daftar lengkap hak istimewa yang dapat Anda berikan kepada pengguna dan akun layanan. Jalankan GRANT dari command line mysql.

Ganti kode berikut:

  • USERNAME: Untuk akun pengguna, ini adalah alamat email pengguna IAM dengan @ dan string domain terpotong. Misalnya, jika alamat email pengguna IAM adalah test-user@example.com, nama penggunanya adalah test-user. Untuk akun layanan, ini adalah alamat email akun layanan tanpa domain @project-id.iam.gserviceaccount.com.
  • DATABASE_NAME: Nama database yang menghosting tabel.
  • TABLE_NAME: Nama tabel yang ingin Anda berikan akses kepada pengguna.
  • grant select on DATABASE_NAME.TABLE_NAME to "USERNAME";
    

    Memberikan hak istimewa database ke grup

    Saat menggunakan autentikasi grup IAM, Anda memberikan hak istimewa database ke grup Cloud Identity, bukan memberikan hak istimewa kepada pengguna perorangan. Secara default, saat Anda menambahkan grup Cloud Identity ke instance Cloud SQL, grup Cloud Identity tidak memiliki hak istimewa.

    Untuk memberikan hak istimewa database kepada pengguna dalam grup Cloud Identity, gunakan pernyataan GRANT.

    Ganti kode berikut:

    • GROUP_NAME: Bagian pertama dari alamat email grup Cloud Identity. Misalnya, menggunakan alamat email example-group@example.com, nama grup Cloud Identity adalah example-group.
    • HOSTNAME: Bagian kedua pada alamat email menunjukkan nama host grup Cloud Identity. Misalnya, menggunakan alamat email example-group@example.com, nama host-nya adalah example.com.
    • DATABASE_NAME: Nama database yang menghosting tabel.
    • TABLE_NAME: Nama tabel yang ingin Anda berikan akses kepada anggota grup Cloud Identity.

    Jalankan GRANT dari command line mysql.

    grant select on DATABASE_NAME.TABLE_NAME to "GROUP_NAME"@"HOSTNAME";
    

    Hak istimewa database yang Anda berikan ke grup Cloud Identity akan langsung diterapkan.

    Untuk informasi lebih lanjut tentang memberikan hak istimewa, lihat halaman referensi GRANT di dokumentasi MySQL.

    Melihat grup, pengguna IAM, dan akun layanan

    Untuk melihat grup Cloud Identity yang telah ditambahkan ke instance Anda, jalankan perintah berikut.

    Konsol

    Opsi melihat grup pada instance tidak tersedia melalui Konsol Google Cloud selama pratinjau.

    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 tersebut juga mencantumkan akun pengguna dan 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 dengan autentikasi database IAM individual 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 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"
    }
    

    Menghapus pengguna atau akun layanan autentikasi grup IAM

    Anda tidak dapat menggunakan gcloud CLI untuk menghapus akun pengguna atau layanan yang dibuat dengan autentikasi grup IAM. Cloud SQL membuat akun ini secara otomatis setelah pengguna atau akun layanan login untuk pertama kalinya.

    Satu-satunya cara untuk menghapus akun ini adalah menggunakan klien MySQL dengan pengguna yang memiliki hak istimewa superuser.

    Untuk membuat kueri guna menghapus akun pengguna atau layanan, lihat dokumentasi MySQL.

    Menghapus grup dari instance

    Jika Anda menghapus grup Cloud Identity dari instance, semua pengguna dan akun layanan yang termasuk dalam grup Cloud Identity akan kehilangan hak istimewa database yang diberikan ke grup Cloud Identity. Pengguna dan akun layanan yang termasuk dalam grup Cloud Identity masih dapat login hingga izin login IAM dihapus dari grup.

    Konsol

    Penghapusan grup dari instance tidak tersedia melalui Konsol Google Cloud selama pratinjau.

    gcloud

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

    Ganti kode berikut:

    • GROUP_NAME: Bagian pertama dari alamat email grup Cloud Identity. Misalnya, menggunakan alamat email example-group@example.com, nama grup Cloud Identity adalah example-group.
    • HOSTNAME: Bagian kedua alamat email menunjukkan nama host grup Cloud Identity. Misalnya, dengan menggunakan alamat email example-group@example.com, nama host-nya adalah example.com.
    • INSTANCE_NAME: Nama instance Cloud SQL dengan grup Cloud Identity yang ingin Anda hapus.
    gcloud sql users delete GROUP_NAME \
       --host=HOSTNAME \
       --instance=INSTANCE_NAME
    

    Menghapus izin login IAM dari grup

    Jika Anda mencabut peran cloudsql.instanceUser dari grup Cloud Identity, 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 merupakan anggota grup Cloud Identity lain yang masih memiliki izin login.

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

    Menghapus pengguna dari grup

    Pengguna dapat dihapus dari grup Cloud Identity.

    Setelah penghapusan diterapkan melalui IAM, pengguna mungkin masih dapat login ke database jika pengguna memiliki izin IAM yang sesuai. Namun, setelah login kembali, pengguna tidak akan lagi memiliki hak istimewa database milik grup Cloud Identity tempat mereka telah dihapus.

    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 akun layanan dan pengguna individual. Autentikasi grup IAM berada di Pratinjau.

    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

    Ketika upaya login gagal, MySQL akan menampilkan sedikit pesan error demi alasan keamanan. Contoh:

    $MYSQL_PWD=`gcloud-access-token mysql` --enable-cleartext-plugin --ssl-ca=server-ca.pem
    --ssl-cert=client-cert.pem --ssl-key=client-key.pem   --host=ip_address --user=testuser
    Access denied for user 'testuser'@'...' (using password: NO)
    

    Anda dapat meninjau log error MySQL 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. Untuk pengguna IAM, pastikan bahwa nama pengguna database adalah alamat email pengguna IAM tanpa @ dan domain. Untuk akun layanan, verifikasi bahwa akun tersebut adalah email akun layanan tanpa @project-id.iam.gserviceaccount.com.

    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 MySQL default. Metode login ini tetap memberi pengguna akses ke seluruh database. Verifikasi bahwa koneksi adalah koneksi yang diamankan.

    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 mungkin 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 Ringkasan Cloud Identity.

    Pengguna IAM atau akun layanan yang ada tidak mewarisi hak istimewa database yang diberikan ke grupnya

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

    1. Di konsol Google Cloud, buka halaman IAM.

      Buka IAM

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

    2. Buat daftar pengguna dan akun layanan pada instance.

      gcloud sql users list --instance=INSTANCE_NAME
      

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

    3. Jika 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 dari grup tersebut.

    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