動作環境
OS | Parott 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 CLI からの出力の形式を制御します。
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を許可している場合の例