Ini adalah kumpulan submodul yang mempermudah pengelolaan beberapa peran IAM untuk sumber daya di Google Cloud Platform secara non-destruktif:
Modul ini dimaksudkan untuk digunakan dengan Terraform 1.3+ dan diuji menggunakan Terraform 1.3+. Jika Anda menemukan ketidakcocokan menggunakan Terraform >=1.3, silakan buka masalah.
Panduan berikut tersedia untuk membantu peningkatan:
Contoh lengkap ada di folder contoh, namun penggunaan dasarnya adalah sebagai berikut untuk mengelola peran pada dua proyek:
module "projects_iam_bindings" {
source = " terraform-google-modules/iam/google//modules/projects_iam "
version = " ~> 8.0 "
projects = [ " project-123456 " , " project-9876543 " ]
bindings = {
" roles/storage.admin " = [
" group:[email protected] " ,
" user:[email protected] " ,
]
" roles/compute.networkAdmin " = [
" group:[email protected] " ,
" user:[email protected] " ,
]
" roles/compute.imageUser " = [
" user:[email protected] " ,
]
}
}
Modul ini juga menawarkan mode otoritatif yang akan menghapus semua peran yang tidak ditetapkan melalui Terraform. Ini adalah contoh penggunaan mode otoritatif untuk mengelola akses ke bucket penyimpanan:
module "storage_buckets_iam_bindings" {
source = " terraform-google-modules/iam/google//modules/storage_buckets_iam "
version = " ~> 8.0 "
storage_buckets = [ " my-storage-bucket " ]
mode = " authoritative "
bindings = {
" roles/storage.legacyBucketReader " = [
" user:[email protected] " ,
" group:[email protected] " ,
]
" roles/storage.legacyBucketWriter " = [
" user:[email protected] " ,
" group:[email protected] " ,
]
}
}
Variabel mode
mengontrol perilaku submodul, secara default disetel ke "aditif", opsi yang memungkinkan adalah:
Dalam mode otoritatif, submodul mengambil kendali penuh atas pengikatan IAM yang tercantum dalam modul. Artinya, setiap anggota yang ditambahkan ke peran di luar modul akan dihapus saat Terraform dijalankan lagi. Namun, peran yang tidak tercantum dalam modul tidak akan terpengaruh.
Dalam mode aditif, submodul membiarkan pengikatan yang ada tidak terpengaruh. Sebaliknya, setiap anggota yang terdaftar dalam modul akan ditambahkan ke kumpulan pengikatan IAM yang sudah ada. Namun, anggota yang tercantum dalam modul dikontrol sepenuhnya oleh modul. Artinya, jika Anda menambahkan pengikatan melalui modul dan kemudian menghapusnya, modul akan menangani penghapusan pengikatan peran dengan benar.
Setiap submodul melakukan operasi pada beberapa variabel sebelum membuat perubahan apa pun pada binding IAM di GCP. Karena keterbatasan for_each
(info lebih lanjut), yang banyak digunakan dalam submodul, ada batasan tertentu mengenai jenis nilai dinamis yang dapat Anda berikan ke submodul:
projects
) hanya diperbolehkan untuk 1 entitas.projects
), konfigurasinya HARUS statis, artinya konfigurasi tersebut tidak dapat menggunakan bidang sumber daya lain mana pun untuk mendapatkan nama entitas (ini termasuk mendapatkan hash yang dihasilkan secara acak melalui random_id
sumber).authoritative
. Anda dapat memilih jenis sumber daya berikut untuk menerapkan pengikatan IAM:
projects
)organizations
)folders
)service_accounts
)subnets
)storage_buckets
)pubsub_topics
)pubsub_subscriptions
)kms_key_rings
)kms_crypto_keys
)secrets
)managed_zones
)entity_ids
dan variabel location
) Tetapkan variabel tertentu pada panggilan modul untuk memilih sumber daya yang akan terpengaruh. Ingatlah untuk mengatur variabel mode
dan memberikan izin yang cukup untuk mengelola sumber daya yang dipilih juga. Perhatikan bahwa variabel bindings
menerima map {}
kosong yang diteruskan sebagai argumen jika sumber daya tidak memiliki binding IAM untuk diterapkan.
Untuk menjalankan submodul, Anda harus memiliki Akun Layanan dengan peran yang sesuai untuk mengelola IAM untuk sumber daya yang berlaku. Peran yang sesuai berbeda-beda bergantung pada sumber daya yang Anda targetkan, sebagai berikut:
Pastikan Anda memiliki versi Terraform yang benar >= 1.3
Pastikan Anda memiliki plugin yang dikompilasi di $HOME/.terraform.d/plugins/
Lihat setiap halaman plugin untuk informasi lebih lanjut tentang cara mengkompilasi dan menggunakannya.