Menggunakan IAM Conditions

Dengan IAM Conditions, Anda dapat menentukan dan menerapkan kontrol akses berbasis atribut bersyarat untuk resource Google Cloud, termasuk instance Cloud SQL. Informasi selengkapnya tentang IAM Conditions, lihat halaman Ringkasan IAM Conditions.

Pengantar

Di Cloud SQL, Anda dapat menerapkan akses kondisional berdasarkan atribut berikut:

  • Atribut tanggal/waktu: Digunakan untuk mengatur akses sementara (kadaluwarsa), terjadwal, atau berdurasi terbatas ke resource Cloud SQL. Misalnya, Anda dapat mengizinkan pengguna untuk mengakses instance database hingga tanggal tertentu. Anda dapat menggunakan atribut tanggal/waktu pada level hierarki resource mana pun. Informasi selengkapnya, lihat Mengonfigurasi akses sementara.
  • Atribut resource: Digunakan untuk mengonfigurasi akses bersyarat berdasarkan tag, nama resource, jenis resource, atau atribut layanan resource. Di Cloud SQL, Anda dapat menggunakan atribut instance database untuk mengonfigurasi akses kondisional. Misalnya, Anda dapat mengizinkan pengguna hanya mengakses instance dengan tag tertentu. Informasi selengkapnya, lihat Mengonfigurasi akses berbasis resource.

Kasus penggunaan mencakup:

  • Mengizinkan pengguna terhubung ke instance tertentu.

  • Mengizinkan pengguna membuat instance dengan awalan atau akhiran tertentu (misalnya, "test").

  • Membatasi akses ke operasi pencadangan untuk instance pengujian

  • Mengizinkan pengguna menghapus instance pengembangan dan pengujian, tetapi tidak menghapus instance produksi.

  • Mengizinkan pengguna untuk melakukan operasi administratif pada tanggal atau waktu tertentu.

Mengizinkan pengguna untuk terhubung ke instance tertentu

Misalkan Anda ingin mengizinkan pengguna atau akun layanan memiliki izin untuk terhubung hanya ke satu instance Cloud SQL tertentu. Anda dapat menyertakan IAM Condition dalam binding kebijakan IAM yang memberikan akun tersebut izin peran Cloud SQL.

Secara default, peran Klien Cloud SQL yang telah ditetapkan (roles/cloudsql.client), yang berisi izin cloudsql.instances.connect, mengizinkan anggotanya untuk terhubung ke semua instance Cloud SQL dalam sebuah project. Dengan memasukkan Kondisi IAM ke dalam binding kebijakan, Anda dapat memberikan izin hanya ke instance yang bernama.

Konsol

Contoh ini menunjukkan cara mengubah binding IAM yang ada untuk project guna memberikan peran Klien Cloud SQL kepada akun layanan untuk instance tertentu.

Contoh ini menggunakan variabel berikut:

  • PROJECT_ID: Project Google Cloud Anda.
  • INSTANCE_ID: Nama instance yang ingin Anda beri akses.

  1. Di Konsol Google Cloud, buka halaman IAM.

    Buka IAM

  2. Klik Tambahkan.
  3. Di kotak input Anggota Baru, masukkan email akun layanan.
  4. Klik daftar dropdown Peran dan pilih peran Klien Cloud SQL.
  5. Klik Tambahkan kondisi.
  6. Masukkan judul dan deskripsi.
  7. Pilih tab Editor Kondisi.
  8. Di bagian Pembuat Kondisi:
    • Untuk Jenis kondisi - Resource - Nama, masukkan projects/PROJECT_ID/instances/INSTANCE_ID
    • Pastikan kondisional AND dipilih.
    • Untuk Jenis kondisi - Resource - Layanan, pilih sqladmin.googleapis.com.
  9. Klik Simpan untuk menyimpan kondisi.
  10. Klik Simpan untuk menyimpan kebijakan.

gcloud

Contoh ini menunjukkan cara mengubah binding kebijakan IAM yang ada untuk project guna memberikan peran Klien Cloud SQL kepada akun layanan tertentu, tetapi hanya untuk instance tertentu.

