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.
-
Di Konsol Google Cloud, buka halaman IAM.
- Klik Tambahkan.
- Di kotak input Anggota Baru, masukkan email akun layanan.
- Klik daftar dropdown Peran dan pilih peran Klien Cloud SQL.
- Klik Tambahkan kondisi.
- Masukkan judul dan deskripsi.
- Pilih tab Editor kondisi.
- 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
.
- Untuk Jenis kondisi - Resource - Nama, masukkan
- Klik Simpan untuk menyimpan kondisi.
- 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.
- Dapatkan binding kebijakan IAM yang ada dan dapatkan output ke file
bindings.json
: - 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 }
- Update kebijakan IAM dengan file
bindings.json
baru.gcloud projects set-iam-policy PROJECT_ID bindings.json
gcloud projects get-iam-policy PROJECT_ID --format=json > bindings.json
Terraform
Untuk mengizinkan pengguna terhubung ke instance tertentu, gunakan resource data google_iam_policy
Terraform dan resource google_project_iam_policy
Terraform
.
Menerapkan perubahan
Untuk menerapkan konfigurasi Terraform di project Google Cloud, selesaikan langkah-langkah di bagian berikut.
Menyiapkan Cloud Shell
- Luncurkan Cloud Shell.
-
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).
-
Di Cloud Shell, buat direktori dan file baru di dalam direktori tersebut. Nama file harus memiliki
ekstensi
.tf
—misalnyamain.tf
. Dalam tutorial ini, file ini disebut sebagaimain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
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.
- Tinjau dan ubah contoh parameter untuk diterapkan pada lingkungan Anda.
- Simpan perubahan Anda.
-
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
-
Tinjau konfigurasi dan pastikan resource yang akan dibuat atau
diupdate oleh Terraform sesuai yang Anda inginkan:
terraform plan
Koreksi konfigurasi jika diperlukan.
-
Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan
yes
pada prompt:terraform apply
Tunggu hingga Terraform menampilkan pesan "Apply complete!".
- 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:
- Untuk menonaktifkan perlindungan penghapusan, di file konfigurasi Terraform Anda, tetapkan
argumen
deletion_protection
kefalse
.deletion_protection = "false"
- Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan
memasukkan
yes
pada prompt:terraform apply
-
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
-
Di konsol Google Cloud, buka halaman IAM.
- Klik tab AKUN UTAMA.
- Temukan alamat email atau akun layanan (akun utama) pengguna yang ingin Anda batasi aksesnya.
- Klik ikon Edit akun utama di sebelah kanan akun utama. Tampilan ikon ini seperti pensil
- Di kotak dialog Izin edit, klik TAMBAH PERAN LAIN.
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.
- Di sebelah kanan peran Admin Cloud SQL, klik link Tambahkan kondisi.
- Di kotak dialog Edit kondisi, berikan informasi berikut:
- 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
. Klik tab EDITOR KONDISI, lalu tambahkan kondisi berikut:
resource.type == "sqladmin.googleapis.com/BackupRun" && resource.name.startsWith("projects/PROJECT_ID/instances/test")
- Di kolom Judul, masukkan nama untuk kondisi yang Anda tambahkan guna membatasi akses ke operasi cadangan untuk instance pengujian. Misalnya, Anda dapat memasukkan
- Klik SAVE.
- 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.
-
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"
-
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"
ATAU
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
-
Di konsol Google Cloud, buka halaman IAM.
- Klik Tambahkan.
- Di kolom Anggota baru, masukkan email akun layanan.
- Klik daftar dropdown Peran lalu pilih peran Cloud SQL Editor. Jangan tambahkan apa pun untuk peran ini.
- Klik Simpan untuk menyimpan kondisi.
- Klik menu Peran untuk akun yang sama, lalu pilih peran Cloud SQL Admin.
- Klik Tambahkan kondisi.
- Masukkan judul dan deskripsi.
- Pilih tab Editor kondisi.
- 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 adalah815471563813/env/test
.
- Klik Simpan untuk menyimpan kondisi.
- 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.
- 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
- Lampirkan tag `env` dengan nilai `test` ke instance Cloud SQL di lingkungan uji Anda. Informasi selengkapnya, lihat halaman Tag Cloud SQL.
- Dapatkan binding kebijakan IAM yang ada dan dapatkan output ke file
bindings.json
:gcloud projects get-iam-policy PROJECT_ID --format=json >> bindings.json
- 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 }
- Update binding kebijakan IAM dengan file
bindings.json
baru.gcloud projects set-iam-policy PROJECT_ID bindings.json
gcloud alpha resource-manager tags bindings create \ --tag-value=test \ --parent=//sqladmin.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID \ --location=REGION