[JAWS-UG CLI] IAM:#5 ポリシードキュメントの作成と適用 (ユーザベース)

http://jawsug-cli.doorkeeper.jp/events/14646 でのハンズオン資料です。

このハンズオンでは、AWSの管理者として、ユーザベース(IAM)のポリシードキュメントを作成して、IAMグループに適用する作業を行います。

IAMのハンズオンについては、下記も参考にしてください。

* [管理者] IAMの全体設定 (Account Alias、パスワードポリシー)
http://qiita.com/tcsh/items/912f8060d221cf12a9fb
* [管理者] IAMグループとIAMユーザの作成
http://qiita.com/tcsh/items/ce2e83430905587806a7
* [一般ユーザ] IAMユーザの認証情報管理
http://qiita.com/tcsh/items/1200b84de8b708cb3a3f
* [管理者] IAMグループとIAMユーザの削除
http://qiita.com/tcsh/items/3cd4d8dac52b4ba5c30a


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

* IAMへのフルアクセス権限


1. ポリシードキュメントの作成
==============================

グループポリシーは、IAMポリシードキュメントの仕様に従って、JSON形式で記述します。

- ポリシージェネレータ: http://awspolicygen.s3.amazonaws.com/policygen.html

グループポリシーの設定は、適用対象となるIAMグループとJSONファイルを指定して行います。

```bash:コマンド:
$ IAM_GROUP_FILE=group-policy.json
```


```json:group-policy.json:
(ポリシージェネレータで生成したものを貼り付けます。)
```

[注意] ブラケット({}や[])のインデント位置が開きと閉じで同じでない場合、下記のエラーが出るようです。

```text:エラーメッセージ例:
A client error (MalformedPolicyDocument) occurred when calling the PutGroupPolicy operation: The policy is not in the valid JSON format.
```

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

```bash:command:
$ cat ${IAM_GROUP_FILE} | json_verify
```

```text:result:
JSON is valid
```

json_verifyでエラーが出たときはjsonlintでチェックします。

```bash:command:
$ cat ${IAM_GROUP_FILE} | jsonlint
```



2. IAMグループの作成
===================

ポリシーを適用するIAMグループを作成します。


2.1. IAMグループの作成
-----------------------

グループ名を決定します。

```bash:コマンド:
$ IAM_GROUP_NAME=operators
```

グループを作成します。

```bash:コマンド:
$ aws iam create-group --group-name ${IAM_GROUP_NAME}
```

```json:結果(例)
   {
       "Group": {
           "Path": "/", 
           "CreateDate": "2014-09-07T08:52:09.308Z", 
           "GroupId": "AGPAI5KIHK7xxxxxxxxxx", 
           "Arn": "arn:aws:iam::XXXXXXXXXXXX:group/operators", 
           "GroupName": "operators"
       }
   }
```


2.2. IAMグループの一覧
-----------------------

作成したグループが存在することを確認します。

```bash:コマンド:
$ aws iam list-groups
```

```json:結果(例)
   {
       "Groups": [
           {
               "Path": "/", 
               "CreateDate": "2014-09-07T08:52:09Z", 
               "GroupId": "AGPAI5KIHK7xxxxxxxxxx", 
               "Arn": "arn:aws:iam::XXXXXXXXXXXX:group/operators", 
               "GroupName": "operators"
           }, 
           {
               "Path": "/", 
               "CreateDate": "2014-09-07T03:37:40Z", 
               "GroupId": "AGPAJYZGCT6xxxxxxxxxx", 
               "Arn": "arn:aws:iam::XXXXXXXXXXXX:group/admin", 
               "GroupName": "admin"
           }
       ]
   }
```

JSON形式では見辛いので、table形式でグループ名だけを表示してみましょう。

```bash:コマンド:
$ aws iam list-groups --query 'Groups[].GroupName' --output table
```

```text:result:
   ---------------
   | ListGroups  |
   +-------------+
   |  operators  |
   |  admin      |
   +-------------+
```


2.3. IAMグループの詳細確認
-------------------------

get系コマンドでは、その対象の詳細情報を確認することができます。

```bash:コマンド:
$ aws iam get-group --group-name ${IAM_GROUP_NAME}
```

```json:結果(例)
   {
       "Group": {
           "Path": "/", 
           "CreateDate": "2014-09-07T08:52:09Z", 
           "GroupId": "AGPAI5KIHK7xxxxxxxxxx", 
           "Arn": "arn:aws:iam::XXXXXXXXXXXX:group/operators", 
           "GroupName": "operators"
       }, 
       "Users": []
   }
```


2.4. グループポリシーが未適用(初期状態)であることを確認
------------------------------------------------

IAMグループは、作成直後はグループポリシーが空になっています。
(何の権限も持ちません。)

```bash:コマンド:
$ aws iam list-group-policies --group-name ${IAM_GROUP_NAME}
```

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

2.5. グループポリシーの適用
----------------------------


```bash:コマンド:
$ aws iam put-group-policy --group-name ${IAM_GROUP_NAME} --policy-name "${IAM_GROUP_NAME}" --policy-document file://${IAM_GROUP_FILE}
```

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


2.6. グループポリシーの一覧
--------------------------

グループにポリシーが適用されたことを確認しましょう。

```bash:コマンド:
$ aws iam list-group-policies --group-name ${IAM_GROUP_NAME}
```




2.7. グループポリシーの詳細確認
-----------------------------

get系コマンドでは、その対象の詳細情報を確認することができます。

```bash:コマンド:
$ aws iam get-group-policy --group-name ${IAM_GROUP_NAME} --policy-name ${IAM_GROUP_NAME}
```


以上で、IAMグループの作成と設定は完了です。

IAMユーザの作成、IAMグループへのIAMユーザの追加については、
 http://qiita.com/tcsh/items/ce2e83430905587806a7
を参考にしてください。