Contoh ini menggunakan variabel berikut:

  • PROJECT_ID: Project Google Cloud Anda.
  • INSTANCE_ID: Nama instance yang ingin Anda beri akses.
  • SERVICE_ACCOUNT_EMAIL: Alamat email lengkap akun layanan yang aksesnya ingin Anda ubah.

  1. Dapatkan binding kebijakan IAM yang ada dan dapatkan output ke file bindings.json:
  2. gcloud projects get-iam-policy PROJECT_ID --format=json > bindings.json
    
  3. Tambahkan binding peran kondisional berikut ke file bindings.json:
    {
      "bindings": [
        {
          "role": "roles/cloudsql.client",
          "members": [
            "serviceAccount:SERVICE_ACCOUNT_EMAIL"
          ],
          "condition": {
            "expression": "resource.name == 'projects/PROJECT_ID/instances/INSTANCE_ID'
              && resource.service == 'sqladmin.googleapis.com'"
          }
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 3
    }
    
  4. Update kebijakan IAM dengan file bindings.json baru.
    gcloud projects set-iam-policy PROJECT_ID bindings.json
    

Terraform

Untuk mengizinkan pengguna terhubung ke instance tertentu, gunakan resource data google_iam_policy Terraform dan resource google_project_iam_policy Terraform .

data "google_iam_policy" "sql_iam_policy" {
  binding {
    role = "roles/cloudsql.client"
    members = [
      "serviceAccount:${google_project_service_identity.gcp_sa_cloud_sql.email}",
    ]
    condition {
      expression  = "resource.name == 'projects/${data.google_project.project.project_id}/instances/${google_sql_database_instance.default.name}' && resource.type == 'sqladmin.googleapis.com/Instance'"
      title       = "created"
      description = "Cloud SQL instance creation"
    }
  }
}

resource "google_project_iam_policy" "project" {
  project     = data.google_project.project.project_id
  policy_data = data.google_iam_policy.sql_iam_policy.policy_data
}

Menerapkan perubahan

Untuk menerapkan konfigurasi Terraform di project Google Cloud, selesaikan langkah-langkah di bagian berikut.

Menyiapkan Cloud Shell

  1. Luncurkan Cloud Shell.
  2. 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).

  1. Di Cloud Shell, buat direktori dan file baru di dalam direktori tersebut. Nama file harus memiliki ekstensi .tf—misalnya main.tf. Dalam tutorial ini, file ini disebut sebagai main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 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.

  3. Tinjau dan ubah contoh parameter untuk diterapkan pada lingkungan Anda.
  4. Simpan perubahan Anda.
  5. 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

  1. Tinjau konfigurasi dan pastikan resource yang akan dibuat atau diupdate oleh Terraform sesuai yang Anda inginkan:
    terraform plan

    Koreksi konfigurasi jika diperlukan.

  2. Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan yes pada prompt:
    terraform apply

    Tunggu hingga Terraform menampilkan pesan "Apply complete!".

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

  1. Untuk menonaktifkan perlindungan penghapusan, di file konfigurasi Terraform Anda, tetapkan argumen deletion_protection ke false.
    deletion_protection =  "false"
  2. Terapkan konfigurasi Terraform terbaru dengan menjalankan perintah berikut dan memasukkan yes pada perintah:
    terraform apply
  1. Hapus resource yang sebelumnya diterapkan dengan konfigurasi Terraform Anda dengan menjalankan perintah berikut dan memasukkan yes pada prompt:

    terraform destroy

Membatasi akses ke operasi pencadangan untuk instance pengujian

Misalkan topologi layanan Anda dikonfigurasi sehingga semua instance pengujian memiliki awalan test (misalnya, test-instance-1), dan semua instance produksi memiliki awalan prod (misalnya, prod-instance-1).

Anda dapat membatasi akses ke operasi pencadangan pada instance pengujian Anda untuk pengguna atau akun layanan. Membatasi akses termasuk membatasi operasi CREATE, GET, LIST, atau DELETE ke cadangan untuk instance pengujian Anda.

Konsol

  1. Di konsol Google Cloud, buka halaman IAM.

    Buka IAM

  2. Klik tab AKUN UTAMA.
  3. Temukan alamat email atau akun layanan (akun utama) pengguna yang ingin Anda batasi aksesnya.
  4. Klik ikon Edit akun utama di sebelah kanan akun utama. Tampilan ikon ini seperti pensil
  5. Di kotak dialog Izin edit, klik TAMBAH PERAN LAIN.
  6. Pada kolom Filter pada kotak dialog berikutnya, masukkan Cloud SQL Admin. Kemudian, pilih peran Admin Cloud SQL yang muncul.

    Kotak dialog Edit izin akan aktif, dan peran Admin Cloud SQL kini akan muncul di kotak dialog.

  7. Di sebelah kanan peran Admin Cloud SQL, klik link Tambahkan kondisi.
  8. Di kotak dialog Edit kondisi, berikan informasi berikut:
    1. Di kolom Judul, masukkan nama untuk kondisi yang Anda tambahkan guna membatasi akses ke operasi cadangan untuk instance pengujian. Misalnya, Anda dapat memasukkan Limit access to backup operations.
    2. Klik tab EDITOR KONDISI, lalu tambahkan kondisi berikut:

      resource.type == "sqladmin.googleapis.com/BackupRun" &&
      resource.name.startsWith("projects/PROJECT_ID/instances/test")
          

  9. Klik SAVE.
  10. Di kotak dialog Edit izin, klik SIMPAN.

gcloud

Contoh ini menggunakan variabel berikut:

  • PROJECT_ID: Project Google Cloud Anda.
  • USER_EMAIL: Alamat email pengguna.
  • SERVICE_ACCOUNT_EMAIL: Alamat email lengkap akun layanan yang aksesnya ingin Anda batasi.

  1. Batasi cakupan peran cloudsql.admin untuk pengguna yang memiliki alamat email USER_EMAIL.

    Cakupan peran terbatas pada resource yang memiliki nama yang diawali dengan projects/PROJECT_ID/instances/test.

    gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:USER_EMAIL \
    --role=roles/cloudsql.admin \
    --condition=expression="resource.type == \"sqladmin.googleapis.com/BackupRun\" && resource.name.startsWith(\"projects/PROJECT_ID/instances/test-instance-1\")",title="test"
        
  2. ATAU

  3. Batasi cakupan peran cloudsql.admin untuk pengguna yang login dengan akun layanan SERVICE_ACCOUNT_EMAIL.

    gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_EMAIL \
    --role=roles/cloudsql.admin \
    --condition=expression="resource.type == \"sqladmin.googleapis.com/BackupRun\" && resource.name.startsWith(\"projects/PROJECT_ID/instances/test-instance-1\")",title="test"
        

Mengizinkan pengguna menghapus instance pengujian, tetapi tidak menghapus instance produksi

Misalkan Anda ingin mengizinkan akun layanan untuk menghapus instance pengujian, tetapi bukan instance produksi. Anda dapat melakukannya menggunakan tag, dan dengan menambahkan dua binding kebijakan berikut untuk akun layanan:

  • Peran Cloud SQL Editor pada resource tempat Anda memberikan peran, dan turunannya. Jika diberikan pada project, peran tersebut berlaku untuk semua instance dalam project. Peran Cloud SQL Editor tidak berisi izin cloudsql.instances.delete.
  • Peran Admin Cloud SQL pada instance dengan tag test.

Konsol

  1. Di konsol Google Cloud, buka halaman IAM.

    Buka IAM

  2. Klik Tambahkan.
  3. Di kolom Anggota baru, masukkan email akun layanan.
  4. Klik daftar dropdown Peran lalu pilih peran Cloud SQL Editor. Jangan tambahkan apa pun untuk peran ini.
  5. Klik Simpan untuk menyimpan kondisi.
  6. Klik menu Peran untuk akun yang sama, lalu pilih peran Cloud SQL Admin.
  7. Klik Tambahkan kondisi.
  8. Masukkan judul dan deskripsi.
  9. Pilih tab Editor Kondisi.
  10. Di bagian Pembuat Kondisi:
    • Untuk Jenis kondisi - Resource - Nama, masukkan nama untuk kondisi.
    • Untuk Jenis kondisi - Resource - Layanan, pilih sqladmin.googleapis.com.
    • Untuk Jenis kondisi - Resource - Tag, nama kunci Tag dengan namespace. Untuk contoh ini, Operatornya adalah matches dan nilainya adalah 815471563813/env/test.
  11. Klik Simpan untuk menyimpan kondisi.
  12. Klik Simpan untuk menyimpan kebijakan.

gcloud

Contoh ini menggunakan variabel berikut:

  • PROJECT_ID: Project Google Cloud Anda.
  • INSTANCE_ID: Instance Cloud SQL Anda.
  • REGION: Region tempat instance Cloud SQL Anda berada.
  • ORGANIZATION_ID: ID organisasi yang akan menjadi resource induk untuk kunci tag ini; misalnya: 12345678901. Untuk mempelajari cara mendapatkan ID organisasi, lihat Membuat dan mengelola organisasi.
  • SERVICE_ACCOUNT_EMAIL:Alamat email lengkap akun layanan yang aksesnya ingin Anda ubah.

  1. Membuat kunci tag bernama `env` dengan nilai tag `prod` dan `test`. Untuk informasi selengkapnya, lihat Membuat dan menentukan tag baru.
    gcloud alpha resource-manager tags keys create env \
    --parent=organizations/ORGANIZATION_ID
    gcloud alpha resource-manager tags values create prod \
    --parent=env
    gcloud alpha resource-manager tags values create test \
    --parent=env
        
  2. Lampirkan tag `env` dengan nilai `test` ke instance Cloud SQL di lingkungan uji Anda. Informasi selengkapnya, lihat halaman Tag Cloud SQL.
  3. gcloud alpha resource-manager tags bindings create \
    --tag-value=test \
    --parent=//sqladmin.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID \
    --location=REGION
      
  4. Dapatkan binding kebijakan IAM yang ada dan dapatkan output ke file bindings.json:
    gcloud projects get-iam-policy PROJECT_ID --format=json >> bindings.json
    
  5. Tambahkan binding kondisional berikut ke file bindings.json:
    {
      "bindings": [
        {
          "role": "roles/cloudsql.editor",
          "members": [
              "serviceAccount:SERVICE_ACCOUNT_EMAIL"
            ]
        },
        {
          "role": "roles/cloudsql.admin",
          "members": [
              "serviceAccount:SERVICE_ACCOUNT_EMAIL"
            ],
          "condition": {
            "expression": "resource.matchTag('ORGANIZATION_ID/env', 'test')"
          }
        }
      ],
      "etag": "BwWKmjvelug="
      "version": 3
    }
    
  6. Update binding kebijakan IAM dengan file bindings.json baru.
    gcloud projects set-iam-policy PROJECT_ID bindings.json