ハンズオン(簡易版): STS基礎 (セッショントークン)

1.1. STSセッショントークンの作成 (handson-cli-sts-session-token)

手順の目的

STSセッショントークンを作成し、AWS認証ファイル"${HOME}/environment/tmp-handson-cli-sts-session-token/handson-cli-sts-session-token.ini"に変換します。

設定値の指定

設定値の指定

手順に必要な設定値を変数に格納をします。

0.a. リージョンの指定

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

変数の設定

export AWS_DEFAULT_REGION='ap-northeast-1'

0.b. プロファイルの指定

アクセスキー保存ファイルを指定します。

環境変数の設定:

export AWS_SHARED_CREDENTIALS_FILE="${HOME}/.credentials-handson-cli-sts-session-token/handson-cli-sts-session-token-user.ini"

プロファイルを指定します。

環境変数の設定:

export AWS_PROFILE='handson-cli-sts-session-token-user'

1. STSセッショントークン有効期限

STSセッショントークンの有効期限(秒)を指定します。

変数の設定:

STS_SESSION_TOKEN_DURATION_SECONDS='900'

2. AWS認証プロファイル名

AWS認証プロファイル名を指定します。

変数の設定:

AWS_CREDENTIAL_PROFILE_NAME='handson-cli-sts-session-token'

3. AWS CLI認証情報ファイル用ディレクトリ

AWS CLI認証情報ファイル用ディレクトリを指定します。

変数の設定:

DIR_CREDENTIAL="${HOME}/environment/tmp-handson-cli-sts-session-token"

ディレクトリが存在することを確認し、存在しない場合は作成します。

コマンド:

ls -d ${DIR_CREDENTIAL} > /dev/null 2>&1 \
  || mkdir -p ${DIR_CREDENTIAL}

結果(例):

(出力なし)

4. AWS認証情報ファイル名

AWS CLI認証情報ファイル名を指定します。

変数の設定:

FILE_AWS_CREDENTIAL_STS_SESSION_TOKEN="${DIR_CREDENTIAL}/${AWS_CREDENTIAL_PROFILE_NAME}.ini" \
  && echo ${FILE_AWS_CREDENTIAL_STS_SESSION_TOKEN}

結果(例):

${HOME}/environment/tmp-handson-cli-sts-session-token/handson-cli-sts-session-token.ini

5. 一時ファイル保存用ディレクトリ

一時ファイル保存用ディレクトリ名を指定します。

変数の設定:

DIR_TMP="${HOME}/environment/tmp-handson-cli-sts-session-token"

ディレクトリが存在することを確認し、存在しない場合は作成します。

コマンド:

ls -d ${DIR_TMP} > /dev/null 2>&1 \
  || mkdir -p ${DIR_TMP}

設定値の確認

各変数に正しい設定値が格納されていることを確認します。

変数の確認:

cat << END

  # 0. AWS_DEFAULT_REGION:"ap-northeast-1"
       AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION}"
  #    AWS_SHARED_CREDENTIALS_FILE:"${HOME}/.credentials-handson-cli-sts-session-token/handson-cli-sts-session-token-user.ini"
       AWS_SHARED_CREDENTIALS_FILE="${AWS_SHARED_CREDENTIALS_FILE}"
  #    AWS_PROFILE:"handson-cli-sts-session-token-user"
       AWS_PROFILE="${AWS_PROFILE}"

  # 1. STS_SESSION_TOKEN_DURATION_SECONDS:"900"
       STS_SESSION_TOKEN_DURATION_SECONDS="${STS_SESSION_TOKEN_DURATION_SECONDS}"
  # 2. AWS_CREDENTIAL_PROFILE_NAME:"handson-cli-sts-session-token"
       AWS_CREDENTIAL_PROFILE_NAME="${AWS_CREDENTIAL_PROFILE_NAME}"
  # 3. DIR_CREDENTIAL:"${HOME}/environment/tmp-handson-cli-sts-session-token"
       DIR_CREDENTIAL="${DIR_CREDENTIAL}"
  # 4. FILE_AWS_CREDENTIAL_STS_SESSION_TOKEN:"${HOME}/environment/tmp-handson-cli-sts-session-token/handson-cli-sts-session-token.ini"
       FILE_AWS_CREDENTIAL_STS_SESSION_TOKEN="${FILE_AWS_CREDENTIAL_STS_SESSION_TOKEN}"
  # 5. DIR_TMP:"${HOME}/environment/tmp-handson-cli-sts-session-token"
       DIR_TMP="${DIR_TMP}"

END

下段の変数が入っていない、もしくは上段と同等の値が入っていない場合は、それぞれの手順番号に戻って変数の設定を行います。

処理の実行

出力ファイル名を指定します。

変数の設定:

FILE_STS_SESSION_TOKEN="${DIR_TMP}/${AWS_CREDENTIAL_PROFILE_NAME}.json" \
  && echo ${FILE_STS_SESSION_TOKEN}

結果(例):

${HOME}/environment/tmp-handson-cli-sts-session-token/handson-cli-sts-session-token.json

