aws-cli でIAMのpolicy作成とGroup 作成の定形作業


# グループの設計

だいたいは最初以下で足りるのではないかと。

| グループ名 | 権限 |用途|
|:-----------|:------------:|:-----------|
|admin| AdministratorAccess |なんでもできるひと|
|deployer|PowerUserAccess,IAMReadOnlyAccess|デプロイする人とか。なんでもできけどユーザーとか作れない人|
|developer| ReadOnlyAccess, DeveloperPolicy(Local) |一応全部見れて、開発者で開発用のポリシーだけにする人|
|operator| ReadOnlyAccess |全部見れるだけの人|


参考：[AWS IAM] 経験者向けManaged Policy対応ガイド
http://dev.classmethod.jp/cloud/iam-managed-policy-guide-for-experts/


権限は基本的に、awsのmanagedポリシーを使い。
開発者グループだけ自分で作ったポリシーを当てとく。
(Local)ってつけてるのがCustomer Managed Policy

# 開発者用(developer group)のポリシーを作る

## ポリシードキュメントを作業ディレクトリに作っとく

開発者にどんな環境を与えるかによってかわってきますが、インフラ的なものを作って渡すだけの場合、stopとstartだけできれば大丈夫ってことにする。

例 EC2 を stop と startだけできてタグが付けられるポリシー

```json:developerpolicy.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1398823591000",
      "Effect": "Allow",
      "Action": [
        "ec2:RunInstances",
        "ec2:StartInstances",
        "ec2:StopInstances",
        "ec2:CreateTags" 
      ],
      "Resource": [
        "*" 
      ]
    }
  ]
}
```

## ポリシーの名前を決て環境変数に入れとく

DeveloperPolicyとします。

環境変数に入れとく

	POLICY_NAME=DeveloperPolicy

## ポリシーの説明をを決めて環境変数に入れとく
	
	POLICY_DESCRIPTION="DeveloperPolicy Resource Stop Start and more like RDS stop start..."

## ポリシードキュメントの場所環境変数に入れとく

作業ディレクトリの直下においてある時はfile://...

	POLICY_DOCUMENT=file://developerpolicy.json
	
## cliのprofile名を環境変数に入れとく

	AWS_PROFILE_NAME=click_system_prod

## 実行

```
aws iam create-policy  \
--policy-name $POLICY_NAME \
--policy-document $POLICY_DOCUMENT \
--description $POLICY_DESCRIPTION \
--profile $AWS_PROFILE_NAME
```

## できてるか確認

```
aws iam list-policies --query Policies[][] --profile $AWS_PROFILE_NAME --scope Local
```
自分で作ったやつだけ確認したいときは、```--scope Local```のオプションを付ける。

```
[
    {
        "PolicyName": "まえつくったやつ", 
        "CreateDate": "2015-04-07T09:23:46Z", 
        "AttachmentCount": 4, 
        "IsAttachable": true, 
        "PolicyId": "XXXXXXXXXXXXXX", 
        "DefaultVersionId": "v1", 
        "Path": "/", 
        "Arn": "arn:aws:iam::XXXXXXXXXXXXXX:policy/まえつくったやつ", 
        "UpdateDate": "2015-04-07T09:23:46Z"
    }, 
    {
        "PolicyName": "DeveloperPolicy", 
        "CreateDate": "2015-03-25T07:55:41Z", 
        "AttachmentCount": 1, 
        "IsAttachable": true, 
        "PolicyId": "XXXXXXXXXXXXXX", 
        "DefaultVersionId": "v1", 
        "Path": "/", 
        "Arn": "arn:aws:iam::XXXXXXXXXXXXXX:policy/DeveloperPolicy", 
        "UpdateDate": "2015-03-25T07:55:41Z"
    }
]
```

できてる。

## Developer用のポリシーARNを環境変数に入れとく

jsonだと```"Arn": "arn:aws:iam::XXXXXXXXXXXXXX:policy/DeveloperPolicy"```ってなってる部分です。

かっこ良くコマンドで入れる。またはコピペして入れとく。

```
POLICY_ARN=$(aws iam list-policies --query Policies[][] --profile $AWS_PROFILE_NAME --scope Local --output text | grep $POLICY_NAME | awk '{print $1}')
```

# グループを作る

## adminグループ作る
ポリシーはAdminだけアタッチする

```
GROUP_NAME=admin

aws iam create-group --group-name $GROUP_NAME --profile $AWS_PROFILE_NAME

aws iam attach-group-policy --group-name $GROUP_NAME --policy-arn arn:aws:iam::aws:policy/AdministratorAccess --profile $AWS_PROFILE_NAME
```
 
## developerグループ作る
ポリシーはReadOnlyとオリジナルのやつだけアタッチする

```
GROUP_NAME=developer

aws iam create-group --group-name $GROUP_NAME --profile $AWS_PROFILE_NAME

aws iam attach-group-policy --group-name $GROUP_NAME --policy-arn
 arn:aws:iam::aws:policy/ReadOnlyAccess --profile $AWS_PROFILE_NAME

aws iam attach-group-policy --group-name $GROUP_NAME --policy-arn $POLICY_ARN --profile $AWS_PROFILE_NAME
```
 
## deployerグループ作る
ポリシーはPowerUserAccessとIAMReadOnlyAccessだけアタッチする

```

GROUP_NAME=deployer

aws iam create-group --group-name $GROUP_NAME --profile $AWS_PROFILE_NAME

aws iam attach-group-policy --group-name $GROUP_NAME --policy-arn arn:aws:iam::aws:policy/PowerUserAccess --profile $AWS_PROFILE_NAME

aws iam attach-group-policy --group-name $GROUP_NAME --policy-arn arn:aws:iam::aws:policy/IAMReadOnlyAccess --profile $AWS_PROFILE_NAME
```

## operatorグループ作る

ポリシーはReadOnlyAccessだけアタッチする

```
GROUP_NAME=operator

aws iam create-group --group-name $GROUP_NAME --profile $AWS_PROFILE_NAME

aws iam attach-group-policy --group-name $GROUP_NAME --policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess --profile $AWS_PROFILE_NAME
``` 

とりあえず、これで体裁は整うはず。
なんか増えたらこのsnippetコピペで増やす。