これは、Google Cloud Platform 上のリソースに対する複数の IAM ロールを非破壊的に管理することを容易にするサブモジュールのコレクションです。
このモジュールは Terraform 1.3 以降で使用することを目的としており、Terraform 1.3 以降を使用してテストされています。 Terraform >=1.3 を使用して非互換性を見つけた場合は、問題を報告してください。
アップグレードに役立つ次のガイドが利用可能です。
完全な例は example フォルダーにありますが、2 つのプロジェクトのロールを管理するための基本的な使用法は次のとおりです。
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/ にあることを確認してください。
コンパイル方法と使用方法の詳細については、各プラグインのページを参照してください。