Halaman ini menjelaskan cara mengonfigurasi dan menggunakan Workforce Identity Federation (juga dikenal sebagai autentikasi IAM pihak ketiga) dengan Cloud SQL. Dengan Workforce Identity Federation, Anda dapat menggunakan penyedia identitas (IdP) yang sudah ada, seperti Microsoft Active Directory atau Okta, untuk mengakses instance Cloud SQL tanpa memerlukan Akun Google .
Manfaat utama penggunaan Workforce Identity Federation meliputi:
- Mengurangi overhead: Tidak perlu memverifikasi domain atau menyinkronkan identitas ke Cloud Identity.
- Keamanan yang ditingkatkan: Pengelolaan akses database terpusat melalui IdP perusahaan yang ada.
- Kemudahan penskalaan: Cocok untuk organisasi besar dengan kebutuhan pengelolaan identitas yang kompleks.
Untuk mengetahui deskripsi mendetail tentang Workforce Identity Federation, lihat Ringkasan Workforce Identity Federation.
Cara kerjanya
Workforce Identity Federation memungkinkan pengguna melakukan autentikasi ke Google Cloud menggunakan identitas eksternal. Untuk Cloud SQL, ini berarti akun utama dari workforce pool dapat terhubung ke instance Cloud SQL untuk PostgreSQL.
Cloud SQL mendukung Workforce Identity Federation melalui jenis pengguna CLOUD_IAM_WORKFORCE_IDENTITY. Untuk memberikan akses, Cloud SQL
memvalidasi kredensial workforce dan izin IAM level project
Anda selama login.
Sebelum memulai
Sebelum mengonfigurasi autentikasi database Workforce Identity Federation, pastikan Anda memenuhi prasyarat berikut:
- Instal gcloud CLI terbaru.
- Konfigurasikan Workforce Identity Federation pool dan penyedia di organisasi Google Cloud Anda.
- Siapkan peniruan akun layanan untuk workload Anda.
- Pastikan instance Cloud SQL Anda menjalankan PostgreSQL versi 13 atau yang lebih baru.
Peran dan izin
Untuk mendapatkan izin yang Anda perlukan untuk mengonfigurasi dan menggunakan autentikasi Workforce Identity Federation, minta administrator untuk memberi Anda peran IAM berikut pada organisasi:
-
Mengelola instance:
Admin Cloud SQL (
roles/cloudsql.admin) -
Hubungkan ke instance:
Pengguna Instance Cloud SQL (
roles/cloudsql.instanceUser) -
Terhubung ke instance menggunakan Proxy Auth Cloud SQL:
Klien Cloud SQL (
roles/cloudsql.client) -
Mengelola kebijakan IAM:
Project IAM Admin (
roles/resourcemanager.projectIamAdmin)
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Mengonfigurasi autentikasi Workforce Identity Federation
Bagian berikut menjelaskan cara mengonfigurasi instance Anda untuk menggunakan autentikasi Workforce Identity Federation.
Mengaktifkan autentikasi IAM pada instance
Untuk mengaktifkan autentikasi IAM, tetapkan flag cloudsql.iam_authentication ke on.
Konsol
-
Di konsol Google Cloud , buka halaman Instance Cloud SQL.
- Untuk membuka halaman Ringkasan instance, klik nama instance.
- Klik Edit.
- Luaskan bagian Customize your instance.
- Luaskan bagian Connections.
- Di bagian Security, centang kotak Enable Cloud SQL IAM authentication.
- Klik Simpan.
gcloud
Gunakan perintah berikut untuk mengaktifkan autentikasi IAM:
gcloud sql instances patch INSTANCE_NAME \ --database-flags=cloudsql.iam_authentication=on
Ganti INSTANCE_NAME dengan nama instance.
Terraform
Tambahkan blok database_flags ke resource google_sql_database_instance Anda:
resource "google_sql_database_instance" "instance" { name = "INSTANCE_NAME" database_version = "POSTGRES_15" region = "REGION" settings { tier = "db-f1-micro" database_flags { name = "cloudsql.iam_authentication" value = "on" } } }
Ganti kode berikut:
INSTANCE_NAME: nama instance.REGION: region tempat instance berada.
REST v1
Sebelum menggunakan salah satu data permintaan, buatlah pengganti berikut:
- PROJECT_ID: the project ID
- LOCATION_ID: ID lokasi
- INSTANCE_ID: ID instance yang diinginkan
- REGION: region yang diinginkan
- DATABASE_VERSION: string enum versi database.
Contoh:
POSTGRES_12 - PASSWORD: sandi untuk pengguna root
- MACHINE_TYPE: string enum jenis (tingkat) mesin, seperti:
db-custom-[CPUS]-[MEMORY_MBS]
Metode HTTP dan URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/instances
Meminta isi JSON:
{
"name": "INSTANCE_ID",
"region": "REGION",
"databaseVersion": "DATABASE_VERSION",
"rootPassword": "PASSWORD",
"settings": {
"tier": "MACHINE_TYPE",
"backupConfiguration": {
"enabled": true
}
"databaseFlags":
[
{
"name": "cloudsql.iam_authentication",
"value": "on"
}
]
}
}
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": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-01T19:13:21.834Z",
"operationType": "CREATE",
"name": "OPERATION_ID",
"targetId": "INSTANCE_ID",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
REST v1beta4
Sebelum menggunakan salah satu data permintaan, buatlah pengganti berikut:
- PROJECT_ID: the project ID
- LOCATION_ID: ID lokasi
- INSTANCE_ID: ID instance yang diinginkan
- REGION: region yang diinginkan
- DATABASE_VERSION: string enum versi database.
Contoh:
POSTGRES_12 - PASSWORD: sandi untuk pengguna root
- MACHINE_TYPE: string enum jenis (tingkat) mesin, seperti:
db-custom-[CPUS]-[MEMORY_MBS]
Metode HTTP dan URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/locations/LOCATION_ID/instances
Meminta isi JSON:
{
"name": "INSTANCE_ID",
"region": "REGION",
"databaseVersion": "DATABASE_VERSION",
"rootPassword": "PASSWORD",
"settings": {
"tier": "MACHINE_TYPE",
"backupConfiguration": {
"enabled": true
}
"databaseFlags":
[
{
"name": "cloudsql.iam_authentication",
"value": "on"
}
]
}
}
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": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-01T19:13:21.834Z",
"operationType": "CREATE",
"name": "OPERATION_ID",
"targetId": "INSTANCE_ID",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
Menambahkan pengguna workforce identity ke instance
Tambahkan akun utama eksternal ke instance Anda menggunakan
jenis CLOUD_IAM_WORKFORCE_IDENTITY.
Pastikan ID pengguna yang Anda gunakan cocok dengan nilai yang diberikan oleh
pemetaan atribut
dari penyedia workforce identity Anda. Biasanya, ini dikonfigurasi sebagai alamat email—misalnya, cruz@example.com.
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 Add user account. Panel Tambahkan akun pengguna ke instance INSTANCE_NAME akan terbuka.
- Pilih Workforce Identity Federation.
- Di kolom Workforce user, masukkan ID pengguna untuk pengguna yang ingin Anda tambahkan.
- Klik Tambahkan.
gcloud
Jalankan perintah berikut untuk membuat pengguna:
gcloud sql users create USER_ID \ --instance=INSTANCE_NAME \ --type=CLOUD_IAM_WORKFORCE_IDENTITY
Ganti kode berikut:
USER_ID: ID pengguna untuk pengguna yang ingin Anda tambahkan—misalnya,cruz@example.com.INSTANCE_NAME: nama instance.
Terraform
Gunakan resource google_sql_user untuk menentukan pengguna workforce identity:
resource "google_sql_user" "workforce_user" { name = "USER_ID" # e.g., "cruz@example.com" instance = "INSTANCE_NAME" type = "CLOUD_IAM_WORKFORCE_IDENTITY" }
Ganti kode berikut:
USER_ID: ID pengguna untuk pengguna yang ingin Anda tambahkan—misalnya,cruz@example.com.INSTANCE_NAME: nama instance.
REST v1
Buat akun pengguna
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- PROJECT_ID: the project ID
- INSTANCE_ID: ID instance untuk instance tempat Anda menambahkan pengguna
- USERNAME: alamat email untuk pengguna
Metode HTTP dan URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users
Meminta isi JSON:
{
"name": "USERNAME",
"type": "CLOUD_IAM_WORKFORCE_IDENTITY"
}
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-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"
}
REST v1beta4
Buat akun pengguna
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- PROJECT_ID: the project ID
- INSTANCE_ID: ID instance untuk instance tempat Anda menambahkan pengguna
- USERNAME: alamat email untuk pengguna
Metode HTTP dan URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users
Meminta isi JSON:
{
"name": "USERNAME",
"type": "CLOUD_IAM_WORKFORCE_IDENTITY"
}
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-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"
}
Memberikan peran pengguna instance
Berikan peran
roles/cloudsql.instanceUser
kepada akun utama workforce identity atau seluruh pool.
Konsol
-
Di konsol Google Cloud , buka halaman Service accounts.
- Klik Grant Access.
Di kolom New principals, lakukan salah satu hal berikut:
Untuk memberikan akses ke akun utama individu, masukkan identitas tenaga kerja sebagai
principal:principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_IDUntuk memberikan akses ke seluruh pool, masukkan workforce pool sebagai
principalSet:principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*
- Dalam daftar Role, pilih Cloud SQL > Cloud SQL Instance User.
- Opsional: Jika Anda ingin terhubung menggunakan Cloud SQL Auth Proxy atau Cloud SQL Language Connectors, klik Add another role, lalu pilih Cloud SQL > Cloud SQL Client.
- Klik Simpan.
gcloud
Untuk memberikan akses kepada pengguna perorangan, gunakan perintah gcloud projects
add-iam-policy-binding:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" \ --role="roles/cloudsql.instanceUser"
Ganti kode berikut:
USER_ID: ID pengguna untuk pengguna yang ingin Anda tambahkan—misalnya,cruz@example.com.POOL_ID: ID workforce pool.PROJECT_ID: ID project yang berisi instance.
Untuk memberikan akses ke seluruh workforce pool, gunakan perintah gcloud projects
add-iam-policy-binding dengan format anggota principalSet:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*" \ --role="roles/cloudsql.instanceUser"
Terraform
Gunakan resource google_project_iam_member untuk memberikan peran
kepada akun utama workforce:
resource "google_project_iam_member" "workforce_user_iam" { project = "PROJECT_ID" role = "roles/cloudsql.instanceUser" member = "principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" }
Ganti kode berikut:
USER_ID: ID pengguna untuk pengguna yang ingin Anda tambahkan—misalnya,cruz@example.com.POOL_ID: ID workforce pool.PROJECT_ID: ID project yang berisi instance.
REST
Untuk memberikan kebijakan IAM menggunakan API, ambil kebijakan IAM project menggunakan metode getIamPolicy.
Kemudian, tambahkan binding baru ke kebijakan, dan terakhir terapkan kebijakan yang telah diperbarui menggunakan metode setIamPolicy.
Berikut adalah contoh payload binding yang akan ditambahkan ke kebijakan IAM Anda:
{ "bindings": [ { "role": "roles/cloudsql.instanceUser", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" ] } ] }
Ganti kode berikut:
USER_ID: ID pengguna untuk pengguna yang ingin Anda tambahkan—misalnya,cruz@example.com.POOL_ID: ID workforce pool.
Memberikan hak istimewa database
Anda dapat menentukan peran database yang akan diberikan saat membuat pengguna identitas tenaga kerja, atau memberikan hak istimewa database secara manual di dalam database.
Misalnya, untuk memberikan hak istimewa secara manual:
GRANT SELECT ON TABLE_NAME TO "USER_ID";
Ganti kode berikut:
TABLE_NAME: nama tabel database.USER_IDID pengguna dari pengguna database workforce identity—misalnya,cruz@example.com.
Hubungkan ke instance
Sekarang Anda dapat terhubung ke instance menggunakan gcloud CLI atau Cloud SQL Auth Proxy.
Menggunakan gcloud CLI
Anda harus melakukan autentikasi terlebih dahulu dengan identitas tenaga kerja sebelum dapat membuat token login.
Untuk melakukan autentikasi menggunakan Workforce Identity Federation, gunakan perintah
gcloud auth logindengan flag--cred-file:gcloud auth login --cred-file=CONFIGURATION_FILEGanti
CONFIGURATION_FILEdengan jalur ke file konfigurasi yang dibuat untuk penyedia workforce identity Anda.Untuk terhubung menggunakan token yang dihasilkan, jalankan perintah berikut:
bash export PGPASSWORD=$(gcloud sql generate-login-token) psql "host=INSTANCE_IP user=USER_ID \ dbname=DB_NAME sslmode=require"Ganti kode berikut:
INSTANCE_IP: alamat IP instance Cloud SQL Anda.USER_ID: ID pengguna dari pengguna workforce—misalnya,cruz@example.com.DB_NAME: nama database yang ingin Anda hubungkan.
Menggunakan Cloud SQL Auth Proxy
Mulai proxy dengan flag --auto-iam-authn:
./cloud-sql-proxy INSTANCE_CONNECTION_NAME --auto-iam-authn
Untuk mengetahui informasi selengkapnya tentang proxy, lihat Tentang Proxy Auth Cloud SQL.
Batas dan pembatasan
- ID pengguna duplikat di seluruh pool: Cloud SQL tidak dapat membedakan
antara subjek dengan ID pengguna yang sama di berbagai pool tenaga kerja atau
penyedia identitas. Jika Anda menggunakan beberapa workforce pool atau penyedia, Anda
harus menggunakan kebijakan IAM untuk memastikan bahwa Anda tidak memberikan
izin login
roles/cloudsql.instanceUserke nama subjek duplikat dari pool atau penyedia yang berbeda. Tindakan ini mencegah akses yang tidak sah dari pool atau penyedia lain dengan ID pengguna yang sama. - Kuota login: Ada kuota 12.000 login per menit untuk setiap instance, yang mencakup upaya login yang berhasil dan gagal. Jika kuota terlampaui, login tidak akan tersedia untuk sementara. Sebaiknya hindari login yang terlalu sering dan batasi login menggunakan jaringan yang diizinkan.
Langkah berikutnya
- Pelajari lebih lanjut Workforce Identity Federation.
- Pelajari cara Mengonfigurasi instance untuk autentikasi database IAM.
- Pelajari cara Mengelola pengguna dengan autentikasi database IAM.
- Pelajari cara Login menggunakan autentikasi database IAM.