【AWS】MENTAやチーム開発の環境構築【IAM編】

# 0. はじめに
kazumakishimoto([@kazuma_dev](https://twitter.com/kazuma_dev))です！
AWSでチーム開発するためのIAMアカウント設定方法をまとめました。

## 0-1. 本記事の対象者
- メンターさん
- メンティーさん
- チーム開発メンバー

## 0-2. 全体の流れ
[1. オーナー設定](#1-オーナー設定)
[2. 開発メンバー設定](#2-開発メンバー設定)
[3. 補足](#3-補足)
[reference](#reference)

# 0-3. 要件
- Admin権限をもつのは、オーナーアカウントだけ。
- 開発メンバーはAdmin権限以外の権限をすべて与えられる。
- 開発メンバーは自分のパスワード変更が行える（通常はAdmin権限をもったアカウントのみが可能）。

## 0-4. 事前準備
- AWSアカウント作成(オーナーアカウント)

https://aws.amazon.com/jp/register-flow/

# 1. オーナー設定
## 1-1. グループ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/90810db6-28ce-e13b-6b89-1b6ffcd94383.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/7027604e-188c-4827-233b-914ca3fd6898.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/692a3c64-6d05-6163-9162-eb218e52c458.png)

- 開発メンバーにパスワード変更依頼する場合、`IAMUserChangePassword`ポリシーもアタッチ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/d9164976-1da3-c2ac-6578-c24de8d1eedd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/7fe8ddd2-6a6f-2fc2-b01a-e3f83789f75b.png)

## 1-2. ユーザー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/67779a18-fbe0-056a-70e8-789ba9dad677.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/f387fbad-1a77-855e-ca7a-e9d76de141ca.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/cd448b64-2bb6-d4f0-321c-5c2a89ae1a97.png)

- .csvのダウンロード
- Eメールの送信
- `『①サインインURL②アクセスキーID③シークレットアクセスキー④初期パスワード』`の保存

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/c9c234e4-1f32-4994-7871-3c49bfc8cca8.png)

## 1-3. ロール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/94e92dad-5c71-02a0-2899-4dc918fa40d6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/b2f6256e-2abf-13d7-2697-d2556b204749.png)

- アクセス権限ポリシーで必要最低項目にチェック
```
- AmazonRDSFullAccess
- AmazonEC2FullAccess
- AWSCodeCommitFullAccess
- AmazonS3FullAccess
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/06e40083-be6b-06d6-d388-d6686d53dc0e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/0737e632-8760-8be3-2964-eca825d93a0b.png)

- ユーザー追加に応じて信頼関係を定義

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/14145cf9-78e4-6707-a306-87462aea613f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/7de849e7-1982-2dd2-6fec-9bcf9f37fa04.png)

```diff:JSON
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ec2.amazonaws.com",
+               "AWS": "arn:aws:iam::<アカウントID>:user/<Assume Role実行するIAMユーザ名>"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

## 1-4. 通知
- 下記を開メンバーに通知(`new_user_credentials.csv`の送付)
```
1. ユーザー名
2. 初期パスワード
3. アクセスキーID
4. シークレットアクセスキー
5. コンソールログインリンク
6. new_user_credentials.csv
7. ロール名
```

# 2. 開発メンバー設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/e64530dc-cdbd-b476-745b-a76c81931710.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/9bb5e9fc-33ad-77f2-a600-31ede87acba8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/3d59a402-09eb-b248-2b4a-10703a3b38dd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687994/fefdcf25-9f47-5e35-e045-80b802fd0150.png)


# 3. 補足
- 下記不要になったら削除
```
- ポリシー
- グループ
- ユーザー
- ロール
```

# reference
https://qiita.com/kiriki-qwt/items/db6fc88ce2ce6626fb4f

https://qiita.com/shinshingodmt/items/c588e4497064e5c48111

https://qiita.com/fururun02/items/4887b07e8455d482dc9f

https://zenn.dev/ballistyx/articles/3bf901967070f7

https://dev.classmethod.jp/articles/tsnote-switch-role-without-assume-role/