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 Google Akun.
Manfaat utama menggunakan Workforce Identity Federation meliputi:
- Overhead yang lebih rendah: Tidak perlu memverifikasi domain atau menyinkronkan identitas ke Cloud Identity.
- Keamanan yang ditingkatkan: Pengelolaan terpusat akses database melalui IdP perusahaan yang ada.
- Kemudahan penskalaan: Cocok untuk organisasi besar dengan kebutuhan manajemen 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 dengan menggunakan identitas eksternal. Untuk Cloud SQL, hal ini berarti bahwa pokok dari kumpulan tenaga kerja 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 tenaga kerja dan izin IAM tingkat project Anda selama login.
Sebelum memulai
Sebelum mengonfigurasi autentikasi database Workforce Identity Federation, pastikan Anda memenuhi prasyarat berikut:
- Instal gcloud CLI terbaru.
- Konfigurasi kumpulan dan penyedia Workforce Identity Federation 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 diperlukan untuk mengonfigurasi dan menggunakan autentikasi Workforce Identity Federation, minta administrator Anda untuk memberi Anda peran IAM berikut di organisasi:
-
Mengelola instance:
Admin Cloud SQL (
roles/cloudsql.admin) -
Menghubungkan 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 Sesuaikan instance Anda.
- 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 identitas tenaga kerja ke instance
Tambahkan entity 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 identitas tenaga kerja 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 Pengguna tenaga kerja, masukkan ID 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
identitas tenaga kerja:
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 identitas tenaga kerja 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 perorangan, masukkan identitas tenaga kerja sebagai
principal:principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_IDUntuk memberikan akses ke seluruh kumpulan, masukkan workforce pool sebagai
principalSet:principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*
- Di daftar Peran, pilih Cloud SQL > Pengguna Instance Cloud SQL.
- Opsional: Jika Anda ingin terhubung menggunakan Proxy Auth Cloud SQL atau Cloud SQL Language Connectors, klik Tambahkan peran lain, lalu pilih Cloud SQL > Cloud SQL Client.
- Klik Simpan.
gcloud
Untuk memberikan akses kepada pengguna tertentu, 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 kumpulan tenaga kerja, 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 tenaga kerja:
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 identitas tenaga kerja —misalnya,cruz@example.com.
Hubungkan ke instance
Sekarang Anda dapat terhubung ke instance menggunakan gcloud CLI atau Proxy Auth Cloud SQL.
Menggunakan gcloud CLI
Anda harus melakukan autentikasi terlebih dahulu dengan identitas tenaga kerja Anda sebelum dapat membuat token login.
Untuk melakukan autentikasi menggunakan Workforce Identity Federation, gunakan perintah
gcloud auth logindengan tanda--cred-file:gcloud auth login --cred-file=CONFIGURATION_FILEGanti
CONFIGURATION_FILEdengan jalur ke file konfigurasi yang dibuat untuk penyedia identitas tenaga kerja Anda.Untuk terhubung menggunakan token yang dibuat, 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 untuk pengguna workforce—misalnya,cruz@example.com.DB_NAME: nama database yang ingin Anda hubungkan.
Menggunakan Proxy Auth Cloud SQL
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
subjek dengan ID pengguna yang sama di seluruh kumpulan tenaga kerja atau
penyedia identitas yang berbeda. Jika Anda menggunakan beberapa kumpulan atau penyedia tenaga kerja, Anda
harus menggunakan kebijakan IAM untuk memastikan bahwa Anda tidak memberikan
izin login
roles/cloudsql.instanceUserke nama subjek duplikat dari kumpulan atau penyedia yang berbeda. Hal ini mencegah akses yang tidak sah dari kumpulan 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.