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
- 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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
gcloud init
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
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.
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 akun 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: 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
-
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
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" ] } { "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
-
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" }
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
- Pelajari autentikasi database IAM lebih lanjut.
- Pelajari cara login ke database Cloud SQL.
- Pelajari cara mengonfigurasi instance untuk autentikasi database IAM.