blog-image

aws cliでMFA認証突破する方法

2023-11-21

awsawscliMFA

無駄に手こずってしまったのでメモ 個人使用のAWSアカウントなどではセキュリティはそこまで意識せずに使いがちですが 企業様のものではそうはいきません。

IAMユーザーを発行してもらい、認証情報やアクセスキーをもらう際にMFAが強制的に有効になっていることはあると思います。

その場合、AWSコンソールへのアクセスは設定したMFAデバイスからコードを取得し入力するだけですが cliの場合どうするの?というところでちょっとハマってしまいました。

AWS cliでMFAコードの入力をする方法

AWS cliで MFA を利用するときには、aws sts get-session-tokenコマンドで一時的なアクセスキーを取得できます。このコマンドを実行するために、MFA Device の ARN が必要です。

MFA Device の ARNはIAMダッシュボードのユーザーから該当のユーザーを選択し、セキュリティ認証情報タブの多要素認証 (MFA) から確認できます。

sc_iam_mfa.png

下記はaws sts get-session-tokenのコマンド例です。 認証の有効期限は--duration-seconds オプションに秒数指定で、任意の期限に設定できます。ただし指定できるのは15分から36時間の範囲です。

1aws sts get-session-token --serial-number arn:aws:iam::<awsアカウントの番号>:<MFA Device のARN>  --duration-seconds 86400 --token-code 119596

実行が成功すると下記のようなレスポンスが返ってきます

1{
2    "Credentials": {
3        "SecretAccessKey": "secret-access-key",
4        "SessionToken": "temporary-session-token",
5        "Expiration": "expiration-date-time",
6        "AccessKeyId": "access-key-id"
7    }
8}

一時的な認証情報の使用方法

環境変数にセットして使用する

上記で返ってきた値を環境変数にセットして使用します。

Linux:

1export AWS_ACCESS_KEY_ID=<取得したSecretAccessKeyId>
2export AWS_SECRET_ACCESS_KEY=<取得したSecretAccessKey>
3export AWS_SESSION_TOKEN=<取得したSessionToken>

Windows:

1set AWS_ACCESS_KEY_ID=<取得したSecretAccessKeyId>
2set AWS_SECRET_ACCESS_KEY=<取得したSecretAccessKey>
3set AWS_SESSION_TOKEN=<取得したSessionToken>

名前付きプロファイルで使用する

名前付きプロファイルで使用することも出来ます。 ユーザーのホームディレクトリの .awsフォルダにある認証情報ファイルを編集し下記のように設定します。

1[mfa]
2aws_access_key_id = <取得したSecretAccessKeyId>
3aws_secret_access_key = <取得したSecretAccessKey>
4aws_session_token = <取得したSessionToken>

余談

IAMユーザーにMFAを強制するポリシー

1{
2    "Version": "2012-10-17",
3    "Statement": [
4        {
5            "Sid": "AllDenyWithoutMFA",
6            "Effect": "Deny",
7            "Action": [
8                "*"
9            ],
10            "Resource": [
11                "*"
12            ],
13            "Condition": {
14                "BoolIfExists": {
15                    "aws:MultiFactorAuthPresent": false
16                }
17            }
18        }
19    ]
20}