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

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:

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 Sesuaikan instance Anda.
  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 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

  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 Pengguna tenaga kerja, masukkan ID 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 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

  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 perorangan, masukkan identitas tenaga kerja sebagai principal:

      principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID

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

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

  4. Di daftar Peran, pilih Cloud SQL > Pengguna Instance Cloud SQL.
  5. 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.
  6. 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_ID ID 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.

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

    gcloud auth login --cred-file=CONFIGURATION_FILE
    

    Ganti CONFIGURATION_FILE dengan jalur ke file konfigurasi yang dibuat untuk penyedia identitas tenaga kerja Anda.

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

  3. INSTANCE_IP: alamat IP instance Cloud SQL Anda.

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

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