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) から確認できます。
下記は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}