Skip to content

Commit 2c8a52b

Browse files
sruffilliludoo
authored andcommitted
Top level folder factory support for automation SA IAM (GoogleCloudPlatform#2818)
* Top level folder factory support for automation SA IAM * Fixes iam_bindings and iam_bindings_additive for top-level-folder --------- Co-authored-by: Ludovico Magnocavallo <[email protected]>
1 parent 4c90b6e commit 2c8a52b

File tree

3 files changed

+24
-13
lines changed

3 files changed

+24
-13
lines changed

fast/stages/1-resman/data/top-level-folders/sandbox.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,10 @@ name: Sandbox
1818
automation:
1919
environment_name: dev
2020
short_name: sbox
21+
# You can create role bindings referring to the automation service account by
22+
# referring to it using `self` keyword, per the example below
23+
iam:
24+
"roles/owner":
25+
- self
2126
factories_config:
2227
org_policies: data/org-policies/sandbox

fast/stages/1-resman/schemas/top-level-folder.schema.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@
261261
"type": "array",
262262
"items": {
263263
"type": "string",
264-
"pattern": "^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|project-factory|project-factory-dev|project-factory-prod|networking|security|vpcsc)"
264+
"pattern": "^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|project-factory|project-factory-dev|project-factory-prod|networking|security|vpcsc|self)"
265265
}
266266
}
267267
}
@@ -278,7 +278,7 @@
278278
"type": "array",
279279
"items": {
280280
"type": "string",
281-
"pattern": "^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|project-factory|project-factory-dev|project-factory-prod|networking|security|vpcsc)"
281+
"pattern": "^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|project-factory|project-factory-dev|project-factory-prod|networking|security|vpcsc|self)"
282282
}
283283
},
284284
"role": {
@@ -318,7 +318,7 @@
318318
"properties": {
319319
"member": {
320320
"type": "string",
321-
"pattern": "^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|project-factory|project-factory-dev|project-factory-prod|networking|security|vpcsc)"
321+
"pattern": "^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|project-factory|project-factory-dev|project-factory-prod|networking|security|vpcsc|self)"
322322
},
323323
"role": {
324324
"type": "string",
@@ -361,4 +361,4 @@
361361
}
362362
}
363363
}
364-
}
364+
}

fast/stages/1-resman/top-level-folders.tf

+15-9
Original file line numberDiff line numberDiff line change
@@ -86,23 +86,29 @@ module "top-level-folder" {
8686
iam = {
8787
for role, members in each.value.iam :
8888
lookup(var.custom_roles, role, role) => [
89-
for member in members : lookup(local.top_level_sa, member, member)
89+
for member in members : (each.value.automation != null && member == "self")
90+
? module.top-level-sa[each.key].iam_email
91+
: lookup(local.top_level_sa, member, member)
9092
]
9193
}
9294
iam_bindings = {
93-
for k, v in each.value.iam_bindings : k => merge(v, {
94-
role = lookup(var.custom_roles, v.role, v.role)
95+
for k, v in each.value.iam_bindings : k => {
9596
members = [
96-
for item in v.members :
97-
lookup(local.top_level_sa, item, item)
97+
for member in v.members : (each.value.automation != null && member == "self")
98+
? module.top-level-sa[each.key].iam_email
99+
: lookup(local.top_level_sa, member, member)
98100
]
99-
condition = try(v.condition, null)
100-
})
101+
role = lookup(var.custom_roles, v.role, v.role)
102+
}
101103
}
102104
iam_bindings_additive = {
103105
for k, v in each.value.iam_bindings_additive : k => merge(v, {
104-
member = lookup(local.top_level_sa, v.member, v.member)
105-
role = lookup(var.custom_roles, v.role, v.role)
106+
member = (
107+
each.value.automation != null && v.member == "self"
108+
? module.top-level-sa[each.key].iam_email
109+
: lookup(local.top_level_sa, v.member, v.member)
110+
)
111+
role = lookup(var.custom_roles, v.role, v.role)
106112
})
107113
}
108114
# we don't replace here to avoid dynamic values in keys

0 commit comments

Comments
 (0)