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の無効化確認
有効期間を過ぎた後、このプロファイルが利用できなくなることを確認します。
明示的に削除する手順は存在しません。
#完了