MFA必須でセルフサービスなIAMポリシーとCLI利用時のポリシー

基本的なセルフサービスでMFA設定を行ってもらうためのポリシーは以下。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "AllowListActions",
            "Action": [
                "iam:ListAccountAliases",
                "iam:GetAccountSummary",
                "iam:ListVirtualMFADevices",
                "iam:ListUsers"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowIndividualUserToManageTheirOwnMFA",
            "Effect": "Allow",
            "Action": [
                "iam:CreateVirtualMFADevice",
                "iam:DeleteVirtualMFADevice",
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:ListMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": [
                "arn:aws:iam::*:user/${aws:username}",
                "arn:aws:iam::*:mfa/${aws:username}"
            ]
        },
        {
            "Sid": "DenyAllExceptListedIfNoMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:CreateVirtualMFADevice",
                "iam:EnableMFADevice",
                "iam:ListMFADevices",
                "iam:ListVirtualMFADevices",
                "iam:ResyncMFADevice",
                "iam:ListUsers"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}

  • AllowListActionsステートメントで最低限の参照権限を付与
  • AllowIndividualUserToManageTheirOwnMFAステートメントにより、ユーザーは自分の仮想 MFA デバイスを作成、更新、削除ができ、U2F、またはハードウェア MFA デバイスを表示または管理できます。ユーザーは、各自の仮想 MFA デバイス以外の MFA デバイスを作成または削除することはできません。
  • DenyAllExceptListedIfNoMFAステートメントによりMFAを設定していない場合は、MFA設定関連以外の操作ができなくなります。

このポリシーをつけた後、ユーザはhttps://console.aws.amazon.com/iam/home#/security_credentialsから自身のMFAデバイスの設定が可能です。

CLI利用時

基本的にはMFA設定必須にしたいグループやユーザにこのポリシーをつければいいのですが、このポリシーだとCLIの時にもMFA必須となります。具体的には以下のようにしているとアクセスキーを用いたCLIでもMFA認証が必要になります。

            "Effect": "Deny",            
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }

あまりオススメしませんが、マネジメントコンソールへのログインにはMFA必須だけど、CLIのときはMFA無くてもいいという場合は、MFA無いとDenyではなくMFAがあれば許可というふうにポリシーを変えてあげます。

ただし、このポリシー以外のポリシーをアタッチしないようにする必要があります。別のポリシーにもすべて”aws:MultiFactorAuthPresent”: “true”の条件を入れるのは非現実的だからです。そのためこのポリシーに許可したいアクションをすべて書く必要があり、運用的には大変になるので許可したいアクションが限られている場合にのみこの方式にします。

            "Effect": "Allow",
            "Action": [
                許可したいアクション,
            ]     
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "true"
                }
            }

CLIでMFA認証するのはちょっと面倒なので、こちらの記事で一発で行うスクリプトを紹介しています。

コメントする

メールアドレスが公開されることはありません。