這是子模組的集合,可以更輕鬆地非破壞性地管理 Google Cloud Platform 上資源的多個 IAM 角色:
此模組適用於 Terraform 1.3+ 並使用 Terraform 1.3+ 進行測試。如果您發現使用 Terraform >=1.3 不相容,請提出問題。
以下指南可協助升級:
完整的範例位於範例資料夾中,但管理兩個專案的角色的基本用法如下:
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] " ,
]
}
}
該模組還提供了一種權威模式,它將刪除所有未透過 Terraform 分配的角色。這是使用權威模式來管理儲存桶存取的範例:
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] " ,
]
}
}
mode
變數控制子模組的行為,預設情況下它設定為“additive”,可能的選項有:
在權威模式下,子模組完全控制模組中列出的 IAM 綁定。這意味著添加到模組外部角色的任何成員都將在下次 Terraform 運行時被刪除。但是,模組中未列出的角色將不受影響。
在附加模式下,子模組不會影響現有的綁定。相反,模組中列出的任何成員都會新增到現有的 IAM 綁定集中。但是,模組中列出的成員完全受模組控制。這意味著,如果您透過模組新增綁定然後將其刪除,則模組將正確處理刪除角色綁定。
每個子模組在對 GCP 中的 IAM 綁定進行任何變更之前都會對某些變數執行操作。由於在子模組中廣泛使用的for_each
(更多資訊)的限制,您可以向子模組提供的動態值類型存在一定的限制:
projects
)僅允許 1 個實體。projects
),則配置必須是靜態的,這表示它不能使用任何其他資源的欄位來取得實體名稱(這包括透過random_id
取得隨機產生的雜湊值)資源)。authoritative
模式下才可能是動態的。 您可以選擇下列資源類型來套用 IAM 綁定:
projects
變數)organizations
變數)folders
變數)service_accounts
變數)subnets
變數)storage_buckets
變數)pubsub_topics
變數)pubsub_subscriptions
變數)kms_key_rings
變數)kms_crypto_keys
變數)secrets
變數)managed_zones
變數)entity_ids
和location
變數)在模組呼叫上設定指定變數以選擇要影響的資源。請記住設定mode
變數並授予足夠的權限來管理所選資源。請注意,在資源沒有要應用的 IAM 綁定的情況下, bindings
變數接受作為參數傳入的空映射{}
。
為了執行子模組,您必須擁有一個具有適當角色的服務帳戶來管理適用資源的 IAM。適當的角色會根據您的目標資源而有所不同,如下所示:
確保您擁有正確的 Terraform 版本 >= 1.3
確保 $HOME/.terraform.d/plugins/ 上有已編譯的插件
有關如何編譯和使用它們的更多信息,請參閱每個插件頁面。