infra/terraform/test-org/org-iam-policy/iam.tf (117 lines of code) (raw):

/** * Copyright 2020 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ locals { cft_ci_group = "cft-ci-robots@test.blueprints.joonix.net" cft_dev_group = "cft-developers@develop.blueprints.joonix.net" gcp_admins_group_test = "gcp-admins@test.blueprints.joonix.net" project_cleaner = "project-cleaner-function@${data.terraform_remote_state.project_cleaner.outputs.project_id}.iam.gserviceaccount.com" billing_admin_group = "billing-admin@test.blueprints.joonix.net" ci_gsuite_sa = "ci-gsuite-sa@ci-gsuite-sa-project.iam.gserviceaccount.com" cft_admin = "cft-admin@test.blueprints.joonix.net" foundation_leads_group = "cloud-foundation-leads@google.com" policy = { "roles/billing.admin" : ["group:${local.gcp_admins_group_test}"], "roles/compute.xpnAdmin" : ["group:${local.cft_ci_group}"], "roles/containeranalysis.admin" : ["group:${local.cft_ci_group}"], "roles/orgpolicy.policyAdmin" : ["group:${local.gcp_admins_group_test}"], "roles/resourcemanager.folderAdmin" : ["group:${local.gcp_admins_group_test}"], "roles/resourcemanager.folderViewer" : ["serviceAccount:${local.project_cleaner}"], "roles/resourcemanager.lienModifier" : ["serviceAccount:${local.project_cleaner}"], "roles/resourcemanager.organizationAdmin" : [ "group:${local.cft_ci_group}", "group:${local.gcp_admins_group_test}", "serviceAccount:${data.google_secret_manager_secret_version.org-admin-sa.secret_data}", ], "roles/iam.organizationRoleAdmin" : ["serviceAccount:${data.google_secret_manager_secret_version.org-role-admin-sa.secret_data}", ], "roles/resourcemanager.organizationViewer" : ["group:${local.cft_ci_group}"], "roles/resourcemanager.projectDeleter" : ["serviceAccount:${local.project_cleaner}"], "roles/owner" : ["group:${local.gcp_admins_group_test}", "serviceAccount:${local.project_cleaner}"], "roles/browser" : ["group:${local.cft_dev_group}"], "roles/viewer" : ["group:${local.cft_dev_group}", "serviceAccount:${local.project_cleaner}"], "roles/compute.orgSecurityPolicyAdmin" : ["serviceAccount:${local.project_cleaner}"], "roles/compute.orgSecurityResourceAdmin" : ["serviceAccount:${local.project_cleaner}"], "roles/resourcemanager.folderEditor" : ["serviceAccount:${local.project_cleaner}"], "roles/serviceusage.serviceUsageAdmin" : ["serviceAccount:${local.project_cleaner}"], "roles/accesscontextmanager.policyReader" : ["group:${local.cft_ci_group}"], "roles/assuredworkloads.admin" : ["group:${local.cft_ci_group}"], "roles/iam.denyAdmin" : ["group:${local.cft_ci_group}"], "roles/resourcemanager.tagAdmin" : ["group:${local.cft_ci_group}"], } billing_policy = { "roles/billing.admin" : [ "group:${local.cft_ci_group}", "group:${local.gcp_admins_group_test}", "user:${local.cft_admin}", "group:${local.foundation_leads_group}", "group:${data.google_secret_manager_secret_version.ba-admin-1.secret_data}", "group:${data.google_secret_manager_secret_version.ba-admin-2.secret_data}", "group:${local.billing_admin_group}", ], "roles/logging.configWriter" : [ "serviceAccount:${local.project_cleaner}", "user:${local.cft_admin}", ], "roles/billing.user" : concat([ "serviceAccount:${local.ci_gsuite_sa}", ], jsondecode(data.google_storage_bucket_object_content.ba-users.content)) } } data "google_secret_manager_secret_version" "org-admin-sa" { project = "cloud-foundation-cicd" secret = "org-admin-sa" } data "google_secret_manager_secret_version" "org-role-admin-sa" { project = "cloud-foundation-cicd" secret = "org-role-admin-sa" } data "google_secret_manager_secret_version" "ba-admin-1" { project = "cloud-foundation-cicd" secret = "ba-admin-1" } data "google_secret_manager_secret_version" "ba-admin-2" { project = "cloud-foundation-cicd" secret = "ba-admin-2" } data "google_storage_bucket_object_content" "ba-users" { name = "ba-users.json" bucket = "tf-data-199f44ed6f9a7f22" } resource "google_organization_iam_policy" "organization" { org_id = data.terraform_remote_state.org.outputs.org_id policy_data = data.google_iam_policy.admin.policy_data } data "google_iam_policy" "admin" { dynamic "binding" { for_each = local.policy content { role = binding.key members = binding.value } } } resource "google_billing_account_iam_policy" "billing" { billing_account_id = data.terraform_remote_state.org.outputs.billing_account policy_data = data.google_iam_policy.billing.policy_data } data "google_iam_policy" "billing" { dynamic "binding" { for_each = local.billing_policy content { role = binding.key members = binding.value } } }