はじめに

MFAでの認証が色々なサービスで強制化していってる昨今。
クライアントによっては、AWSマネジメントコンソールへのログインはMFA強制にしたい
という話が上がっている案件も多いんじゃないかと思うのですが
案外その手の記事はGoogle先生に聞いてもバシッと決まらなかったので
作成したIAMポリシーを公開しておきます。

IAMポリシーの作成

ベースにするのはAWS公式のユーザーガイド

不要なものを削除、追加した方が良さそうなものは追加して出来上がったポリシーが以下。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowViewAccountInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetLoginProfile",
                "iam:GetAccountPasswordPolicy",
                "iam:ListVirtualMFADevices"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowManageOwnPasswords",
            "Effect": "Allow",
            "Action": [
                "iam:ChangePassword",
                "iam:GetUser"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "AllowManageOwnAccessKeys",
            "Effect": "Allow",
            "Action": [
                "iam:CreateAccessKey",
                "iam:DeleteAccessKey",
                "iam:ListAccessKeys",
                "iam:UpdateAccessKey"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "AllowManageOwnVirtualMFADevice",
            "Effect": "Allow",
            "Action": [
                "iam:CreateVirtualMFADevice"
            ],
            "Resource": "arn:aws:iam::*:mfa/*"
        },
        {
            "Sid": "AllowManageOwnUserMFA",
            "Effect": "Allow",
            "Action": [
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:ListMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "DenyAllExceptListedIfNoMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:CreateVirtualMFADevice",
                "iam:EnableMFADevice",
                "iam:GetUser",
                "iam:ChangePassword",
                "iam:ListMFADevices",
                "iam:ListVirtualMFADevices",
                "iam:ResyncMFADevice",
                "sts:GetSessionToken"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}

注記

  • MFA設定していない場合、MFAデバイス設定以外の操作を禁止
  • 初回ログイン時のパスワード変更は可能(初回以外もパスワード変更だけは可能)
  • MFA設定してない→MFAデバイス設定にリダイレクトする、みたいな便利なことはできない
  • ログイン後、MFA認証されてない場合はコンソールが基本全てAccess deniedで表示されるので自分でMFA設定する
  • IdpでMFA認証済みとかは考えてないのでID/PASSでログインするパターンにのみ対応

MFA認証強制したいだけってシンプルな要望な割に情報出てこなかったのでまとめてみました。
何かのお役に立てば幸いです。