STSセッショントークンの作成

STSセッショントークンを作成します。

変数の確認:

cat << END

  # STS_SESSION_TOKEN_DURATION_SECONDS:"900"
    STS_SESSION_TOKEN_DURATION_SECONDS="${STS_SESSION_TOKEN_DURATION_SECONDS}"
  # FILE_STS_SESSION_TOKEN:"${HOME}/environment/tmp-handson-cli-sts-session-token/handson-cli-sts-session-token.json"
    FILE_STS_SESSION_TOKEN="${FILE_STS_SESSION_TOKEN}"

END

コマンド:

aws sts get-session-token \
  --duration-seconds ${STS_SESSION_TOKEN_DURATION_SECONDS} \
  > ${FILE_STS_SESSION_TOKEN}

cat ${FILE_STS_SESSION_TOKEN}

結果(例):

{
    "Credentials": {
        "AccessKeyId": "ASIAXXXXXXXXXXXXXXXX",
        "SecretAccessKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "SessionToken": "xxxxxxxxxxxxxxx//////////xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx==",
    "Expiration": "2022-11-16T01:23:45Z"
    }
}

AWS CLI認証情報の設定

アクセスキー保存ファイルを指定します。

環境変数の設定:

export AWS_SHARED_CREDENTIALS_FILE="${FILE_AWS_CREDENTIAL_STS_SESSION_TOKEN}"

プロファイルを指定します。

環境変数の設定:

export AWS_PROFILE="${AWS_CREDENTIAL_PROFILE_NAME}"

AWSアクセスキーIDの設定

AWSアクセスキーIDを取得します。

コマンド:

aws_access_key_id=$(
  cat "${FILE_STS_SESSION_TOKEN}" \
    | jp.py 'Credentials.AccessKeyId' \
    | sed 's/"//g' \
) \
  && echo ${aws_access_key_id}

結果(例):

AKIAXXXXXXXXXXXXXXXX

AWS CLIの設定をします。

変数の確認:

cat << END

  # AWS_PROFILE:"handson-cli-sts-session-token"
    AWS_PROFILE="${AWS_PROFILE}"
  # aws_access_key_id:"AKIAXXXXXXXXXXXXXXXX"
    aws_access_key_id="${aws_access_key_id}"

END

コマンド:

aws configure set \
  aws_access_key_id ${aws_access_key_id}

結果(例):

(出力なし)

AWSシークレットアクセスキーの設定

AWSシークレットアクセスキーを取得します。

コマンド:

aws_secret_access_key=$( \
  cat "${FILE_STS_SESSION_TOKEN}" \
    | jp.py 'Credentials.SecretAccessKey' \
    | sed 's/"//g' \
) \
  && echo ${aws_secret_access_key}

結果(例):

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

AWS CLIの設定をします。

変数の確認:

cat << END

  # AWS_PROFILE:"handson-cli-sts-session-token"
    AWS_PROFILE="${AWS_PROFILE}"
  # aws_secret_access_key:"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    aws_secret_access_key="${aws_secret_access_key}"

END

コマンド:

aws configure set \
  aws_secret_access_key ${aws_secret_access_key}

結果(例):

(出力なし)

セッショントークンの設定

セッショントークンを取得します。

コマンド:

aws_session_token=$(
  cat "${FILE_STS_SESSION_TOKEN}" \
    | jp.py 'Credentials.SessionToken' \
    | sed 's/"//g' \
) \
  && echo ${aws_session_token}

結果(例):

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

AWS CLIの設定をします。

変数の確認:

cat << END

  # AWS_PROFILE:"handson-cli-sts-session-token"
    AWS_PROFILE="${AWS_PROFILE}"
  # aws_session_token:"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    aws_session_token="${aws_session_token}"

END

コマンド:

aws configure set \
  aws_session_token ${aws_session_token}

結果(例):

(出力なし)

完了確認

「AWS CLI認証情報ファイル"${HOME}/environment/tmp-handson-cli-sts-session-token/handson-cli-sts-session-token.ini"が存在する。」ことを確認します。

コマンド:

ls ${FILE_AWS_CREDENTIAL_STS_SESSION_TOKEN}

結果(例):

${HOME}/environment/tmp-handson-cli-sts-session-token/handson-cli-sts-session-token.ini

「AWS CLI設定'aws_access_key_id'が存在する。」ことを確認します。

コマンド:

aws configure get \
  aws_access_key_id

結果(例):

AKIAXXXXXXXXXXXXXXXX

「AWS CLI設定'aws_secret_access_key'が存在する。」ことを確認します。

コマンド:

aws configure get \
  aws_secret_access_key

結果(例):

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

コマンド:

aws configure get \
  aws_session_token

結果(例):

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

STSセッショントークンファイルを削除します。

コマンド:

rm ${FILE_STS_SESSION_TOKEN}

結果(例):

(出力なし)

環境変数を削除して、プロファイルの権限を無効にします。

環境変数の設定:

export -n AWS_SHARED_CREDENTIALS_FILE

環境変数の設定:

export -n AWS_PROFILE

手順の完了