Skip to content

Commit 5a0f4fa

Browse files
committed
start sso module
1 parent a5cdaca commit 5a0f4fa

File tree

3 files changed

+87
-0
lines changed

3 files changed

+87
-0
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
data "aws_ssoadmin_instances" "this" {}
2+
3+
locals {
4+
sso_instance_arn = tolist(data.aws_ssoadmin_instances.this.arns)[0]
5+
permission_set_map = { for ps in var.permission_sets : ps.name => ps }
6+
inline_policies_map = { for ps in var.permission_sets : ps.name => ps.inline_policy if ps.inline_policy != "" }
7+
managed_policy_map = { for ps in var.permission_sets : ps.name => ps.policy_attachments if length(ps.policy_attachments) > 0 }
8+
managed_policy_attachments = flatten([
9+
for ps_name, policy_list in local.managed_policy_map : [
10+
for policy in policy_list : {
11+
policy_set = ps_name
12+
policy_arn = policy
13+
}
14+
]
15+
])
16+
managed_policy_attachments_map = {
17+
for policy in local.managed_policy_attachments : "${policy.policy_set}.${policy.policy_arn}" => policy
18+
}
19+
customer_managed_policy_map = { for ps in var.permission_sets : ps.name => ps.customer_managed_policy_attachments if length(ps.customer_managed_policy_attachments) > 0 }
20+
customer_managed_policy_attachments = flatten([
21+
for ps_name, policy_list in local.customer_managed_policy_map : [
22+
for policy in policy_list : {
23+
policy_set = ps_name
24+
policy_name = policy.name
25+
policy_path = policy.path
26+
}
27+
]
28+
])
29+
customer_managed_policy_attachments_map = {
30+
for policy in local.customer_managed_policy_attachments : "${policy.policy_set}.${policy.policy_path}${policy.policy_name}" => policy
31+
}
32+
}
33+
34+
resource "aws_ssoadmin_permission_set" "this" {
35+
for_each = local.permission_set_map
36+
name = each.key
37+
description = each.value.description
38+
instance_arn = local.sso_instance_arn
39+
relay_state = each.value.relay_state != "" ? each.value.relay_state : null
40+
session_duration = each.value.session_duration != "" ? each.value.session_duration : null
41+
tags = each.value.tags != "" ? each.value.tags : null
42+
}
43+
44+
resource "aws_ssoadmin_permission_set_inline_policy" "this" {
45+
for_each = local.inline_policies_map
46+
inline_policy = each.value
47+
instance_arn = local.sso_instance_arn
48+
permission_set_arn = aws_ssoadmin_permission_set.this[each.key].arn
49+
}
50+
51+
resource "aws_ssoadmin_managed_policy_attachment" "this" {
52+
for_each = local.managed_policy_attachments_map
53+
instance_arn = local.sso_instance_arn
54+
managed_policy_arn = each.value.policy_arn
55+
permission_set_arn = aws_ssoadmin_permission_set.this[each.value.policy_set].arn
56+
}
57+
58+
resource "aws_ssoadmin_customer_managed_policy_attachment" "this" {
59+
for_each = local.customer_managed_policy_attachments_map
60+
instance_arn = local.sso_instance_arn
61+
permission_set_arn = aws_ssoadmin_permission_set.this[each.value.policy_set].arn
62+
customer_managed_policy_reference {
63+
name = each.value.policy_name
64+
path = coalesce(each.value.policy_path, "/")
65+
}
66+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
variable "aws_account" {
2+
description = "Account number to create aws resources in. This variable should be defined in the terraform cloud workspace settings"
3+
}
4+
5+
variable "permission_sets" {
6+
type = list(object({
7+
name = string
8+
description = string
9+
relay_state = string
10+
session_duration = string
11+
tags = map(string)
12+
inline_policy = string
13+
policy_attachments = list(string)
14+
customer_managed_policy_attachments = list(object({
15+
name = string
16+
path = optional(string, "/")
17+
}))
18+
}))
19+
20+
default = []
21+
}

users.tf

Whitespace-only changes.

0 commit comments

Comments
 (0)