[JAWS-UG CLI] STS:#2 GetFederationToken

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

#前提条件
##S3、STSへの権限
* S3、STSに対してフル権限があること。

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

* AWS CLI 1.7.39

```bash:コマンド
aws --version
```

```bash:結果(例)
aws-cli/1.7.39 Python/2.7.6 Darwin/14.4.0
```

#0. 準備
##0.1. リージョンの指定
リージョンを指定しておきます。

```bash:コマンド
export AWS_DEFAULT_REGION=ap-northeast-1
```

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

```bash:コマンド
aws configure list
```

```bash:結果(例)
      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. 作業用ディレクトリの確認
カレントディレクトリにファイルを出力する為、作業用のディレクトリをご用意ください。

```bash:コマンド
pwd
ls -l
```

#1. GetFederationToken利用
##1.1. Federationユーザ用のポリシー作成
FederationユーザにS3へのアクセス権限を付与します。

```bash:変数の設定
FEDERATION_USER=feduser
FILE_FEDERATION_POLICY=${FEDERATION_USER}_POLICY.json \
  && echo ${FILE_FEDERATION_POLICY}
```

```bash:コマンド
cat << EOF > ${FILE_FEDERATION_POLICY}
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}
EOF

cat ${FILE_FEDERATION_POLICY}
```

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

```bash:コマンド
jsonlint -q ${FILE_FEDERATION_POLICY}
```

##1.2. 有効期限の指定

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

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

##1.3. FederationTokenの取得

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

```bash:変数の設定
FILE_FEDERATION_TOKEN_OUTPUT=federation_token_output.json
```

FederationTokenを取得します。

```bash:変数の確認
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
```

```bash:コマンド
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}
```

```bash:結果(例)
{
    "Credentials": {
        "SecretAccessKey": "c53hZ5iIaCfFUkgVlC58jS8xLPpm0Ys8gHj923Al", 
        "SessionToken": "AQoDYXdzEEQa8AHEsVcD/T/4sTZLGcZyEwxELTcHh1pvq5nzTIz+Xx1NgBtcIHmk57K5xyNp1EIFaQwMgElzygEgnEsp6A+3T2gO204VXG16wOlF84t/8maBv6xNBrShkyCySbUr9iOsB77zL5+9XFvQvCPuXh+nomqyHjKdu3QYWBKH4qzyAEcqkub9vAd3NGpvP2CfHGstSpAiCFDDlCoQ0hp0zQi82vdr06mT5ELvZjbopWIgC88P4OAC41JRavpnv86hLILcqfx38LNiFELfUX+17YwavXpHRow31Jd97rFJpP0vl1SDfY0t67DdQXsTlOpUxFqQh10gi9SorQU=", 
        "Expiration": "2015-07-18T13:27:23Z", 
        "AccessKeyId": "ASIAJYC24GWEJ4HK3BLA"
    }
}
```

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

```bash:変数の設定
PROFILE_NAME=federation-token
FILE_PROFILE_CONFIG=${PROFILE_NAME}.config \
  && echo ${FILE_PROFILE_CONFIG}
```

```bash:コマンド
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の利用
作成したプロファイルを環境変数に指定します。

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

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

```bash:コマンド
aws configure list
```

```bash:結果(例)
      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へのアクセス権限を有していることを確認します。

```bash:コマンド(例)
aws s3 ls
```

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

#完了