|
| 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 | +} |
0 commit comments