AWS IAMロールのスイッチロールを体感してみたメモ

BeeXの営業の田中です:hugging:
寒い日が続きますが、あと２日でクリスマスだと思うと気持ちはなぜか温かくなります:christmas_tree:

今日はIAMロールの「スイッチロール」について、説明文を読んでもよくわからなかったので、実際にハンズオンで触ってみましたので、その内容をメモに残します。
色々なブログやオンライン講座を参考にしてやってみた内容なので、少々ツギハギ感があり分かりづらいかもしれません…💦
(BeeXのエンジニアの方に目を通して頂き、技術的な間違いはないはずです。。)

#IAMロール

AWSのリソースに対して、アクセス権限をロールとして付与することができる。
リソース間のアクセス権を設定する。

#IAMロールの信頼ポリシー

IAMロールは、監査人などに一時的に権限委譲を行う際にも利用される。
IAMロールの権限移譲操作に特化したポリシーがIAMロールの信頼ポリシーである。
信頼ポリシーが付与されたIAMロールが持つ権限を、信頼ポリシーの操作主体であるPrincipalに委譲することができる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/f31c3ffd-c86f-85dd-76b8-8d802cfb3cf6.png)

#ハンズオンで実施した内容

**1.アカウントBの作成**
今回のハンズオンのために、元々持っていたアカウント(アカウントA)とは別にもう一つのアカウント(アカウントB)を用意しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/2ec4d5a8-4666-6fec-d89b-c6415d8d2c77.png)


**2.権限移譲用ロールの設定**
アカウントAで、アカウントBへの権限移譲用のロールを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/ffa340de-06ba-e963-4924-93c077eba87f.png)

**3.アカウントBのポリシー設定**
アカウントB内で権限移譲用ロールをポリシーとして設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/b73161f6-bbd7-3188-23b7-cdabfd3e0970.png)

**4.IAMユーザーへのポリシー適用**
3.で設定したポリシーをアカウントBのIAMユーザーに適用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/842a613a-a57d-9ed3-cb60-d41ae51f4417.png)

**5.アカウントBからアカウントAのマネージメントコンソールにアクセスする**
アカウントBのIAMユーザーを利用して、IAMロールを切り替えることでアカウントAにアクセス可能となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/d5a451c1-626b-24a4-d8a4-ec38ede6a5ff.png)

#実際の画面説明
アカウントAのマネージメントコンソール画面にログインした状態から始めます。

##アカウントAでロールの作成

IAM>ロールで「ロールの作成」します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/574391dc-eb63-cc63-a45f-c0bd1e17a38c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/acbff4e5-bebc-7d9c-0612-4abc7de59534.png)
別のAWSアカウントを選択し、アカウントIDでアカウントBのアカウントIDを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/7a4c3067-a31f-c856-ebfd-3ce55f5f386a.png)
今回はハンズオンなので、EC2のFullAccess権限を付与するポリシーを選択してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/6d686726-c220-b7b8-44ee-cc2c901934d7.png)
ロール名は「EC2FullAccess_B」とし、「ロールの作成」をします。
※キャプチャの範囲が不十分で「ロールの作成」ボタンが見えてないですが実際の画面では右下に青いボタンがあります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/89fd1479-f357-7e53-8017-b3aa03b95ce3.png)

アカウントAに、信頼されたエンティティとしてアカウントBを指定したロールの作成が完了です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/7bb1f6ee-2d5e-ea05-b2d1-41198128f83b.png)

##アカウントBにIAMポリシー適用

アカウントAに設定した権限移譲用ロール(EC2FullAccess_B)の以下の情報をメモしておきます:writing_hand:
ARN、ロールの説明、アカウントAのID
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/463b2936-54e3-cec6-aa05-1e1a55dd0250.png)


アカウントBにログインして、ロールを設定するための新しいIAMユーザーを用意する必要があるので、まずポリシーを作成します。
IAM>ポリシーから「ポリシーの作成」を選択します。
今回は、ハンズオンなので、「管理ポリシーのインポート」からベースの記述をインポートして使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/cecfd592-bba5-d4a3-23ed-ded23e68ec68.png)
「AdministratorAccess」をインポートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/310baf65-074c-8eb5-c057-6585990eab55.png)
インポート後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/32032f08-cfc9-f7f7-7d97-6e494e566b81.png)
ActionとResourceをそれぞれ設定します。
Actionは、sts:AssumeRoleを指定して、アカウントAのロールをアカウントBに設定することを定義します。
Resourceは、アカウントAで作成した権限移譲用ロール(EC2FullAccess_B)のARNを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/0e2e7e3f-61f9-a8fc-6ef5-7a7e6dea46a3.png)


ポリシー名で「EC2FullAccess_B」を指定して、ポリシーの作成をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/a1ea8e8a-ce38-1d90-610c-b98f88e35cb6.png)

このポリシーをユーザーに付与していきます。
新しくTanakaBというユーザーを作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/d375e715-97a3-c6a0-faa7-1ca15ceb6956.png)

「既存のポリシーを直接アタッチ」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/d183e15d-154d-6627-bf6c-bc3e94424b12.png)

さきほど作ったEC2FullAccess_Bを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/1b099161-ea1b-2632-ec72-74ab4c5bf6a5.png)

内容を確認して、ユーザーを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/fa88af51-87db-9287-6200-fdb5efc089ad.png)

##アカウントBからアカウントAにアクセスする

さきほど作成した、TanakaBのアカウントでログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/e439b438-afe7-93a6-041d-83c23f98aeaf.png)


「ロールの切り替え」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/7e1003ef-59dd-c5bf-4628-ff1cf4f08ec3.png)


アカウントAの情報、ロール名を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/094b2c4a-8447-8dd7-c327-35e2d07976dc.png)

ロールを切り替えて、アカウントBからアカウントAのマネージメントコンソールにアクセスできるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1818929/4926619d-d503-c3a3-ff2e-12c238b7762a.png)


**アカウントBのユーザーに一時的に権限を与えて、アカウントAのマネージメントコンソールに画面にアクセスすることに成功しました！！**

#スイッチロールがあると助かること

スイッチロールについて、最初は説明文を読んでも何が出来て、それによってどんないいことがあるのかわかりませんでした:rolling_eyes:

今回、実際に触ってみて別のアカウントからログインせずともコンソール画面を見えるところまで確認ができて、管理者用の機能として、数クリックでほかのアカウントに入ることができるのはとても便利だと思いました。

ほかにも説明を読んだだけではわからない機能はたくさんあるので、またこういった形で触ってみたいと思います:slight_smile: