1+ #! /bin/bash
2+ # Copyright 2020 Google LLC
3+ #
4+ # Licensed under the Apache License, Version 2.0 (the "License");
5+ # you may not use this file except in compliance with the License.
6+ # You may obtain a copy of the License at
7+ #
8+ # http://www.apache.org/licenses/LICENSE-2.0
9+ #
10+ # Unless required by applicable law or agreed to in writing, software
11+ # distributed under the License is distributed on an "AS IS" BASIS,
12+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ # See the License for the specific language governing permissions and
14+ # limitations under the License.
15+
16+ cloud_build_service_account=$1
17+
18+ # Fail fast when a command fails or a variable is undefined
19+ set -eu
20+
21+ echo " "
22+ echo " Preparing to execute with the following values:"
23+ echo " ==================================================="
24+ echo " Admin Project: ${TF_ADMIN_PROJECT:? } "
25+ echo " Organization: ${TF_VAR_org_id:? } "
26+ echo " Billing Account: ${TF_VAR_billing_account:? } "
27+ echo " Folder: ${TF_VAR_folder_id:? } "
28+ echo " State Bucket: ${TF_ADMIN_BUCKET:? } "
29+ echo " Cloud Build Service Account: ${cloud_build_service_account:? } "
30+ echo " ==================================================="
31+ echo " "
32+ echo " Continuing in 10 seconds. Ctrl+C to cancel"
33+ sleep 10
34+
35+
36+ echo " => Binding IAM roles to service account"
37+
38+ # Add Viewer permissions for the Terraform Admin project
39+ gcloud projects add-iam-policy-binding " ${TF_ADMIN_PROJECT} " \
40+ --member " serviceAccount:$cloud_build_service_account " \
41+ --role roles/viewer
42+
43+ # Enable Access Context Manager API for the Terraform Admin project
44+ gcloud services --project ${TF_ADMIN_PROJECT} enable accesscontextmanager.googleapis.com
45+
46+ # Add Storage Admin permissions for the Terraform Admin project
47+ gcloud projects add-iam-policy-binding " ${TF_ADMIN_PROJECT} " \
48+ --member " serviceAccount:$cloud_build_service_account " \
49+ --role roles/storage.admin
50+
51+ # Add accesscontextmanager.policyAdmin
52+ gcloud organizations add-iam-policy-binding " ${TF_VAR_org_id} " \
53+ --member " serviceAccount:$cloud_build_service_account " \
54+ --role=" roles/accesscontextmanager.policyAdmin"
55+
56+ # Add resourcemanager.organizationAdmin
57+ gcloud organizations add-iam-policy-binding " ${TF_VAR_org_id} " \
58+ --member " serviceAccount:$cloud_build_service_account " \
59+ --role=" roles/resourcemanager.organizationAdmin"
60+
61+ # Add orgpolicy.policyAdmin
62+ gcloud organizations add-iam-policy-binding " ${TF_VAR_org_id} " \
63+ --member " serviceAccount:$cloud_build_service_account " \
64+ --role=" roles/orgpolicy.policyAdmin"
65+
66+ # Add billing admin
67+ gcloud organizations add-iam-policy-binding " ${TF_VAR_org_id} " \
68+ --member " serviceAccount:$cloud_build_service_account " \
69+ --role=" roles/billing.admin"
70+
71+ # Add Storage Admin permissions to entire Folder
72+ gcloud resource-manager folders add-iam-policy-binding " ${TF_VAR_folder_id} " \
73+ --member " serviceAccount:$cloud_build_service_account " \
74+ --role roles/storage.admin
75+
76+ # Add Container cluster admin permissions to entire Folder
77+ gcloud resource-manager folders add-iam-policy-binding " ${TF_VAR_folder_id} " \
78+ --member " serviceAccount:$cloud_build_service_account " \
79+ --role roles/container.admin
80+
81+ # Add serviceusage.serviceUsageAdmin
82+ gcloud resource-manager folders add-iam-policy-binding " ${TF_VAR_folder_id} " \
83+ --member " serviceAccount:$cloud_build_service_account " \
84+ --role roles/serviceusage.serviceUsageAdmin
85+
86+ # Add IAM serviceAccountUser permissions to entire Folder
87+ gcloud resource-manager folders add-iam-policy-binding " ${TF_VAR_folder_id} " \
88+ --member " serviceAccount:$cloud_build_service_account " \
89+ --role roles/iam.serviceAccountUser
90+
91+ # Add Project Creator permissions to entire Folder
92+ gcloud resource-manager folders add-iam-policy-binding " ${TF_VAR_folder_id} " \
93+ --member " serviceAccount:$cloud_build_service_account " \
94+ --role roles/resourcemanager.projectCreator
95+
96+ gcloud resource-manager folders add-iam-policy-binding " ${TF_VAR_folder_id} " \
97+ --member " serviceAccount:$cloud_build_service_account " \
98+ --role roles/resourcemanager.folderIamAdmin
99+
100+ # Add Billing Project Manager permissions to all projects in Folder
101+ gcloud resource-manager folders add-iam-policy-binding " ${TF_VAR_folder_id} " \
102+ --member " serviceAccount:$cloud_build_service_account " \
103+ --role roles/billing.projectManager
104+
105+ # Add Compute Admin permissions to all projects in Folder
106+ gcloud resource-manager folders add-iam-policy-binding " ${TF_VAR_folder_id} " \
107+ --member " serviceAccount:$cloud_build_service_account " \
108+ --role roles/compute.admin
109+
110+ # Add Shared VPC Admin permissions to all projects in Folder
111+ gcloud resource-manager folders add-iam-policy-binding " ${TF_VAR_folder_id} " \
112+ --member " serviceAccount:$cloud_build_service_account " \
113+ --role roles/compute.xpnAdmin
114+
115+ echo " => Setting up IAM roles for StackDriver Logging"
116+
117+ gcloud resource-manager folders add-iam-policy-binding " ${TF_VAR_folder_id} " \
118+ --member " serviceAccount:$cloud_build_service_account " \
119+ --role roles/logging.configWriter
120+
121+ echo " "
122+ echo " Service Account set up successfully"
123+ echo " "
0 commit comments