スイッチロールをやってみた

AWSのIAMロールの切り替えをやってみたのでその記録です。

## やりたいこと
①EC2のフルアクセス権限があるIAMユーザーでEC2が見れること、S3が見れないことを確認
②S3のフルアクセス権限があるロールにスイッチロール
③EC2が見れないこと、S3が見れることを確認

## 切り替え先IAMロール作成
「信頼されたエンティティタイプ」でアカウントを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616521/fa6ad2e7-6425-4372-b754-0f100b127612.png)

ポリシーとしてAmazonS3FullAccessを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616521/b9bbf648-a7d6-4a34-96cb-7b62399511cb.png)

任意のロール名を入力してロールを作成します。
ここでは信頼ポリシーは以下のようになっています。
```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Principal": {
                "AWS": "【アカウントID】"
            },
            "Condition": {}
        }
    ]
}
```
Resourceは特に指定がないので、このロールをかぶったアカウントはどのS3バケットに対してもS3フルアクセスが与えられます。

## IAMユーザー作成

作業を簡易化するために、今回はカスタムパスワードを使い、パスワード再作成も不要なようにしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616521/daddf44c-8ffc-42f9-9e0a-dd514021f659.png)

今回、IAMユーザーには2つの権限を与えます。
一つはEC2のフルアクセス権限です。もう一つはこの場で「ポリシーの作成」を押してポリシーを新たに作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616521/ea13dba9-b328-4a66-a8c9-476c287ce4bd.png)

ロールの切り替えを行うには、STSサービスのAssumeRole権限が必要です。
これは、通常のIAMロールを作成するときに信頼ポリシーにも記載のある権限です。IAMロールはEC2やLambdaなどのリソースにかぶせることで権限を与えることができますが、今回はそれがアカウントに対してかぶせられるというイメージです。
そのためこのIAMユーザーは、アカウント

サービスで「STS」を選択し、「書き込み」の中から「AssumeRole」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616521/1b83eac3-39dc-4242-9338-8745679a1e8d.png)

リソースの「特定」を選択し、「ARNを追加」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616521/cacf62d5-7570-450a-964b-35db22eb55df.png)

先ほど作成した、S3フルアクセス権限をもつIAMロールの名前を上の段に入力することで、リソースARNが指定されます。入力したら「ARNを追加」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616521/d1c7ecda-b7f1-4979-9a28-93704ccba805.png)

ポリシーの作成が完了したら、元のユーザー作成画面に戻り、ただいま作成したポリシーを選択すればIAMユーザー作成完了です。
作成されたポリシーの中身を見てみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616521/6ff992bb-d8e7-45ea-ad11-b628ff7381d3.png)
```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::【アカウントID】:role/AmazonS3FullAccessRole"
        }
    ]
}
```
S3フルアクセス権限をもつロールに対して、AssumeRoleできるポリシーとなっていることがわかります。Principalは、今回の場合はEC2のフルアクセス権限をもつIAMユーザーということになります。

## 動作確認～ロール切り替え前

作成したIAMユーザーでログインし、EC2サービスダッシュボードへ遷移すると、インスタンス数などのリソースを確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616521/3ea564ad-9c70-4f76-867f-2ccf5c278cf8.png)

一方、S3サービス画面では権限不足によりバケットを確認する事が出来ません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616521/a55d56ba-9939-426f-8b9a-69decda31519.png)


## 動作確認～ロール切り替え

画面右上のIAMユーザー名＠アカウント名部分をクリックし、「ロールの切り替え」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616521/661017db-7911-4b41-9717-fad5bf386304.png)

アカウントID、S3フルアクセス権限をもつロール名を入力し、「Switch Role」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616521/50022fe9-1c74-4c57-aa6b-28e410e0c6e9.png)

## 動作確認～ロール切り替え後

先ほどまで確認できていたEC2のリソース部分が、権限不足によるAPIエラーが発生して確認できないことがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616521/da9fd2f0-ff2f-4c38-9992-8773eb1d4d10.png)

S3サービス画面に移動すると、S3バケットを問題なく確認できることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616521/03635c4c-2ff9-4576-bd0e-268e2aafd202.png)

## まとめ
IAMロールというものがどういうものか、IAMロールでAssumeRoleがどう使われているかがわかっていると、スイッチロールもより理解しやすいですね。

今回は1アカウント内での切り替えでしたが、実際の現場ではマルチアカウントで限定的な権限を一時的に与えたいときに使えそうです。