Edited at

AWS IAMでのMFA強制

AWSのIAMをユーザに割り振ったけど、セキュリティ強化のためにMFA(多要素認証)を強制にしたい場合ってありますよね?


MFAとは

セキュリティを向上させるには、多要素認証(MFA)を設定して AWS リソースを保護することを推奨します。MFA は、AWS ウェブサイトまたはサービスへのアクセス時に承認済みの認証デバイスまたは SMS テキストメッセージから取得した一意の認証コードを入力するようユーザーに要求することで、セキュリティをさらに高めます。

(AWS公式より)


手順

MFAによるアクセスでなければ何もさせたくない場合は

{

"Version": "2012-10-17",
"Statement": [
{
"Sid": "BlockAnyAccessOtherThanAboveUnlessSignedInWithMFA",
"Effect": "Deny",
"NotAction": "iam:*",
"Resource": "*",
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "false"
}
}
}
]
}

としてIAMのポシリーを作成し、IAMユーザにアタッチすれば良いです。

NotActionの部分でiamのアクションを許可しているのは、ログインした後、iamの設定画面でmfaを有効化してもらうためです。

厳密にはiamのmfa有効化のアクションのみに絞るべきですね。

(ただ、ユーザにMFAを有効化するにはどうするかを教えなければいけません。。MFA有効化を管理者が行い、初期ログイン時に設定フローが出てくる、とかしてほしいです。。。)

上記ポリシーをアタッチしたユーザでMFAを使わずログインすると、IAM以外はエラーとなり、見えないはずです。

また、上記設定すると、自身のMFAの有効化もできなくなってしまうので、下記も一緒にアタッチした方が良いです。

私は別のPolicyとして作りましたが、一緒のPolicyにしても良いかと思います。

{

"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"iam:DeactivateMFADevice",
"iam:EnableMFADevice",
"iam:ResyncMFADevice",
"iam:ListMFADevices"
],
"Resource": "arn:aws:iam::489928898057:user/${aws:username}"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"iam:DeleteVirtualMFADevice",
"iam:CreateVirtualMFADevice"
],
"Resource": "arn:aws:iam::489928898057:mfa/${aws:username}"
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": "iam:ListUsers",
"Resource": "arn:aws:iam::489928898057:user/"
},
{
"Sid": "VisualEditor3",
"Effect": "Allow",
"Action": "iam:ListVirtualMFADevices",
"Resource": "arn:aws:iam::489928898057:mfa/"
}
]
}