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
- 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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Aktifkan Cloud Key Management Service API.
- Pastikan Anda memiliki peran Admin Cloud SQL di akun pengguna.
- Aktifkan autentikasi database IAM pada instance Cloud SQL Anda.
- 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.
- Pastikan Anda telah menambahkan akun layanan untuk setiap layanan yang memerlukan akses ke database dalam project.
- 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
-
Pada Konsol Google Cloud, buka halaman Instance Cloud SQL.
- Untuk membuka halaman Ringkasan instance, klik nama instance.
- Pilih Pengguna dari menu navigasi SQL.
- Klik Tambahkan akun pengguna. Tab Tambahkan akun pengguna ke instance instance_name akan terbuka.
- Klik tombol pilihan Cloud IAM.
- Tambahkan alamat email untuk pengguna atau akun layanan yang ingin Anda tambahkan di kolom Principal.
- Klik Tambahkan. Pengguna kini berada dalam daftar pengguna.
Jika pengguna tidak ditetapkan ke peran Cloud SQL Instance User, ikon 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.
Menerapkan perubahan
Untuk menerapkan konfigurasi Terraform di project Google Cloud, selesaikan langkah-langkah di bagian berikut.
Menyiapkan Cloud Shell
- Luncurkan Cloud Shell.
-
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).
-
Di Cloud Shell, buat direktori dan file baru di dalam direktori tersebut. Nama file harus memiliki
ekstensi
.tf
—misalnyamain.tf
. Dalam tutorial ini, file ini disebut sebagaimain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
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.
- Tinjau dan ubah contoh parameter untuk diterapkan pada lingkungan Anda.
- Simpan perubahan Anda.
-
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
-
Tinjau konfigurasi dan pastikan resource yang akan dibuat atau
diupdate oleh Terraform sesuai yang Anda inginkan:
terraform plan
Koreksi konfigurasi jika diperlukan.
-
Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan
yes
pada prompt:terraform apply
Tunggu hingga Terraform menampilkan pesan "Apply complete!".
- 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:
- Untuk menonaktifkan perlindungan penghapusan, di file konfigurasi Terraform Anda, tetapkan
argumen
deletion_protection
kefalse
.deletion_protection = "false"
- Terapkan konfigurasi Terraform terbaru dengan menjalankan perintah berikut dan memasukkan
yes
pada perintah:terraform apply
-
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:
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.
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
-
Di konsol Google Cloud, buka halaman IAM.
- Klik Tambahkan.
- 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.
- Di Role, buka Cloud SQL lalu pilih Cloud SQL Instance User dan Cloud SQL Client.
- Untuk pengguna individu dan akun layanan, pilih Cloud SQL Client.
- 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.
Menerapkan perubahan
Untuk menerapkan konfigurasi Terraform di project Google Cloud, selesaikan langkah-langkah di bagian berikut.
Menyiapkan Cloud Shell
- Luncurkan Cloud Shell.
-
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).
-
Di Cloud Shell, buat direktori dan file baru di dalam direktori tersebut. Nama file harus memiliki
ekstensi
.tf
—misalnyamain.tf
. Dalam tutorial ini, file ini disebut sebagaimain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
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.
- Tinjau dan ubah contoh parameter untuk diterapkan pada lingkungan Anda.
- Simpan perubahan Anda.
-
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
-
Tinjau konfigurasi dan pastikan resource yang akan dibuat atau
diupdate oleh Terraform sesuai yang Anda inginkan:
terraform plan
Koreksi konfigurasi jika diperlukan.
-
Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan
yes
pada prompt:terraform apply
Tunggu hingga Terraform menampilkan pesan "Apply complete!".
- 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:
- Untuk menonaktifkan perlindungan penghapusan, di file konfigurasi Terraform Anda, tetapkan
argumen
deletion_protection
kefalse
.deletion_protection = "false"
- Terapkan konfigurasi Terraform terbaru dengan menjalankan perintah berikut dan memasukkan
yes
pada perintah:terraform apply
-
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:
@
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
.
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 adalahexample-group
. - HOSTNAME: Bagian kedua pada alamat email menunjukkan nama host grup Cloud Identity. Misalnya, menggunakan alamat email
example-group@example.com
, nama host-nya adalahexample.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
-
Di konsol Google Cloud, buka halaman Instance Cloud SQL.
- Untuk membuka halaman Ringkasan instance, klik nama instance.
- Pilih Pengguna dari menu navigasi SQL.
- Klik untuk pengguna yang ingin Anda hapus.
- 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 adalahexample-group
. - HOSTNAME: Bagian kedua alamat email menunjukkan
nama host grup Cloud Identity. Misalnya, dengan menggunakan
alamat email
example-group@example.com
, nama host-nya adalahexample.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:
Di konsol Google Cloud, buka halaman IAM.
Pastikan bahwa akun tersebut adalah anggota grup yang ditambahkan ke instance Cloud SQL.
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
atauCLOUD_IAM_SERVICE_ACCOUNT
.Jika pengguna atau akun layanan tercantum sebagai
CLOUD_IAM_USER
atauCLOUD_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.Login lagi ke instance dengan akun pengguna atau layanan.
Login lagi ke instance akan membuat ulang akun dengan jenis akun
CLOUD_IAM_GROUP_USER
atauCLOUD_IAM_GROUP_SERVICE_ACCOUNT
yang benar.
Langkah selanjutnya
- Pelajari autentikasi database IAM lebih lanjut.
- Pelajari cara login ke database Cloud SQL.
- Pelajari cara mengonfigurasi instance untuk autentikasi database IAM.