AWSumeで取得したIAMロールの一時クレデンシャル有効期限を延ばしてみた
はじめに
AWSumeを、複数AWS環境のスイッチロールを実現するコマンドラインツールとして使われている方もいらっしゃるのではないでしょうか。
何も指定しないとクレデンシャルの有効期限がデフォルトでは1時間ですので、長いスクリプトを動かすときに途中で有効期限切れになって再度ロール更新が必要です。
そのため、有効期限を延ばす方法を記載します。
長くしてみた
公式ドキュメントは15分から12時間(=60×60×12秒)の間で延長ができるみたいでした。
なので、最長の12時間を指定してみます。
$ awsume nakano-dev --role-duration 43200
Enter MFA token: ****
[nakano-dev] Role credentials will expire 2024-08-30 01:45:22
1時間から12時間に延長できました。
エラーになった
最初何も考えず実行するとエラーになりました。
$ awsume nakano-dev --role-duration 43200
Enter MFA token: ****
Awsume error: An error occurred (ValidationError) when calling the AssumeRole operation: The requested DurationSeconds exceeds the MaxSessionDuration set for this role.
どうやら、引き受けるロールの最大セッション時間が1時間になっていることが原因でした。
マネコンの編集ボタンから12時間に変更後に、AWSumeを実行すると成功しました。
さらに、別の方法で試してみた
ロールの有効期限期間の指定方法はいくつかあって、複数を指定できるみたいです。
複数指定すると優先順位に従って、高い方から採用されます。
1. --role-duration
2. スイッチロールするプロファイルのrole_durationプロパティ
3. Awsumeのグローバル設定のrole-durationプロパティ
複数の方法で設定してみた
2番の場合は以下のように指定します。
duration_secondsは15分以上でないといけません
2番は有効期限を15分に指定しました。
[profile nakano-dev]
role_arn = arn:aws:iam::******:role/cm-nakano.yoshiyuki
mfa_serial = arn:aws:iam::******:mfa/cm-nakano.yoshiyuki
source_profile = default
duration_seconds = 900
3番の場合は以下です。
有効期限を3時間に指定しました。
colors: true
fuzzy-match: false
role-duration: 10800
ロール優先順の結果
結果です。
2番と3番を同時設定
2番と3番を指定した状態で、実行すると2番が優先されました。
ちゃんと現在時刻の15分後になっています。
$ date
Thu Aug 29 15:36:29 JST 2024
$ awsume nakano-dev
Session token will expire at 2024-08-30 00:22:55
[nakano-dev] Role credentials will expire 2024-08-29 15:51:37
1番、2番、3番を同時設定
1番、2番、3番を全て指定すると、1番が優先されました。
ちゃんと現在時刻の12時間後になっています。
$ date
Thu Aug 29 15:37:16 JST 2024
$ awsume nakano-dev --role-duration 43200
Enter MFA token: 470195
[nakano-dev] Role credentials will expire 2024-08-30 03:37:28
おわりに
誰かのお役に立てれば。
参考