
【AWS・credential hepler】get session tokenを発行する方法(MFA認証・多要素認証)
前提.session tokenに設定したいユーザーに多要素認証が設定されている事
「IAM」>「ユーザー」>「(ユーザー名選択)」>「セキュリティ認証情報」>「多要素認証(MFA)」欄


↑図のように、「識別子」欄に設定されていればOK。
手順1.~.aws\credentialsを編集する

■credentialsファイルの中身
[credentials_name] #任意の名称
aws_access_key_id=*********** #自身が設定した文字列
aws_secret_access_key=******* #自身が設定した文字列
手順2.MFAトークンを取得する
まず、コマンドプロンプトを開く。

次に、下記コマンドを打つ。
aws sts get-session-token
--serial-number arn:aws:iam::000000:mfa/UserName(多要素認証の識別子)
--token-code 999999(多要素認証登録時に使用したWinAuthなどのアプリ)
--profile credentials_name(手順1で書いた”#任意の名称”)
これに成功すると下記の結果が得られます。
{
"Credentials": {
"AccessKeyId": "XXXXXXXXXXXX",
"SecretAccessKey": "YYYYYYYYYYYYYY",
"SessionToken": "ZZZZZZZZZZZZZZZZZZZZZZZZ",
"Expiration": "yyyy-mm-dd"
}
}
補足.エラーが出た場合
An error occurred (AccessDenied) when calling the GetSessionToken operation: MultiFactorAuthentication failed, unable to validate MFA code. Please verify your MFA serial number is valid and associated with this user.
An error occurred (AccessDenied) when calling the GetSessionToken operation: MultiFactorAuthentication failed with invalid MFA one time pass code.
手順3.MFAトークンをcredentialsファイル内に書き込む
■credentialsファイル内
[credentials_name_token] #任意の名称
aws_access_key_id=*********** #手順2で取得した ”AccessKeyId”
aws_secret_access_key=******* #手順2で取得した ”SecretAccessKey”
aws_session_token=*********** #手順2で取得した "SessionToken"
これでMFA認証コードのSessionToken化は完了です。
具体的な活用例
上記で設定したSessionTokenは実際、どのように利用されるのか。一例を以下に示します。
■状況
VPCをバッチから作成したい時
■使い方
command prompt>aws ec2 create-vpc
--cidr-block 10.0.0.0/16
--query Vpc.VpcId
--output text
--tag-specification ResourceType=vpc
--region us-east-1
--profile credentials_name_token #★
★の部分をご覧ください。
手順3で指定したcredentialsの名称が引数に渡されています。
AWSマネジメントコンソール上で作業するなら今回の設定の効果はあまり感じられませんが、例えばこういった形でコマンドからEC2を起動させたりなどする場合や、credential helperが使えないなどの場合に、今回の手法であるSessionTokenが活用できます。
有効期限を延ばす方法
下記公式には「 --duration-seconds」を付与することで有効期限を伸ばすことができるとありました。
xxxx > aws sts get-session-token
--serial-number arn:aws:iam::000000:mfa/UserName
--token-code 123456
--profile ProfileName
--duration-seconds 129600
【注意事項】
"--duration-seconds"を設定しない場合の有効期限は4時間後まで。
設定するとその秒数後まで有効期限が延びるが、最大でも129600秒(1日と12時間後)までしか設定できない。
129600以上設定しようとするとエラーになる。
An error occurred(ValidationError) when calling the GetSessionToken operation: 1. validation error detected: Value '1444000' at 'durationSeconds' failed to satisfy constraint: Member must have value less than or equal to 129600.
【MFA トークンを使用して、AWS CLI を通じて AWS リソースへのアクセスを認証するにはどうすればよいですか?】
もしかしたら企業のIT部門などで有効期限を予め固定されているかもしれないので、もしできない場合は所属組織のIT管理者に連絡してみるといいかもしれません。