Help us understand the problem. What is going on with this article?

[JAWS-UG CLI] STS:#1 GetSessionToken

More than 5 years have passed since last update.

AWS CLIを利用して、GetSessionTokenを利用します。

前提条件

S3、STSへの権限

  • S3、STSに対してフル権限があること。

AWS CLIのバージョン

以下のバージョンで動作確認済

  • AWS CLI 1.7.39
コマンド
aws --version
結果(例)
aws-cli/1.7.39 Python/2.7.6 Darwin/14.4.0

0. 準備

0.1. リージョンの指定

リージョンを指定しておきます。

コマンド
export AWS_DEFAULT_REGION=ap-northeast-1

0.2. 変数の確認

プロファイルが想定のものになっていることを確認します。

コマンド
aws configure list
結果(例)
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                  iamFull           manual    --profile
access_key     ****************IK5Q shared-credentials-file    
secret_key     ****************nA0/ shared-credentials-file    
    region           ap-northeast-1              env    AWS_DEFAULT_REGION

0.3. 作業用ディレクトリの確認

カレントディレクトリにファイルを出力する為、作業用のディレクトリをご用意ください。

コマンド
pwd
ls -l

1. SessionToken利用

1.1. SessionTokenの取得

Tokenの有効期限を15分(60*15)に設定します。

変数の設定
EXPIRATION_SECONDS=`expr 60 \* 15` \
  && echo ${EXPIRATION_SECONDS}

1.2. SessionTokenの取得

保存用ファイル名を指定します。

変数の設定
FILE_SESSION_TOKEN_OUTPUT=session_token_output.json

SessionTokenを取得します。

変数の確認
cat << ETX

        EXPIRATION_SECONDS: ${EXPIRATION_SECONDS}
        FILE_SESSION_TOKEN_OUTPUT: ${FILE_SESSION_TOKEN_OUTPUT}

ETX
コマンド
aws sts get-session-token \
  --duration-seconds ${EXPIRATION_SECONDS} \
  > ${FILE_SESSION_TOKEN_OUTPUT} \
  && cat ${FILE_SESSION_TOKEN_OUTPUT}
結果(例)
{
    "Credentials": {
        "SecretAccessKey": "c53hZ5iIaCfFUkgVlC58jS8xLPpm0Ys8gHj923Al", 
        "SessionToken": "AQoDYXdzEEQa8AHEsVcD/T/4sTZLGcZyEwxELTcHh1pvq5nzTIz+Xx1NgBtcIHmk57K5xyNp1EIFaQwMgElzygEgnEsp6A+3T2gO204VXG16wOlF84t/8maBv6xNBrShkyCySbUr9iOsB77zL5+9XFvQvCPuXh+nomqyHjKdu3QYWBKH4qzyAEcqkub9vAd3NGpvP2CfHGstSpAiCFDDlCoQ0hp0zQi82vdr06mT5ELvZjbopWIgC88P4OAC41JRavpnv86hLILcqfx38LNiFELfUX+17YwavXpHRow31Jd97rFJpP0vl1SDfY0t67DdQXsTlOpUxFqQh10gi9SorQU=", 
        "Expiration": "2015-07-18T13:27:23Z", 
        "AccessKeyId": "ASIAJYC24GWEJ4HK3BLA"
    }
}

1.3. プロファイルの作成

取得したSessionToken出力を利用してプロファイルを作成します。

変数の設定
PROFILE_NAME=session-token
FILE_PROFILE_CONFIG=${PROFILE_NAME}.config \
  && echo ${FILE_PROFILE_CONFIG}
コマンド
echo "[profile ${PROFILE_NAME}]" > ${FILE_PROFILE_CONFIG}
cat ${FILE_SESSION_TOKEN_OUTPUT} | awk '
  $1 == "\"AccessKeyId\":" {
    gsub(/\"/,""); gsub(/,/,""); print "aws_access_key_id = "$2
  }
  $1 == "\"SecretAccessKey\":" {
    gsub(/\"/,""); gsub(/,/,""); print "aws_secret_access_key = "$2
  }
  $1 == "\"SessionToken\":" {
    gsub(/\"/,""); gsub(/,/,""); print "aws_session_token = "$2
  }
' >> ${FILE_PROFILE_CONFIG} \
  && cat ${FILE_PROFILE_CONFIG}

2. SessionTokenの利用

作成したプロファイルを環境変数に指定します。

環境変数指定
export AWS_DEFAULT_PROFILE=${PROFILE_NAME}
export AWS_CONFIG_FILE=${FILE_PROFILE_CONFIG}

SessionTokenから作成したプロファイルに変更されていることを確認します。

コマンド
aws configure list
結果(例)
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile            session-token           manual    --profile
access_key     ****************3BLA      config-file    
secret_key     ****************23Al      config-file    
    region           ap-northeast-1              env    AWS_DEFAULT_REGION

SessionTokenを取得したIAM権限と同等の権限を有していることを確認します。

コマンド(例)
aws s3 ls

2. SessionTokenの無効化確認

有効期間を過ぎた後、このプロファイルが利用できなくなることを確認します。
明示的に削除する手順は存在しません。

完了

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away