【小ネタ】aws-mfaで指定可能な最大セッション時間を検証

aws-mfaで指定可能な最大セッション時間を検証してみました。
2021.03.31

こんにちは!コンサル部のinomaso(@inomasosan)です。

TerraformはMFA + AssumeRoleに未対応のため、これらが必要なアカウントで作業する場合はひと手間かけなければなりません。
私の環境だとaws-mfaというOSSを利用しているのですが、IAMロールのデフォルトのセッション時間は1時間のため、検証中などは地味にストレスになりました。
そこで最大まで延長するために検証してみることにしました。

この記事で学べること

  • aws-mfaで指定可能な最大セッション時間

そもそもaws-mfaって?

弊社ブログに詳しくまとまっている記事がございますので、こちらをご参照ください。

結論からいうと?

セッション時間は最大12時間まで指定することが可能です。

環境

今回実行した環境は以下の通りです。

  • macOS Catalina 10.15.7
  • aws-mfa

調べてみた

1. --durationを確認する

とりあえずhelpから--durationで指定可能な時間を確認してみます。

% aws-mfa --help
〜
  --duration DURATION   The duration, in seconds, that the temporary credentials should remain
                        valid. Minimum value: 900 (15 minutes). Maximum: 129600 (36 hours).
                        Defaults to 43200 (12 hours), or 3600 (one hour) when using '--assume-
                        role'. This value can also be provided via the environment variable
                        'MFA_STS_DURATION'.
〜

見た感じ、最大129600秒(36時間)まで指定できそうでした。

やってみた

1. 129600秒で試してみる

セッション時間をヘルプの最大時間に設定してテストしてみました。

% aws-mfa --profile personal --duration 129600
INFO - Validating credentials for profile: personal
INFO - Short term credentials section personal is missing, obtaining new credentials.
Enter AWS MFA code for device [arn:aws:iam::123456789:mfa/hogehoge] (renewing for 129600 seconds):123456
INFO - Assuming Role - Profile: personal, Role: arn:aws:iam::987654321:role/hogehoge, Duration: 129600
ERROR - An error occured while calling assume role: An error occurred (ValidationError) when calling the AssumeRole operation: 1 validation error detected: Value '129600' at 'durationSeconds' failed to satisfy constraint: Member must have value less than or equal to 43200

エラーメッセージを確認してみると、どうも43200以下にする必要があることが判りました。

2. 43200秒で試してみる

--durarionを43200に変更してテストしてみました。

% aws-mfa --profile personal --duration 43200
INFO - Validating credentials for profile: personal
INFO - Short term credentials section personal is missing, obtaining new credentials.
Enter AWS MFA code for device [arn:aws:iam::123456789:mfa/hogehoge] (renewing for 43200 seconds):123456
INFO - Assuming Role - Profile: personal, Role: arn:aws:iam::987654321:role/hogehoge, Duration: 43200
ERROR - An error occured while calling assume role: An error occurred (ValidationError) when calling the AssumeRole operation: The requested DurationSeconds exceeds the MaxSessionDuration set for this role.

今度はIAMロールのMaxSessionDurationを超えていると怒られました。

3. IAMロールの最大セッション時間を変更

AWSマネージメントコンソールからIAMロールの最大セッション時間を確認したところ、デフォルト設定だと1時間であることが分かりました。

最大43200秒(12時間)まで指定可能なので、今回は43200秒に変更しました。

4. 43200秒でもう一度試してみる

--durarionを43200で再度テストしてみました。

% aws-mfa --profile personal --duration 43200
INFO - Validating credentials for profile: personal
INFO - Short term credentials section personal is missing, obtaining new credentials.
Enter AWS MFA code for device [arn:aws:iam::123456789:mfa/hogehoge] (renewing for 43200 seconds):123456
INFO - Assuming Role - Profile: personal, Role: arn:aws:iam::987654321:role/hogehoge, Duration: 43200
INFO - Success! Your credentials will expire in 43200 seconds at: 2021-04-01 03:34:35+00:00

今度は無事にコマンドが成功して、一時的な資格情報が生成されました。

まとめ

aws-mfaでセッション時間を延長する場合は、IAMロール自体の最大セッション時間の変更も必要でした。

この記事が、どなたかのお役に立てば幸いです。それでは!

参考記事