1
+ data "aws_ssoadmin_instances" "main" {}
2
+
3
+ resource "aws_identitystore_group" "group" {
4
+ for_each = var. teams
5
+ display_name = each. key
6
+ identity_store_id = tolist (data. aws_ssoadmin_instances . main . identity_store_ids )[0 ]
7
+ }
8
+
9
+ resource "aws_identitystore_user" "main" {
10
+ for_each = merge (nonsensitive (var. teams . PLC ), nonsensitive (var. teams . Ops ), nonsensitive (var. teams . Security ), nonsensitive (var. teams . Analytics ))
11
+ identity_store_id = tolist (data. aws_ssoadmin_instances . main . identity_store_ids )[0 ]
12
+
13
+ display_name = each. key
14
+ user_name = each. key
15
+ nickname = each. key
16
+
17
+ name {
18
+ given_name = each. key
19
+ family_name = " Brew"
20
+ }
21
+
22
+ emails {
23
+ value = sensitive (each. value )
24
+ }
25
+
26
+ lifecycle {
27
+ ignore_changes = [name , display_name ]
28
+ }
29
+ }
30
+
31
+ resource "aws_identitystore_group_membership" "plc" {
32
+ for_each = nonsensitive (var. teams . PLC )
33
+
34
+ identity_store_id = tolist (data. aws_ssoadmin_instances . main . identity_store_ids )[0 ]
35
+ group_id = aws_identitystore_group. group [" PLC" ]. group_id
36
+ member_id = aws_identitystore_user. main [each . key ]. user_id
37
+ }
38
+
39
+ resource "aws_identitystore_group_membership" "ops" {
40
+ for_each = nonsensitive (var. teams . Ops )
41
+
42
+ identity_store_id = tolist (data. aws_ssoadmin_instances . main . identity_store_ids )[0 ]
43
+ group_id = aws_identitystore_group. group [" Ops" ]. group_id
44
+ member_id = aws_identitystore_user. main [each . key ]. user_id
45
+ }
46
+
47
+ resource "aws_identitystore_group_membership" "security" {
48
+ for_each = nonsensitive (var. teams . Security )
49
+
50
+ identity_store_id = tolist (data. aws_ssoadmin_instances . main . identity_store_ids )[0 ]
51
+ group_id = aws_identitystore_group. group [" Security" ]. group_id
52
+ member_id = aws_identitystore_user. main [each . key ]. user_id
53
+ }
54
+
55
+ resource "aws_identitystore_group_membership" "analytics" {
56
+ for_each = nonsensitive (var. teams . Analytics )
57
+
58
+ identity_store_id = tolist (data. aws_ssoadmin_instances . main . identity_store_ids )[0 ]
59
+ group_id = aws_identitystore_group. group [" Analytics" ]. group_id
60
+ member_id = aws_identitystore_user. main [each . key ]. user_id
61
+ }
62
+
63
+ resource "aws_ssoadmin_permission_set" "OpsAccess" {
64
+ name = " OpsAccess"
65
+ description = " Access for Ops"
66
+ instance_arn = tolist (data. aws_ssoadmin_instances . main . arns )[0 ]
67
+ }
68
+ resource "aws_ssoadmin_managed_policy_attachment" "OpsAccess" {
69
+ depends_on = [aws_ssoadmin_account_assignment . Ops ]
70
+
71
+ instance_arn = tolist (data. aws_ssoadmin_instances . main . arns )[0 ]
72
+ managed_policy_arn = " arn:aws:iam::aws:policy/AdministratorAccess"
73
+ permission_set_arn = aws_ssoadmin_permission_set. OpsAccess . arn
74
+ }
75
+
76
+ resource "aws_ssoadmin_permission_set" "SecurityTeam" {
77
+ name = " SecurityTeam"
78
+ description = " Access for the security team"
79
+ instance_arn = tolist (data. aws_ssoadmin_instances . main . arns )[0 ]
80
+ }
81
+ resource "aws_ssoadmin_managed_policy_attachment" "SecurityTeam" {
82
+ depends_on = [aws_ssoadmin_account_assignment . security ]
83
+
84
+ instance_arn = tolist (data. aws_ssoadmin_instances . main . arns )[0 ]
85
+ managed_policy_arn = " arn:aws:iam::aws:policy/AdministratorAccess"
86
+ permission_set_arn = aws_ssoadmin_permission_set. SecurityTeam . arn
87
+ }
88
+
89
+ resource "aws_ssoadmin_permission_set" "Billing" {
90
+ name = " Billing"
91
+ description = " Access for the PLC"
92
+ instance_arn = tolist (data. aws_ssoadmin_instances . main . arns )[0 ]
93
+ }
94
+ resource "aws_ssoadmin_managed_policy_attachment" "Billing" {
95
+ depends_on = [aws_ssoadmin_account_assignment . billing ]
96
+
97
+ instance_arn = tolist (data. aws_ssoadmin_instances . main . arns )[0 ]
98
+ managed_policy_arn = " arn:aws:iam::aws:policy/job-function/Billing"
99
+ permission_set_arn = aws_ssoadmin_permission_set. Billing . arn
100
+ }
101
+
102
+ data "aws_caller_identity" "current" {}
103
+
104
+ resource "aws_ssoadmin_account_assignment" "billing" {
105
+ instance_arn = tolist (data. aws_ssoadmin_instances . main . arns )[0 ]
106
+ permission_set_arn = aws_ssoadmin_permission_set. Billing . arn
107
+
108
+ principal_id = aws_identitystore_group. group [" PLC" ]. group_id
109
+ principal_type = " GROUP"
110
+
111
+ target_id = data. aws_caller_identity . current . account_id
112
+ target_type = " AWS_ACCOUNT"
113
+ }
114
+
115
+ resource "aws_ssoadmin_account_assignment" "security" {
116
+ instance_arn = tolist (data. aws_ssoadmin_instances . main . arns )[0 ]
117
+ permission_set_arn = aws_ssoadmin_permission_set. SecurityTeam . arn
118
+
119
+ principal_id = aws_identitystore_group. group [" Security" ]. group_id
120
+ principal_type = " GROUP"
121
+
122
+ target_id = data. aws_caller_identity . current . account_id
123
+ target_type = " AWS_ACCOUNT"
124
+ }
125
+
126
+ resource "aws_ssoadmin_account_assignment" "Ops" {
127
+ instance_arn = tolist (data. aws_ssoadmin_instances . main . arns )[0 ]
128
+ permission_set_arn = aws_ssoadmin_permission_set. OpsAccess . arn
129
+
130
+ principal_id = aws_identitystore_group. group [" Ops" ]. group_id
131
+ principal_type = " GROUP"
132
+
133
+ target_id = data. aws_caller_identity . current . account_id
134
+ target_type = " AWS_ACCOUNT"
135
+ }
0 commit comments