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

[JAWS-UG CLI] STS:#2 GetFederationToken

More than 5 years have passed since last update.

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

前提条件

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. 変数の確認

プロファイルが想定のものになっていることを確認します。(IAM/STSフル権限が必要です。)

コマンド
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. GetFederationToken利用

1.1. Federationユーザ用のポリシー作成

FederationユーザにS3へのアクセス権限を付与します。

変数の設定
FEDERATION_USER=feduser
FILE_FEDERATION_POLICY=${FEDERATION_USER}_POLICY.json \
  && echo ${FILE_FEDERATION_POLICY}
コマンド
cat << EOF > ${FILE_FEDERATION_POLICY}
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}
EOF

cat ${FILE_FEDERATION_POLICY}

JSONファイルを作成したら、フォーマットが壊れてないか必ず確認します。

コマンド
jsonlint -q ${FILE_FEDERATION_POLICY}

1.2. 有効期限の指定

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

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

1.3. FederationTokenの取得

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

変数の設定
FILE_FEDERATION_TOKEN_OUTPUT=federation_token_output.json

FederationTokenを取得します。

変数の確認
cat << ETX

        FEDERATION_USER: ${FEDERATION_USER}
        FILE_FEDERATION_POLICY: ${FILE_FEDERATION_POLICY}
        EXPIRATION_SECONDS: ${EXPIRATION_SECONDS}
        FILE_FEDERATION_TOKEN_OUTPUT: ${FILE_FEDERATION_TOKEN_OUTPUT}

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

1.4. プロファイルの作成

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

変数の設定
PROFILE_NAME=federation-token
FILE_PROFILE_CONFIG=${PROFILE_NAME}.config \
  && echo ${FILE_PROFILE_CONFIG}
コマンド
echo "[profile ${PROFILE_NAME}]" > ${FILE_PROFILE_CONFIG}
cat ${FILE_FEDERATION_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}

1.5. FederationTokenの利用

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

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

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

コマンド
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

Federationユーザ用に設定したS3へのアクセス権限を有していることを確認します。

コマンド(例)
aws s3 ls

2. FederationTokenの無効化確認

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

完了

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