1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
data "aws_ssoadmin_instances" "this" {}
data "aws_identitystore_group" "this" {
for_each = { for idx, a in var.assignments : idx => a if a.principal_id == null && a.principal_type == "GROUP" }
identity_store_id = try(tolist(data.aws_ssoadmin_instances.this.identity_store_ids)[0], "d-0000000000")
alternate_identifier {
unique_attribute {
attribute_path = "DisplayName"
attribute_value = each.value.principal_name
}
}
}
data "aws_identitystore_user" "this" {
for_each = { for idx, a in var.assignments : idx => a if a.principal_id == null && a.principal_type == "USER" }
identity_store_id = try(tolist(data.aws_ssoadmin_instances.this.identity_store_ids)[0], "d-0000000000")
alternate_identifier {
unique_attribute {
attribute_path = "UserName"
attribute_value = each.value.principal_name
}
}
}
# locals =====================================================================
locals {
tags = merge(
{
ManagedBy = "terraform"
Module = "governance/sso-assignment"
},
var.tags,
)
# Flatten managed policy attachments
managed_policy_pairs = flatten([
for ps_key, ps in var.permission_sets : [
for policy_arn in ps.managed_policies : {
ps_key = ps_key
policy_arn = policy_arn
}
]
])
managed_policy_map = {
for pair in local.managed_policy_pairs :
"${pair.ps_key}:${pair.policy_arn}" => pair
}
# Flatten customer-managed policy attachments
customer_policy_pairs = flatten([
for ps_key, ps in var.permission_sets : [
for cmp in ps.customer_managed_policies : {
ps_key = ps_key
name = cmp.name
path = cmp.path
}
]
])
customer_policy_map = {
for pair in local.customer_policy_pairs :
"${pair.ps_key}:${pair.name}" => pair
}
# Resolve principal_id using dynamic data lookup if not provided directly
resolved_assignments = [
for idx, a in var.assignments : {
account_id = a.account_id
permission_set_key = a.permission_set_key
principal_type = a.principal_type
principal_id = a.principal_id != null ? a.principal_id : (
a.principal_type == "GROUP" ? data.aws_identitystore_group.this[idx].group_id : data.aws_identitystore_user.this[idx].user_id
)
}
]
# Keyed assignment map for for_each
assignment_map = {
for a in local.resolved_assignments :
"${a.account_id}:${a.permission_set_key}:${a.principal_id}" => a
}
}
|