Skip to content

Commit 0bfca17

Browse files
authored
Merge pull request #23 from chris-qa-org/support-user-assignments
Support user assignments
2 parents 0ce134b + fc3637a commit 0bfca17

File tree

2 files changed

+71
-2
lines changed

2 files changed

+71
-2
lines changed

README.md

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@ module "aws_organizations_and_sso" {
2929
managed_policies = [
3030
"AWSReadOnlyAccess"
3131
]
32+
},
33+
"billing" = {
34+
description = "Billing Access",
35+
relay_state = "https://console.aws.amazon.com/billing/home?#/",
36+
managed_policies = [
37+
"job-function/Billing"
38+
]
3239
}
3340
}
3441
@@ -50,6 +57,13 @@ module "aws_organizations_and_sso" {
5057
]
5158
}
5259
}
60+
user_assignments = {
61+
"Alex" = {
62+
permission_sets = [
63+
"billing"
64+
]
65+
}
66+
}
5367
},
5468
"existing-account-name" = {
5569
@@ -63,6 +77,13 @@ module "aws_organizations_and_sso" {
6377
]
6478
}
6579
}
80+
user_assignments = {
81+
"Alex" = {
82+
permission_sets = [
83+
"billing"
84+
]
85+
}
86+
}
6687
}
6788
}
6889
}
@@ -155,11 +176,13 @@ module "aws_organizations_and_sso" {
155176
| [aws_organizations_account.account](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/organizations_account) | resource |
156177
| [aws_organizations_organization.root](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/organizations_organization) | resource |
157178
| [aws_organizations_organizational_unit.unit](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/organizations_organizational_unit) | resource |
158-
| [aws_ssoadmin_account_assignment.assignment](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ssoadmin_account_assignment) | resource |
179+
| [aws_ssoadmin_account_assignment.group_assignment](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ssoadmin_account_assignment) | resource |
180+
| [aws_ssoadmin_account_assignment.user_assignment](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ssoadmin_account_assignment) | resource |
159181
| [aws_ssoadmin_managed_policy_attachment.attachment](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ssoadmin_managed_policy_attachment) | resource |
160182
| [aws_ssoadmin_permission_set.permission_set](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ssoadmin_permission_set) | resource |
161183
| [aws_ssoadmin_permission_set_inline_policy.policy](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ssoadmin_permission_set_inline_policy) | resource |
162184
| [aws_identitystore_group.aws](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/identitystore_group) | data source |
185+
| [aws_identitystore_user.aws](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/identitystore_user) | data source |
163186
| [aws_ssoadmin_instances.ssoadmin_instances](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ssoadmin_instances) | data source |
164187

165188
## Inputs

sso.tf

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,25 @@ data "aws_identitystore_group" "aws" {
1919
}
2020
}
2121

22+
data "aws_identitystore_user" "aws" {
23+
for_each = local.enable_sso ? toset(
24+
flatten([
25+
for account in flatten([
26+
for unit_name, unit in local.organization_config["units"] : [
27+
for account_name in keys(local.organization_config["units"][unit_name]["accounts"]) : local.organization_config["units"][unit_name]["accounts"][account_name]
28+
]
29+
]) : keys(account["user_assignments"])
30+
])
31+
) : toset([])
32+
33+
identity_store_id = tolist(data.aws_ssoadmin_instances.ssoadmin_instances.identity_store_ids)[0]
34+
35+
filter {
36+
attribute_path = "UserName"
37+
attribute_value = each.key
38+
}
39+
}
40+
2241
resource "aws_ssoadmin_permission_set" "permission_set" {
2342
for_each = local.enable_sso ? local.sso_permission_sets : {}
2443

@@ -58,7 +77,7 @@ resource "aws_ssoadmin_permission_set_inline_policy" "policy" {
5877
permission_set_arn = aws_ssoadmin_permission_set.permission_set[each.key].arn
5978
}
6079

61-
resource "aws_ssoadmin_account_assignment" "assignment" {
80+
resource "aws_ssoadmin_account_assignment" "group_assignment" {
6281
for_each = local.enable_sso ? {
6382
for assignment in flatten([
6483
for unit_name, unit in local.organization_config["units"] : [
@@ -84,3 +103,30 @@ resource "aws_ssoadmin_account_assignment" "assignment" {
84103
target_id = aws_organizations_account.account[each.value["account_name"]].id
85104
target_type = "AWS_ACCOUNT"
86105
}
106+
107+
resource "aws_ssoadmin_account_assignment" "user_assignment" {
108+
for_each = local.enable_sso ? {
109+
for assignment in flatten([
110+
for unit_name, unit in local.organization_config["units"] : [
111+
for account_name in keys(local.organization_config["units"][unit_name]["accounts"]) : [
112+
for user_name, user_assignments in local.organization_config["units"][unit_name]["accounts"][account_name]["user_assignments"] : {
113+
for permission_set in local.organization_config["units"][unit_name]["accounts"][account_name]["user_assignments"][user_name]["permission_sets"] : "${account_name}_${user_name}_${permission_set}" => {
114+
account_name = account_name
115+
user_name = user_name
116+
permission_set = permission_set
117+
}
118+
}
119+
]
120+
]
121+
]) : keys(assignment)[0] => assignment[keys(assignment)[0]]
122+
} : {}
123+
124+
instance_arn = aws_ssoadmin_permission_set.permission_set[each.value["permission_set"]].instance_arn
125+
permission_set_arn = aws_ssoadmin_permission_set.permission_set[each.value["permission_set"]].arn
126+
127+
principal_id = data.aws_identitystore_user.aws[each.value["user_name"]].user_id
128+
principal_type = "USER"
129+
130+
target_id = aws_organizations_account.account[each.value["account_name"]].id
131+
target_type = "AWS_ACCOUNT"
132+
}

0 commit comments

Comments
 (0)