IAM ロールを切り替える

# ロールの切り替えとは

AWSアカウントが増えた場合、それぞれのAWSアカウントにユーザーを作ると運用管理が大変です。
スイッチロールを使うことで、1つのAWSアカウントにユーザーを作成し、そのAWSアカウントから残りのAWSアカウントにスイッチしてログインすることができます。

管理者は、ユーザーの追加や削除は1つのAWSアカウントになるので運用管理が楽です。
ユーザーも複数のAWSアカウントごとにログインログアウトログインがなくなり便利です。

図で表すとこのようなイメージです。

![switch-role-Page-3 (1).png](https://qiita-image-store.s3.amazonaws.com/0/27932/01d17529-b2eb-634e-7c41-2c80e12ffb57.png)

AWSアカウント1は末尾・・71
AWSアカウント2は末尾・・51

# やってみます

以下の流れでやってみます

1. 今回の例
2. Account2で、IAM Roleを作成します。(スイッチした先のAccount2で与える権限をロールとして定義する)
3. Account1で、IAM Policyを作成し、それをUserまたはGroupにアタッチ(今回はGroupにアタッチします)
4. スイッチロールを試す

## ①今回の例

例えば管理者チーム、開発者チームがあるとします。
それぞれ管理者チームをAdmin_group、開発者チームをDev_groupでIAM Groupを作成していきます。
Admin_groupにuser1、Dev_groupにuser2を追加していきます。

![switch-role-Page-2.png](https://qiita-image-store.s3.amazonaws.com/0/27932/4c97d759-0b5a-a0f3-d47f-b5b6da5dadc8.png)

## ②Account2で、IAM Roleを作成します。

管理者のAdmin_group用のロールと開発者のDev_group用のロールを作成します。

![switch-role-Page-1.png](https://qiita-image-store.s3.amazonaws.com/0/27932/3162c584-b6e2-a671-56f9-7e601645d8c8.png)

AWS Account2に管理者でログインし、IAMの画面で"ロールの作成"をクリックします。

![スクリーンショット 0030-09-02 18.56.31.png](https://qiita-image-store.s3.amazonaws.com/0/27932/06405101-7cb5-0b58-0964-e951f85f17a3.png)

"別のAWSアカウント"をクリックし、スイッチ元となるアカウント(AWS Account1)のIDを入力し、"次へ"をクリックします。

![スクリーンショット 0030-09-02 19.03.38.png](https://qiita-image-store.s3.amazonaws.com/0/27932/03cb1aa1-1bb8-7994-aa39-67dd24d77e97.png)

管理者の権限をアタッチしたいので、"AdministratorAccess"のポリシーにチェックを入れ、"次へ"をクリックします。

![スクリーンショット 0030-09-02 18.58.12.png](https://qiita-image-store.s3.amazonaws.com/0/27932/272c3254-d3da-f195-e4c0-54e84e837525.png)

ロール名に"Admin_group"を入力し、"ロールの作成"をクリックします。

![スクリーンショット 0030-09-02 18.58.50.png](https://qiita-image-store.s3.amazonaws.com/0/27932/fdc5bd27-9594-23c5-8368-58d9b21f566b.png)

Admin_groupというIAMロールが作成されました。

![スクリーンショット 0030-09-02 18.59.04.png](https://qiita-image-store.s3.amazonaws.com/0/27932/fa0d50ed-828a-bf5a-ba77-1a59d6f5b447.png)

割愛しますが、Dev_groupというIAMロールも同じ要領で作成します。
先程のAdmin_groupとの違いは権限に"AmazonEC2FullAccess"をアタッチしている点です。
※DevなのでEC2のみに権限を与えていると思ってください。

![スクリーンショット 0030-09-02 18.59.58.png](https://qiita-image-store.s3.amazonaws.com/0/27932/eea31c9d-ad44-1371-00d4-1b76fd95378c.png)

作成したロールの"信頼関係"というタブを確認すると、ロールを渡すことができる(信頼している)AWSアカウントIDの設定が入っています。
これでこのAWSアカウントID(Account1)にロールを渡すことができます。

![スクリーンショット 0030-09-02 19.06.06.png](https://qiita-image-store.s3.amazonaws.com/0/27932/133ca2f2-c084-4129-7545-16d2391cb48c.png)

## Account1で、IAM Policyを作成、それをUserまたはGroupにアタッチ(今回はGroupにアタッチします)

#### ポリシー作成

スイッチ元となるAccount1に管理者でログインし、IAMの画面を開き"ポリシー作成"をクリックします。

![スクリーンショット 0030-09-02 20.40.50.png](https://qiita-image-store.s3.amazonaws.com/0/27932/e3416f5f-05d8-b089-16c5-1af767f01a29.png)

"Json"のタブをクリックし、以下の内容をコピペします。
スイッチ先のAccount2(・・58)へのSTSアクセス権限を与えています。(STSはロールをくださいというAPIアクセスのこと)

```json:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::xxxxxxxxxx58:role/Admin_group"
        }
    ]
}
```

![スクリーンショット 0030-09-02 20.45.17.png](https://qiita-image-store.s3.amazonaws.com/0/27932/eae99113-8603-ff04-cf6e-566094d7857c.png)

"Admin_policy"という名前をつけて"Create"をクリックします。

![スクリーンショット 0030-09-02 20.45.42.png](https://qiita-image-store.s3.amazonaws.com/0/27932/ea508bc5-a742-3d71-bda2-0dcee419197c.png)

Dev_policyも同じ要領で作成します。

#### グループ作成

IAMの画面で"グループ作成”をクリックします。

![スクリーンショット 0030-09-02 20.46.45.png](https://qiita-image-store.s3.amazonaws.com/0/27932/6318ce18-b909-3e0e-29ad-e8ea0ff40461.png)

"Admin_group"と入力し"次へ"をクリックします。

![スクリーンショット 0030-09-02 20.47.06.png](https://qiita-image-store.s3.amazonaws.com/0/27932/a51c2bda-4410-7a22-8acc-29b5b8069dca.png)

ポリシーのアタッチで先程作成した"Admin_policy"にチェックを入れ"次へ"をクリックします。

![スクリーンショット 0030-09-02 20.47.24.png](https://qiita-image-store.s3.amazonaws.com/0/27932/5c17e79d-6650-1f55-4964-b94ff61119ff.png)

#### ユーザー作成

IAMの画面で"ユーザーの追加"をクリックし、以下を入力し、"次へ"をクリックします。
ユーザー名に"test_user1"
"AWSマネージメントコンソールへのアクセス"にチェック
パスワードは任意を入力

![スクリーンショット 0030-09-02 20.49.32.png](https://qiita-image-store.s3.amazonaws.com/0/27932/d07b9a09-0b12-505f-aa37-202713befb5c.png)

ユーザーをグループに追加で"Admin_group"にチェックを入れ"次へ"をクリックします。

![スクリーンショット 0030-09-02 20.49.44.png](https://qiita-image-store.s3.amazonaws.com/0/27932/5417575c-ee98-168b-5401-53320890dc4f.png)

"ユーザーの作成"をクリックします。

![スクリーンショット 0030-09-02 20.49.57.png](https://qiita-image-store.s3.amazonaws.com/0/27932/8b91f3c3-7662-7f73-cd3e-06e5f135aa78.png)

Dev用ユーザーのtest_user2も同じ要領でユーザー作成する

# スイッチロール試してみる

全体の流れはこんな感じ
スイッチ元のユーザーが、スイッチ先のアカウントからロールをもらってログインします。

![switch-role-Page-4.png](https://qiita-image-store.s3.amazonaws.com/0/27932/fff7aaed-b28b-3740-dec9-2672035c31d2.png)

test_user1(スイッチ元の管理者ユーザー)でログインし、右上のユーザー名のところをクリックし、"ロールの切り替え"をクリックします。

![スクリーンショット 0030-09-02 20.51.52.png](https://qiita-image-store.s3.amazonaws.com/0/27932/c8d770f9-e3f0-1212-1b1a-c11362d39b40.png)

ロールの切り替え画面で、スイッチ先のAWSアカウントID(末尾58のaccount2)を入力し、ロール名を先程作成した"Admin_group"を入力し、"ロールの切り替え"をクリックします。

![スクリーンショット 0030-09-02 20.52.33.png](https://qiita-image-store.s3.amazonaws.com/0/27932/cc3a37b2-39d8-6a77-24a6-f2be7ed9d49d.png)

ユーザー名部分がピンク色になり、末尾が58のAccount2にログインしているのが分かります。

![スクリーンショット 0030-09-02 20.52.49.png](https://qiita-image-store.s3.amazonaws.com/0/27932/92df6dd7-d76a-458e-da00-a842474fe708.png)

S3をクリックすると、Administorator権限を持ってるので表示されます。

![スクリーンショット 0030-09-02 20.53.26.png](https://qiita-image-store.s3.amazonaws.com/0/27932/9a735700-54e0-e9c6-7409-a002785365da.png)

元のアカウントに戻る時は、画面右上のユーザー名をクリックし、"test_user1に戻る"をクリックします。

![スクリーンショット 0030-09-02 20.53.35.png](https://qiita-image-store.s3.amazonaws.com/0/27932/e6246279-e79d-3d7a-4537-a752746c8759.png)

次にDevユーザーでの動作確認です。
test_user2でログインしなおし、画面右上のユーザー名をクリックし"ロールの切り替え"をクリックします。

![スクリーンショット 0030-09-02 20.54.34.png](https://qiita-image-store.s3.amazonaws.com/0/27932/b14631f5-2b36-6ea8-7c01-7523be193947.png)

ロールの切り替え画面で、スイッチ先のAWSアカウントID(末尾58のaccount2)を入力し、ロール名を先程作成した"Dev_group"を入力し、"ロールの切り替え"をクリックします。

![スクリーンショット 0030-09-02 20.54.49.png](https://qiita-image-store.s3.amazonaws.com/0/27932/d42928fb-bf72-66f0-60b5-1bc07fa3ca44.png)

ユーザー名部分がピンク色になり、末尾が58のAccount2にログインしているのが分かります。

![スクリーンショット 0030-09-02 20.55.00.png](https://qiita-image-store.s3.amazonaws.com/0/27932/748dd72d-f4ee-c6b0-cfdf-78b1939913bd.png)

S3をクリックすると、Access Deniedで表示されません。DevはEC2の権限しかないからです。

![スクリーンショット 0030-09-02 20.55.33.png](https://qiita-image-store.s3.amazonaws.com/0/27932/269a7aae-9ad1-7677-81f4-26954bae4232.png)

EC2インスタンスを作成することはできます。DevはEC2の権限があるからです。

![スクリーンショット 0030-09-02 20.56.27.png](https://qiita-image-store.s3.amazonaws.com/0/27932/c52b4483-2dc8-b02f-c07c-8ff05cf0fac5.png)

# まとめ

スイッチ元のIAMグループに対してスイッチ先のIAMロールが1:1で結びついているため、ユーザーが増えてもスイッチ先のIAMロールを増やす必要はありません。

CLIでのスイッチロールも簡単です。こちらの方のブログにきれいにまとまってるので参照ください。
https://nasrinjp1.hatenablog.com/entry/2018/04/06/215737