スポンサーリンク

【AWS】GetSessionTokenAPIで取得した認証情報をShellScriptを使って更新する

【AWS】GetSessionTokenAPIで取得した認証情報をShellScriptを使って更新するAWS
【AWS】GetSessionTokenAPIで取得した認証情報をShellScriptを使って更新する
スポンサーリンク

動作環境

OSParott OS
バージョン5.3 Electro Ara
仮想化ソフトOracle VM VirtualBox
動作環境

前提条件

AWS CLIをインストールしていること。

AWS CLI使用時のIAMユーザーにMFA認証を適用させていること。

やりたいこと

IAMユーザーの認証情報を取得する処理を手動で行っていたが、自動化したい。

  • get-session-tokenコマンドで認証情報を取得。
  • 取得結果を元にcredentialsファイルの認証情報を上書き編集。

ShellScript

get_session.sh

#!/bin/sh
echo -n --duration-seconds:
read durationSeconds

echo -n --token-code:
read tokenCode

authInfo=(`aws sts get-session-token --duration-seconds $durationSeconds\
                  --serial-number arn:aws:iam::xxxxxxxxxx:mfa/xxxxxx\
                  --token-code $tokenCode\
                  --output text --query "[Credentials.AccessKeyId,Credentials.SecretAccessKey,Credentials.SessionToken]"`)

row=`grep -n 'mfa-user' ~/.aws/credentials | sed -e 's/:.*//g'`
deleteRow=$row
((deleteRow++))

sed -i "${deleteRow},$(($deleteRow+2))d" ~/.aws/credentials

sed -i "${row}a aws_access_key_id = ${authInfo[0]}" ~/.aws/credentials
((row++))
sed -i "${row}a aws_secret_access_key = ${authInfo[1]}" ~/.aws/credentials
((row++))
sed -i "${row}a aws_session_token = ${authInfo[2]}" ~/.aws/credentials

ShellScriptの説明

入力情報として「有効持続期間」「トークンコード」を指定。

echo -n --duration-seconds:
read durationSeconds

echo -n --token-code:
read tokenCode

出力形式はtextを選択 ※スペース区切りで取得可能。

--output text

列名を指定してリスト表記で定義。

--query "[Credentials.AccessKeyId,Credentials.SecretAccessKey,Credentials.SessionToken]"

AWS CLI出力フォーマットのドキュメント

AWS CLI 出力フォーマットを設定する - AWS Command Line Interface
AWS Command Line Interface (AWS CLI) からの出力の形式を制御します。IAM アイデンティティセンター

credentialsファイルの「mfa-user」を検索して列番号を取得しています。

`grep -n 'mfa-user' ~/.aws/credentials | sed -e 's/:.*//g'`

credentialsファイルから有効期限が切れた認証情報を削除します。

sed -i "${deleteRow},$(($deleteRow+2))d" ~/.aws/credentials

credentialsファイルに取得した認証情報を追加します。

sed -i "${row}a aws_access_key_id = ${authInfo[0]}" ~/.aws/credentials

ShellScriptを実行

ファイルの場所に移動してからget_session.shを実行。

bash get_session.sh

–duration-seconds:「有効持続期間」

–token-code:「トークンコード」

認証情報が更新されて、s3コマンドが実行可能になる。※S3を許可している場合の例

タイトルとURLをコピーしました