Skip to content
This repository was archived by the owner on Feb 11, 2020. It is now read-only.

Commit 7377fc4

Browse files
authored
Enforce MFA (#143)
* Enforce MFA * allow new users to sign-in and change passwd * policy fiddling to allow STS again * Apply auto-formatting rules
1 parent 4c71646 commit 7377fc4

2 files changed

Lines changed: 145 additions & 1 deletion

File tree

RELEASE.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
RELEASE_TYPE: patch
2+
3+
Enforce MFA

iam/prebuilt/users/console_user/main.tf

Lines changed: 142 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,154 @@ resource "aws_iam_access_key" "access_key" {
1212
pgp_key = "${var.pgp_key}"
1313
}
1414

15-
resource "aws_iam_user_policy" "policy" {
15+
resource "aws_iam_user_policy" "sts" {
1616
user = "${aws_iam_user.user.name}"
1717
policy = "${data.aws_iam_policy_document.sts.json}"
1818
}
1919

20+
resource "aws_iam_user_policy" "mfa" {
21+
user = "${aws_iam_user.user.name}"
22+
policy = "${data.aws_iam_policy_document.mfa.json}"
23+
}
24+
25+
resource "aws_iam_user_policy" "deny_no_mfa" {
26+
user = "${aws_iam_user.user.name}"
27+
policy = "${data.aws_iam_policy_document.deny_no_mfa.json}"
28+
}
29+
30+
data "aws_iam_policy_document" "mfa" {
31+
"statement" {
32+
effect = "Allow"
33+
34+
actions = [
35+
"iam:ListAccountAliases",
36+
"iam:ListUsers",
37+
"iam:ListVirtualMFADevices",
38+
"iam:GetAccountPasswordPolicy",
39+
"iam:GetAccountSummary",
40+
]
41+
42+
resources = ["*"]
43+
}
44+
45+
"statement" {
46+
effect = "Allow"
47+
48+
actions = [
49+
"iam:ChangePassword",
50+
"iam:CreateAccessKey",
51+
"iam:CreateLoginProfile",
52+
"iam:DeleteAccessKey",
53+
"iam:DeleteLoginProfile",
54+
"iam:GetLoginProfile",
55+
"iam:ListAccessKeys",
56+
"iam:UpdateAccessKey",
57+
"iam:UpdateLoginProfile",
58+
"iam:ListSigningCertificates",
59+
"iam:DeleteSigningCertificate",
60+
"iam:UpdateSigningCertificate",
61+
"iam:UploadSigningCertificate",
62+
"iam:ListSSHPublicKeys",
63+
"iam:GetSSHPublicKey",
64+
"iam:DeleteSSHPublicKey",
65+
"iam:UpdateSSHPublicKey",
66+
"iam:UploadSSHPublicKey",
67+
]
68+
69+
resources = [
70+
"arn:aws:iam::*:user/${aws_iam_user.user.name}",
71+
]
72+
}
73+
74+
"statement" {
75+
effect = "Allow"
76+
77+
actions = [
78+
"iam:ListMFADevices",
79+
]
80+
81+
resources = [
82+
"arn:aws:iam::*:mfa/*",
83+
"arn:aws:iam::*:user/${aws_iam_user.user.name}",
84+
]
85+
}
86+
87+
"statement" {
88+
effect = "Allow"
89+
90+
actions = [
91+
"iam:CreateVirtualMFADevice",
92+
"iam:DeleteVirtualMFADevice",
93+
"iam:EnableMFADevice",
94+
"iam:ResyncMFADevice",
95+
]
96+
97+
resources = [
98+
"arn:aws:iam::*:mfa/${aws_iam_user.user.name}",
99+
"arn:aws:iam::*:user/${aws_iam_user.user.name}",
100+
]
101+
}
102+
103+
"statement" {
104+
effect = "Allow"
105+
106+
actions = [
107+
"iam:DeactivateMFADevice",
108+
]
109+
110+
resources = [
111+
"arn:aws:iam::*:mfa/${aws_iam_user.user.name}",
112+
"arn:aws:iam::*:user/${aws_iam_user.user.name}",
113+
]
114+
115+
condition {
116+
test = "Bool"
117+
values = ["true"]
118+
variable = "aws:MultiFactorAuthPresent"
119+
}
120+
}
121+
}
122+
123+
data "aws_iam_policy_document" "deny_no_mfa" {
124+
"statement" {
125+
effect = "Deny"
126+
127+
not_actions = [
128+
"iam:ChangePassword",
129+
"iam:CreateLoginProfile",
130+
"iam:CreateVirtualMFADevice",
131+
"iam:ListVirtualMFADevices",
132+
"iam:EnableMFADevice",
133+
"iam:ResyncMFADevice",
134+
"iam:ListAccountAliases",
135+
"iam:ListUsers",
136+
"iam:ListSSHPublicKeys",
137+
"iam:ListAccessKeys",
138+
"iam:ListServiceSpecificCredentials",
139+
"iam:ListMFADevices",
140+
"iam:GetAccountSummary",
141+
"sts:*",
142+
]
143+
144+
resources = [
145+
"*",
146+
]
147+
148+
condition {
149+
test = "BoolIfExists"
150+
151+
values = [
152+
"false",
153+
]
154+
155+
variable = "aws:MultiFactorAuthPresent"
156+
}
157+
}
158+
}
159+
20160
data "aws_iam_policy_document" "sts" {
21161
"statement" {
162+
effect = "Allow"
22163
actions = ["sts:*"]
23164
resources = ["*"]
24165
}

0 commit comments

Comments
 (0)