Skip to content

Commit 543f101

Browse files
fix: Direct policy attachment of iam-policy-created resources (#428)
Co-authored-by: Anton Babenko <[email protected]>
1 parent 856b543 commit 543f101

File tree

17 files changed

+148
-147
lines changed

17 files changed

+148
-147
lines changed

.pre-commit-config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
repos:
22
- repo: https://github.com/antonbabenko/pre-commit-terraform
3-
rev: v1.83.0
3+
rev: v1.83.5
44
hooks:
55
- id: terraform_fmt
66
- id: terraform_wrapper_module_for_each
@@ -24,7 +24,7 @@ repos:
2424
- '--args=--only=terraform_standard_module_structure'
2525
- '--args=--only=terraform_workspace_remote'
2626
- repo: https://github.com/pre-commit/pre-commit-hooks
27-
rev: v4.4.0
27+
rev: v4.5.0
2828
hooks:
2929
- id: check-merge-conflict
3030
- id: end-of-file-fixer

modules/iam-user/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ resource "aws_iam_user_ssh_key" "this" {
4747
}
4848

4949
resource "aws_iam_user_policy_attachment" "this" {
50-
for_each = var.create_user ? toset(var.policy_arns) : []
50+
for_each = { for k, v in var.policy_arns : k => v if var.create_user }
5151

5252
user = aws_iam_user.this[0].name
5353
policy_arn = each.value

wrappers/iam-account/main.tf

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@ module "wrapper" {
33

44
for_each = var.items
55

6-
get_caller_identity = try(each.value.get_caller_identity, var.defaults.get_caller_identity, true)
76
account_alias = try(each.value.account_alias, var.defaults.account_alias)
7+
allow_users_to_change_password = try(each.value.allow_users_to_change_password, var.defaults.allow_users_to_change_password, true)
88
create_account_password_policy = try(each.value.create_account_password_policy, var.defaults.create_account_password_policy, true)
9+
get_caller_identity = try(each.value.get_caller_identity, var.defaults.get_caller_identity, true)
10+
hard_expiry = try(each.value.hard_expiry, var.defaults.hard_expiry, false)
911
max_password_age = try(each.value.max_password_age, var.defaults.max_password_age, 0)
1012
minimum_password_length = try(each.value.minimum_password_length, var.defaults.minimum_password_length, 8)
11-
allow_users_to_change_password = try(each.value.allow_users_to_change_password, var.defaults.allow_users_to_change_password, true)
12-
hard_expiry = try(each.value.hard_expiry, var.defaults.hard_expiry, false)
1313
password_reuse_prevention = try(each.value.password_reuse_prevention, var.defaults.password_reuse_prevention, null)
1414
require_lowercase_characters = try(each.value.require_lowercase_characters, var.defaults.require_lowercase_characters, true)
15-
require_uppercase_characters = try(each.value.require_uppercase_characters, var.defaults.require_uppercase_characters, true)
1615
require_numbers = try(each.value.require_numbers, var.defaults.require_numbers, true)
1716
require_symbols = try(each.value.require_symbols, var.defaults.require_symbols, true)
17+
require_uppercase_characters = try(each.value.require_uppercase_characters, var.defaults.require_uppercase_characters, true)
1818
}

wrappers/iam-assumable-role-with-oidc/main.tf

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,22 @@ module "wrapper" {
33

44
for_each = var.items
55

6+
allow_self_assume_role = try(each.value.allow_self_assume_role, var.defaults.allow_self_assume_role, false)
7+
aws_account_id = try(each.value.aws_account_id, var.defaults.aws_account_id, "")
68
create_role = try(each.value.create_role, var.defaults.create_role, false)
9+
force_detach_policies = try(each.value.force_detach_policies, var.defaults.force_detach_policies, false)
10+
max_session_duration = try(each.value.max_session_duration, var.defaults.max_session_duration, 3600)
11+
number_of_role_policy_arns = try(each.value.number_of_role_policy_arns, var.defaults.number_of_role_policy_arns, null)
12+
oidc_fully_qualified_audiences = try(each.value.oidc_fully_qualified_audiences, var.defaults.oidc_fully_qualified_audiences, [])
13+
oidc_fully_qualified_subjects = try(each.value.oidc_fully_qualified_subjects, var.defaults.oidc_fully_qualified_subjects, [])
14+
oidc_subjects_with_wildcards = try(each.value.oidc_subjects_with_wildcards, var.defaults.oidc_subjects_with_wildcards, [])
715
provider_url = try(each.value.provider_url, var.defaults.provider_url, "")
816
provider_urls = try(each.value.provider_urls, var.defaults.provider_urls, [])
9-
aws_account_id = try(each.value.aws_account_id, var.defaults.aws_account_id, "")
10-
tags = try(each.value.tags, var.defaults.tags, {})
17+
role_description = try(each.value.role_description, var.defaults.role_description, "")
1118
role_name = try(each.value.role_name, var.defaults.role_name, null)
1219
role_name_prefix = try(each.value.role_name_prefix, var.defaults.role_name_prefix, null)
13-
role_description = try(each.value.role_description, var.defaults.role_description, "")
1420
role_path = try(each.value.role_path, var.defaults.role_path, "/")
1521
role_permissions_boundary_arn = try(each.value.role_permissions_boundary_arn, var.defaults.role_permissions_boundary_arn, "")
16-
max_session_duration = try(each.value.max_session_duration, var.defaults.max_session_duration, 3600)
1722
role_policy_arns = try(each.value.role_policy_arns, var.defaults.role_policy_arns, [])
18-
number_of_role_policy_arns = try(each.value.number_of_role_policy_arns, var.defaults.number_of_role_policy_arns, null)
19-
oidc_fully_qualified_subjects = try(each.value.oidc_fully_qualified_subjects, var.defaults.oidc_fully_qualified_subjects, [])
20-
oidc_subjects_with_wildcards = try(each.value.oidc_subjects_with_wildcards, var.defaults.oidc_subjects_with_wildcards, [])
21-
oidc_fully_qualified_audiences = try(each.value.oidc_fully_qualified_audiences, var.defaults.oidc_fully_qualified_audiences, [])
22-
force_detach_policies = try(each.value.force_detach_policies, var.defaults.force_detach_policies, false)
23-
allow_self_assume_role = try(each.value.allow_self_assume_role, var.defaults.allow_self_assume_role, false)
23+
tags = try(each.value.tags, var.defaults.tags, {})
2424
}

wrappers/iam-assumable-role-with-saml/main.tf

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,20 @@ module "wrapper" {
33

44
for_each = var.items
55

6+
allow_self_assume_role = try(each.value.allow_self_assume_role, var.defaults.allow_self_assume_role, false)
7+
aws_saml_endpoint = try(each.value.aws_saml_endpoint, var.defaults.aws_saml_endpoint, "https://signin.aws.amazon.com/saml")
68
create_role = try(each.value.create_role, var.defaults.create_role, false)
9+
force_detach_policies = try(each.value.force_detach_policies, var.defaults.force_detach_policies, false)
10+
max_session_duration = try(each.value.max_session_duration, var.defaults.max_session_duration, 3600)
11+
number_of_role_policy_arns = try(each.value.number_of_role_policy_arns, var.defaults.number_of_role_policy_arns, null)
712
provider_id = try(each.value.provider_id, var.defaults.provider_id, "")
813
provider_ids = try(each.value.provider_ids, var.defaults.provider_ids, [])
9-
aws_saml_endpoint = try(each.value.aws_saml_endpoint, var.defaults.aws_saml_endpoint, "https://signin.aws.amazon.com/saml")
10-
tags = try(each.value.tags, var.defaults.tags, {})
14+
role_description = try(each.value.role_description, var.defaults.role_description, "")
1115
role_name = try(each.value.role_name, var.defaults.role_name, null)
1216
role_name_prefix = try(each.value.role_name_prefix, var.defaults.role_name_prefix, null)
13-
role_description = try(each.value.role_description, var.defaults.role_description, "")
1417
role_path = try(each.value.role_path, var.defaults.role_path, "/")
1518
role_permissions_boundary_arn = try(each.value.role_permissions_boundary_arn, var.defaults.role_permissions_boundary_arn, "")
16-
max_session_duration = try(each.value.max_session_duration, var.defaults.max_session_duration, 3600)
1719
role_policy_arns = try(each.value.role_policy_arns, var.defaults.role_policy_arns, [])
18-
number_of_role_policy_arns = try(each.value.number_of_role_policy_arns, var.defaults.number_of_role_policy_arns, null)
19-
force_detach_policies = try(each.value.force_detach_policies, var.defaults.force_detach_policies, false)
20-
allow_self_assume_role = try(each.value.allow_self_assume_role, var.defaults.allow_self_assume_role, false)
20+
tags = try(each.value.tags, var.defaults.tags, {})
2121
trusted_role_actions = try(each.value.trusted_role_actions, var.defaults.trusted_role_actions, ["sts:AssumeRoleWithSAML", "sts:TagSession"])
2222
}

wrappers/iam-assumable-role/main.tf

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,33 @@ module "wrapper" {
33

44
for_each = var.items
55

6-
trusted_role_actions = try(each.value.trusted_role_actions, var.defaults.trusted_role_actions, ["sts:AssumeRole", "sts:TagSession"])
7-
trusted_role_arns = try(each.value.trusted_role_arns, var.defaults.trusted_role_arns, [])
8-
trusted_role_services = try(each.value.trusted_role_services, var.defaults.trusted_role_services, [])
9-
mfa_age = try(each.value.mfa_age, var.defaults.mfa_age, 86400)
10-
max_session_duration = try(each.value.max_session_duration, var.defaults.max_session_duration, 3600)
11-
create_role = try(each.value.create_role, var.defaults.create_role, false)
6+
admin_role_policy_arn = try(each.value.admin_role_policy_arn, var.defaults.admin_role_policy_arn, "arn:aws:iam::aws:policy/AdministratorAccess")
7+
allow_self_assume_role = try(each.value.allow_self_assume_role, var.defaults.allow_self_assume_role, false)
8+
attach_admin_policy = try(each.value.attach_admin_policy, var.defaults.attach_admin_policy, false)
9+
attach_poweruser_policy = try(each.value.attach_poweruser_policy, var.defaults.attach_poweruser_policy, false)
10+
attach_readonly_policy = try(each.value.attach_readonly_policy, var.defaults.attach_readonly_policy, false)
11+
create_custom_role_trust_policy = try(each.value.create_custom_role_trust_policy, var.defaults.create_custom_role_trust_policy, false)
1212
create_instance_profile = try(each.value.create_instance_profile, var.defaults.create_instance_profile, false)
13-
role_name = try(each.value.role_name, var.defaults.role_name, null)
14-
role_name_prefix = try(each.value.role_name_prefix, var.defaults.role_name_prefix, null)
15-
role_path = try(each.value.role_path, var.defaults.role_path, "/")
16-
role_requires_mfa = try(each.value.role_requires_mfa, var.defaults.role_requires_mfa, true)
17-
role_permissions_boundary_arn = try(each.value.role_permissions_boundary_arn, var.defaults.role_permissions_boundary_arn, "")
18-
tags = try(each.value.tags, var.defaults.tags, {})
13+
create_role = try(each.value.create_role, var.defaults.create_role, false)
1914
custom_role_policy_arns = try(each.value.custom_role_policy_arns, var.defaults.custom_role_policy_arns, [])
2015
custom_role_trust_policy = try(each.value.custom_role_trust_policy, var.defaults.custom_role_trust_policy, "")
16+
force_detach_policies = try(each.value.force_detach_policies, var.defaults.force_detach_policies, false)
17+
max_session_duration = try(each.value.max_session_duration, var.defaults.max_session_duration, 3600)
18+
mfa_age = try(each.value.mfa_age, var.defaults.mfa_age, 86400)
2119
number_of_custom_role_policy_arns = try(each.value.number_of_custom_role_policy_arns, var.defaults.number_of_custom_role_policy_arns, null)
22-
admin_role_policy_arn = try(each.value.admin_role_policy_arn, var.defaults.admin_role_policy_arn, "arn:aws:iam::aws:policy/AdministratorAccess")
2320
poweruser_role_policy_arn = try(each.value.poweruser_role_policy_arn, var.defaults.poweruser_role_policy_arn, "arn:aws:iam::aws:policy/PowerUserAccess")
2421
readonly_role_policy_arn = try(each.value.readonly_role_policy_arn, var.defaults.readonly_role_policy_arn, "arn:aws:iam::aws:policy/ReadOnlyAccess")
25-
attach_admin_policy = try(each.value.attach_admin_policy, var.defaults.attach_admin_policy, false)
26-
attach_poweruser_policy = try(each.value.attach_poweruser_policy, var.defaults.attach_poweruser_policy, false)
27-
attach_readonly_policy = try(each.value.attach_readonly_policy, var.defaults.attach_readonly_policy, false)
28-
force_detach_policies = try(each.value.force_detach_policies, var.defaults.force_detach_policies, false)
2922
role_description = try(each.value.role_description, var.defaults.role_description, "")
30-
role_sts_externalid = try(each.value.role_sts_externalid, var.defaults.role_sts_externalid, [])
31-
allow_self_assume_role = try(each.value.allow_self_assume_role, var.defaults.allow_self_assume_role, false)
23+
role_name = try(each.value.role_name, var.defaults.role_name, null)
24+
role_name_prefix = try(each.value.role_name_prefix, var.defaults.role_name_prefix, null)
25+
role_path = try(each.value.role_path, var.defaults.role_path, "/")
26+
role_permissions_boundary_arn = try(each.value.role_permissions_boundary_arn, var.defaults.role_permissions_boundary_arn, "")
27+
role_requires_mfa = try(each.value.role_requires_mfa, var.defaults.role_requires_mfa, true)
3228
role_requires_session_name = try(each.value.role_requires_session_name, var.defaults.role_requires_session_name, false)
3329
role_session_name = try(each.value.role_session_name, var.defaults.role_session_name, ["$${aws:username}"])
30+
role_sts_externalid = try(each.value.role_sts_externalid, var.defaults.role_sts_externalid, [])
31+
tags = try(each.value.tags, var.defaults.tags, {})
32+
trusted_role_actions = try(each.value.trusted_role_actions, var.defaults.trusted_role_actions, ["sts:AssumeRole", "sts:TagSession"])
33+
trusted_role_arns = try(each.value.trusted_role_arns, var.defaults.trusted_role_arns, [])
34+
trusted_role_services = try(each.value.trusted_role_services, var.defaults.trusted_role_services, [])
3435
}

wrappers/iam-assumable-roles-with-saml/main.tf

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,29 @@ module "wrapper" {
33

44
for_each = var.items
55

6-
provider_id = try(each.value.provider_id, var.defaults.provider_id, "")
7-
provider_ids = try(each.value.provider_ids, var.defaults.provider_ids, [])
8-
aws_saml_endpoint = try(each.value.aws_saml_endpoint, var.defaults.aws_saml_endpoint, "https://signin.aws.amazon.com/saml")
9-
allow_self_assume_role = try(each.value.allow_self_assume_role, var.defaults.allow_self_assume_role, false)
10-
trusted_role_actions = try(each.value.trusted_role_actions, var.defaults.trusted_role_actions, ["sts:AssumeRoleWithSAML", "sts:TagSession"])
11-
create_admin_role = try(each.value.create_admin_role, var.defaults.create_admin_role, false)
126
admin_role_name = try(each.value.admin_role_name, var.defaults.admin_role_name, "admin")
137
admin_role_path = try(each.value.admin_role_path, var.defaults.admin_role_path, "/")
14-
admin_role_policy_arns = try(each.value.admin_role_policy_arns, var.defaults.admin_role_policy_arns, ["arn:aws:iam::aws:policy/AdministratorAccess"])
158
admin_role_permissions_boundary_arn = try(each.value.admin_role_permissions_boundary_arn, var.defaults.admin_role_permissions_boundary_arn, "")
9+
admin_role_policy_arns = try(each.value.admin_role_policy_arns, var.defaults.admin_role_policy_arns, ["arn:aws:iam::aws:policy/AdministratorAccess"])
1610
admin_role_tags = try(each.value.admin_role_tags, var.defaults.admin_role_tags, {})
11+
allow_self_assume_role = try(each.value.allow_self_assume_role, var.defaults.allow_self_assume_role, false)
12+
aws_saml_endpoint = try(each.value.aws_saml_endpoint, var.defaults.aws_saml_endpoint, "https://signin.aws.amazon.com/saml")
13+
create_admin_role = try(each.value.create_admin_role, var.defaults.create_admin_role, false)
1714
create_poweruser_role = try(each.value.create_poweruser_role, var.defaults.create_poweruser_role, false)
15+
create_readonly_role = try(each.value.create_readonly_role, var.defaults.create_readonly_role, false)
16+
force_detach_policies = try(each.value.force_detach_policies, var.defaults.force_detach_policies, false)
17+
max_session_duration = try(each.value.max_session_duration, var.defaults.max_session_duration, 3600)
1818
poweruser_role_name = try(each.value.poweruser_role_name, var.defaults.poweruser_role_name, "poweruser")
1919
poweruser_role_path = try(each.value.poweruser_role_path, var.defaults.poweruser_role_path, "/")
20-
poweruser_role_policy_arns = try(each.value.poweruser_role_policy_arns, var.defaults.poweruser_role_policy_arns, ["arn:aws:iam::aws:policy/PowerUserAccess"])
2120
poweruser_role_permissions_boundary_arn = try(each.value.poweruser_role_permissions_boundary_arn, var.defaults.poweruser_role_permissions_boundary_arn, "")
21+
poweruser_role_policy_arns = try(each.value.poweruser_role_policy_arns, var.defaults.poweruser_role_policy_arns, ["arn:aws:iam::aws:policy/PowerUserAccess"])
2222
poweruser_role_tags = try(each.value.poweruser_role_tags, var.defaults.poweruser_role_tags, {})
23-
create_readonly_role = try(each.value.create_readonly_role, var.defaults.create_readonly_role, false)
23+
provider_id = try(each.value.provider_id, var.defaults.provider_id, "")
24+
provider_ids = try(each.value.provider_ids, var.defaults.provider_ids, [])
2425
readonly_role_name = try(each.value.readonly_role_name, var.defaults.readonly_role_name, "readonly")
2526
readonly_role_path = try(each.value.readonly_role_path, var.defaults.readonly_role_path, "/")
26-
readonly_role_policy_arns = try(each.value.readonly_role_policy_arns, var.defaults.readonly_role_policy_arns, ["arn:aws:iam::aws:policy/ReadOnlyAccess"])
2727
readonly_role_permissions_boundary_arn = try(each.value.readonly_role_permissions_boundary_arn, var.defaults.readonly_role_permissions_boundary_arn, "")
28+
readonly_role_policy_arns = try(each.value.readonly_role_policy_arns, var.defaults.readonly_role_policy_arns, ["arn:aws:iam::aws:policy/ReadOnlyAccess"])
2829
readonly_role_tags = try(each.value.readonly_role_tags, var.defaults.readonly_role_tags, {})
29-
max_session_duration = try(each.value.max_session_duration, var.defaults.max_session_duration, 3600)
30-
force_detach_policies = try(each.value.force_detach_policies, var.defaults.force_detach_policies, false)
30+
trusted_role_actions = try(each.value.trusted_role_actions, var.defaults.trusted_role_actions, ["sts:AssumeRoleWithSAML", "sts:TagSession"])
3131
}

0 commit comments

Comments
 (0)