[JAWS-UG CLI] IAM #68 IAMアクセスキーの作成

前提条件
========


IAMへの権限
-----------

* IAMに対してフル権限があること。


AWS CLIのバージョン
-------------------

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

* AWS CLI 1.11.34


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

結果(例):

         aws-cli/1.11.34 Python/2.7.10 Darwin/15.6.0 botocore/1.4.91

   バージョンが古い場合は最新版に更新しましょう。

```bash:コマンド:
sudo -H pip install -U awscli
```

0. 準備
=======


プロファイルの確認
------------------

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

変数の確認:

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

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

結果(例)

               Name                    Value             Type    Location
               ----                    -----             ----    --------
            profile         iamFull-prjZ-mbp13        env    AWS_DEFAULT_PROFILE
         access_key     ****************XXXX shared-credentials-file
         secret_key     ****************XXXX shared-credentials-file
             region                         ap-northeast-1  env    AWS_DEFAULT_REGION

   AssumeRoleを利用している場合はprofileが '<not set>'と表示されます。
   それ以外のときにprofileが '<not set>' と表示される場合は、以下を実
   行してください。

```bash:変数の設定:
export AWS_DEFAULT_PROFILE=<IAMユーザ名>
```


1. 事前作業
===========

IAMユーザにアクセスキーが存在しないことを確認します。

```bash:コマンド:
aws iam list-access-keys \
        --user-name ${IAM_USER_NAME}
```

結果(例):

      {
        "AccessKeyMetadata": []
      }


2. アクセスキーの作成
=========

アクセスキーを作成します。

```bash:変数の確認:
cat << ETX

        IAM_USER_NAME:  ${IAM_USER_NAME}

ETX
```

```bash:コマンド:
aws iam create-access-key \
        --user-name ${IAM_USER_NAME} \
        > ${IAM_USER_NAME}.json \
          && cat ${IAM_USER_NAME}.json
```

結果(例):

      {
        "AccessKey": {
          "UserName": "sample-user",
          "Status": "Active",
          "CreateDate": "2017-02-06T01:23:45.678Z",
          "SecretAccessKey": ""XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,
          "AccessKeyId": "AKIAXXXXXXXXXXXXXXXX"
        }
      }


3. 事後作業
===========

## 3.1. アクセスキーの確認

IAMユーザにアクセスキーが存在することを確認します。

```bash:コマンド:
aws iam list-access-keys \
        --user-name ${IAM_USER_NAME}
```

結果(例):

      {
        "AccessKeyMetadata": [
          {
              "UserName": "sample-user",
              "Status": "Active",
              "CreateDate": "2017-02-06T01:23:45Z",
              "AccessKeyId": "AKIAXXXXXXXXXXXXXXXX"
          }
        ]
      }





3.2. 認証情報の作成
-------------------

CLIからアクセスキーを認証情報として使えるように、保存したキー情報を加工します。


### sourceディレクトリ作成

```bash:コマンド:
mkdir -p ~/.aws/source
```

```text:結果:
      (戻り値なし)
```

### rcファイル作成

```bash:コマンド:
cat ${IAM_USER_NAME}.json \
      | jp.py 'AccessKey' \
      | sed '/[{}]/d' | sed 's/[\" ,]//g' | sed 's/:/=/' \
      | sed 's/AccessKeyId/aws_access_key_id/' \
      | sed 's/SecretAccessKey/aws_secret_access_key/' \
      | grep '^aws_' \
      > ~/.aws/source/${IAM_USER_NAME}.rc \
        && cat ~/.aws/source/${IAM_USER_NAME}.rc
```

```text:結果:
      aws_access_key_id=AKIAIOSFODNN7EXAMPLE
      aws_secret_access_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
```

### configファイル(単体)作成

```bash:変数の設定:
REGION_AWS_CONFIG="${AWS_DEFAULT_REGION}"
```

```bash:変数の設定:
FILE_USER_CONFIG="${HOME}/.aws/source/${IAM_USER_NAME}.config"

echo "[profile ${IAM_USER_NAME}]" > ${FILE_USER_CONFIG} \
  && echo "region=${REGION_AWS_CONFIG}" >> ${FILE_USER_CONFIG} \
  && echo "" >> ${FILE_USER_CONFIG} \
  && cat ${FILE_USER_CONFIG}
```

```text:結果:
      [profile user-project-sample]
      region=ap-northeast-1
```

### ~/.aws/credentials作成

```bash:バックアップ:
cp ~/.aws/credentials ~/.aws/credentials.old
```

```bash:コマンド:
file="${HOME}/.aws/credentials"
if [ -e ${file} ]; then mv ${file} ${file}.bak; fi
for i in $(ls ${HOME}/.aws/source/*.rc); do \
        name=$(echo $i | sed 's/^.*\///' | sed 's/\.rc$//') \
        && echo "[$name]" >> ${file} \
        && cat $i >> ${file} \
        && echo "" >> ${file} ;done \
        && cat ${file}
```

```text:結果:
      [user-project-sample]
      aws_access_key_id=AKIAIOSFODNN7EXAMPLE
      aws_secret_access_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
```


### ~/.aws/config作成

```bash:バックアップ:
cp ~/.aws/config ~/.aws/config.old
```

```bash:コマンド:
cat ${HOME}/.aws/source/*.config > ${HOME}/.aws/config \
        && cat ${HOME}/.aws/config
```

```text:結果:
      [profile user-project-sample]
      region=ap-northeast-1
```


## 3.3. ユーザの切り替え


### 現在のユーザの確認

```bash:変数の確認:
aws configure list | grep profile
```

```text:結果(例):
      profile       taro-prjZ-mbp13              env    AWS_DEFAULT_PROFILE
```


### 切替後ユーザの確認

```bash:変数の確認:
cat << ETX

        new:     IAM_USER_NAME:       ${IAM_USER_NAME}

ETX
```


###  ユーザの切り替え

```bash:コマンド:
export AWS_DEFAULT_PROFILE=${IAM_USER_NAME}
  echo ${AWS_DEFAULT_PROFILE}
```


### コマンドテスト

```bash:コマンド:
aws s3 ls
```

```text:結果(例):
      2015-09-25 06:08:59 example-bucket
```

```bash:コマンド:
aws iam list-roles
```

```json:結果(例):
      {
        "Roles": []
      }
```


## 3.4. 認証ファイルの削除

```bash:コマンド:
rm ${IAM_USER_NAME}.json
```


## 3.5. ユーザの戻し

```bash:コマンド:
export AWS_DEFAULT_PROFILE='元のIAMユーザ'
echo ${AWS_DEFAULT_PROFILE}
```



完了
====