Autentikasi Workforce Identity Federation

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:

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:

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

  1. Di konsol Google Cloud , buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Untuk membuka halaman Ringkasan instance, klik nama instance.
  3. Klik Edit.
  4. Luaskan bagian Customize your instance.
  5. Luaskan bagian Connections.
  6. Di bagian Security, centang kotak Enable Cloud SQL IAM authentication.
  7. 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

  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 Add user account. Panel Tambahkan akun pengguna ke instance INSTANCE_NAME akan terbuka.
  5. Pilih Workforce Identity Federation.
  6. Di kolom Workforce user, masukkan ID pengguna untuk pengguna yang ingin Anda tambahkan.
  7. 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

  1. Di konsol Google Cloud , buka halaman Service accounts.

    Buka IAM

  2. Klik Grant Access.
  3. 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_ID

    • Untuk memberikan akses ke seluruh pool, masukkan workforce pool sebagai principalSet:

      principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*

  4. Dalam daftar Role, pilih Cloud SQL > Cloud SQL Instance User.
  5. 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.
  6. 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_ID ID 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.

  1. Untuk melakukan autentikasi menggunakan Workforce Identity Federation, gunakan perintah gcloud auth login dengan flag --cred-file:

    gcloud auth login --cred-file=CONFIGURATION_FILE
    

    Ganti CONFIGURATION_FILE dengan jalur ke file konfigurasi yang dibuat untuk penyedia workforce identity Anda.

  2. 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:

  3. INSTANCE_IP: alamat IP instance Cloud SQL Anda.

  4. USER_ID: ID pengguna dari pengguna workforce—misalnya, cruz@example.com.

  5. 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.instanceUser ke 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