👀

AWS CLIでMFAを強制する

2023/09/17に公開

設定方法

MFAを強制したいユーザーに、以下のようなポリシーを適用するだけ。

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

AWS CLIを使用するには、MFAを行ってトークンを取得し、環境変数を設定する。

//トークンを取得
aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token
//環境変数を設定
export AWS_ACCESS_KEY_ID=example-access-key-as-in-previous-output
export AWS_SECRET_ACCESS_KEY=example-secret-access-key-as-in-previous-output
export AWS_SESSION_TOKEN=example-session-token-as-in-previous-output

参考

https://repost.aws/ja/knowledge-center/authenticate-mfa-cli

疑問

MFAが行われていない場合に全てのアクションを拒否するポリシーを適用したにもかかわらず、なぜSTS関連のコマンドが発行できてしまうのか。AWSのサービスとしてMFAをサポートしていないということが答えになる。STS以外の他のコマンドでは、MFAしていない場合はAccess Denied(not authrized to perform)されました。

GetSessionToken オペレーションの目的は、MFA を使用してユーザーを認証することです。認証オペレーションを制御するためにポリシーを使用することはできません。

一時的な認証情報を返す他の AWS STS API オペレーションは、MFA をサポートしていません。

参考

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html

Discussion