AWS Organizationを使った環境別アカウントの作成とスイッチロールの導入

# AWS Organizationを使ったアカウントの整備とスイッチロールの導入

## したいこと

- 一つのAWSアカウントに本番環境や検証環境のサービスを同居させたくない
    - 本番環境、ステージング環境、検証環境等を完全に分離させたい
- 検証環境は開発エンジニアがEC2等インスタンスを作成、削除を許容したいが本番環境はインフラエンジニアだけ許可などの制御がしたい
- 環境ごとにIAM発行する手間をなくしたい
    - スイッチロールを使用しIAM１つだけで済むようにしたい

## AWS Organizationを使い環境ごとのグループ・アカウントを作成

- グループ・アカウントを環境ごとに作成
    - それぞれのアカウントは独立するので検証アカウント内は本番アカウント内のサービスは表示されないので間違ったサーバー変更は起き得ない


**アカウントイメージ**

| アカウント | 内容 |
|:-----------|:------------|
| 支払いアカウント | 頂点に存在、本番、開発、検証の費用をまとめて払う為だけのアカウント |
| 本番アカウント | 本番環境動作アカウント、インフラエンジニアだけ |
| ステージングアカウント | ステージング環境動作アカウント、インフラエンジニアだけ |
| 検証アカウント | 検証環境動作アカウント、開発エンジニア、インフラエンジニア両方 |

**スクリーンショット**

![screencapture-console-aws-amazon-organizations-v2-home-accounts-2021-05-15-23_29_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59264/7b345a71-a7a5-0d87-9978-1a76a1a34a47.png)

アカウントを細分化できました
※ メアドだけ黒塗り

## スイッチロール準備

今回は検証アカウント（toyscreation-sandbox）にEC2参照ロールを作成し
ログインアカウントで作成したIAMがスイッチロールでEC2参照ロールを使う

### 検証環境のロール作成

検証アカウント（toyscreation-sandbox）にログインしロール作成

1. 別のAWSアカウント
2. アカウントIDはログインアカウントを選択
3. オプションは選択に応じて

![スクリーンショット 2021-05-16 0.35.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59264/8ae0f84c-c783-9488-a104-34972b095de6.png)

権限ポリシーはサンプルとしてEC2のみ

![スクリーンショット 2021-05-16 0.37.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59264/2545c086-8d07-a992-b779-0850e90ff4a2.png)

タグ追加は今回はスキップ
ロールの作成、ロール名、ロール説明を入力

![スクリーンショット 2021-05-16 0.40.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59264/595b26ec-f85e-e9f9-82bf-9e0d001d9580.png)

### ログインアカウントのスイッチロール操作

#### IAMポリシー作成

ロール切替のポリシーが `sts:AssumeRole` になるのでポリシーを追加してユーザーに付与が必要

1. "TargetAccountID" にはスイッチ先のアカウントIDを入力
2. "TargetAccountRoleName" はスイッチ先のロールとして作成したロール名を指定

```
{
    "Version": "2012-10-17",
    "Statement": 
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::<TargetAccountId>:role/<TargetAccountRoleName>"
        }
    ]
}
```

![スクリーンショット 2021-05-16 2.25.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59264/ac649b54-24a6-776c-613c-6dfd9cc774f7.png)


タグの追加はスキップ
ポリシーの確認、名前、説明を入力
![screencapture-console-aws-amazon-iam-home-2021-05-16-01_09_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59264/a90463ba-f2bc-c925-c96c-8a350f98af73.png)

#### IAMユーザー追加

rootユーザーはスイッチロールの利用は出来ないのでIAMでユーザーを追加
上記で作成したポリシーをIAMユーザに付与

![スクリーンショット 2021-05-16 1.36.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59264/3039a63e-85e3-9944-f256-3a7caf4fd691.png)



### スイッチロール設定

対象IAMでログイン
アカウントメニューにロールの切り替えが表示

![スクリーンショット 2021-05-16 1.42.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59264/c0737702-85eb-3d16-1857-02a4729b0e6e.png)

![screencapture-signin-aws-amazon-switchrole-2021-05-16-01_25_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59264/4f8924f2-dbfc-9648-cd2c-70b52e76af13.png)

各項目を入力
1. アカウント：スイッチ先のアカウントIDを指定
2. ロール：スイッチ先のロール名を指定
3. 表示名：表示名を任意の文字列で指定

![screencapture-signin-aws-amazon-switchrole-2021-05-16-02_31_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59264/39e743ed-62e4-21db-6eec-bdda38344d15.png)

切り替え後ユーザーメニューに対象ロールが表示
![スクリーンショット 2021-05-16 2.33.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59264/1b5cffb7-9863-9fb0-2b23-2b86ce10183e.png)

## 確認

EC2の表示は許可されているが、それ以外は許可されていない（スクショはS3）

![スクリーンショット 2021-05-16 2.36.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59264/ef0899c7-4d25-1014-8bc3-9f8051e0c340.png)

![スクリーンショット 2021-05-16 2.36.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59264/151519f3-e06f-8b52-6ee7-278a7f2bdd63.png)

## まとめ

1. 本番環境、ステージング環境、検証環境等を完全に分離させた
    1. アカウント別に環境を完全に分離出来た（ただし支払いは一本化）
    1. 各環境で必要なAWSサービスが動いているかわかりやすくなった
2. スイッチロールを使い環境の切り替えが楽になった
    2. エンジニア別 x 環境別に権限をスイッチロールで切り替えれるようになった

---

いいね！と思ったら LGTM お願いします :clap::clap::clap:


<!--
参考サイト

https://tech.toreta.in/entry/2019/12/16/154024

https://business.ntt-east.co.jp/content/cloudsolution/column-try-25.html#section-02

https://garafu.blogspot.com/2020/11/how-to-switch-role.html
-->