【AWS】IAMについて理解を深めるためのハンズオン③

さて、今回でラストです。

３回目の本記事では、開発部が仕事を一部委託している外注先に対する
IAMの実装をしていきます。

前回までの記事はこちら

[AWSのIAMについて理解を深めるためのハンズオン①](
https://qiita.com/ymochi_camera/items/bdaec3d0f3cfa60e7b0d)

[AWSのIAMについて理解を深めるためのハンズオン②](
https://qiita.com/ymochi_camera/items/e8fc4d58998a6ba8d28e)

<h1>IAMロールの適用</h1>

社外の人用にアカウントの作成をしたり、アクセスキーを発行することは基本的にしません。

それらの情報が漏洩してしまうと、セキュリティ事故に繋がる可能性があるからです。

社外の人がAWSリソースへアクセスする必要がある場合は、
アカウントやアクセスキーの代わりに「IAMロール」を付与します。
※社外の人がAWSアカウントを持っていることが前提です。

今回は、社外ユーザーが社内のEC2リソースにアクセスできるように設定をします。

本来であれば、別のAWSアカウントを作成して、別アカウント間でロールの付与ができることを確認するべきです。
今回のシナリオでは、同一アカウント内でロールを付与されるユーザー（委託先のユーザー）を作成して、擬似的にロールの付与をすることとします。
（決してAWSのアカウントを作るのがめんどくさかったわけでは・・・）

<h3>社外ユーザーの作成</h3>

まずは仮想的な社外ユーザーを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316676/7b28f5c9-9256-82a1-7247-49c5934fce68.png)

アクセス権限はこの場では特に何も設定しないでおきます。

ユーザー作成完了後、作成したユーザーでコンソールにログインし、EC2を開いて「インスタンスを起動」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316676/2dc9c6f4-fcab-9a71-05c4-445a85b56e17.png)

AMIを選択しようとすると、エラーが出て作成ができません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316676/30f1a1d8-7890-add7-6ffb-5882d0a680f7.png)

”You are not authorized to perform this operation.”
というエラーが出ています。

これは、権限がないからこの操作はできないというエラー内容です。
先ほど何もポリシーをアタッチしなかったので、これが正常な動作です。

では、このユーザーがEC2リソースにアクセスできるようにロールの設定をしてきましょう。

<h3>ロールの作成</h3>

今回の主役となっている会社のアカウントで、
社外ユーザーがEC2リソースにアクセスするためのロールを作成します。

IAMから「ロール」を選択し、「ロールの作成」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316676/93dc5b2d-75bd-121c-fdba-b137ca655fc6.png)

信頼されたエンティティの種類の選択では、別のAWSアカウントを選択し、
このロールの使用を許可する社外ユーザーのアカウントID（ログイン時に使用する１２桁の数字）を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316676/922918de-4ba3-3282-9675-b03141dc8e66.png)

アクセス権限ポリシーでは、EC2リソースへのアクセスを許可するため「AmazonEC2FullAccess」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316676/fff025c1-42bb-1555-0cb7-20a1658eb3db.png)

タグでは、適当に外部っぽものをつけておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316676/5906b136-d987-1dc3-d2f2-36f5976a312a.png)

最後に、ロール名を入力します。
ロール名は後ほど使用するので、控えておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316676/1a062c47-3b3b-92fe-b4a3-ca632bc993af.png)

<h3>ロールアクセス用のポリシー作成</h3>

次に、社外ユーザー側のアカウントで、先ほど作成したロールへアクセスするためのポリシーを作成する必要があります。

ポリシー作成画面でJSONを選択し、以下の内容を記述します。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::＜外部ユーザーのID＞:role/＜ロール名＞"
        }
    ]
}
```

社外ユーザーのIDは、委託先の社外ユーザーID（数字１２桁）を入力し、
ロール名は、先ほど作成したロール名を入力します。

<h3>ロールアクセス用のポリシー適用</h3>

社外ユーザーに先ほど作成したポリシーを適用します。

IAMの「ユーザー」から該当するユーザーを選択し、「アクセス権限の追加」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316676/4159ea7f-0f61-2874-4bbd-d17b805dcdca.png)

アクセス許可の付与で、既存のポリシーから先ほど作成したポリシーを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316676/2163e5c1-b40b-011e-5262-c4299f11dd46.png)

ポリシーにアタッチが完了したことを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316676/dca000a0-b024-9b53-3263-fe7a9dc40f06.png)

これで設定は完了しました。

<h3>いざ、スイッチロール</h3>

先ほどは権限がなくてEC2インスタンスを作成できなかった社外ユーザーですが、
ロールを付与されたことにより作成できるようになったはずです。

確認していきましょう。

画面右上のアカウント名が表示されている箇所をクリックし、
「ロールの切り替え」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316676/6a65b23f-5334-d6fe-8c30-c502b20c9918.png)

自分のアカウントIDと、付与されたロール名を入力し、「ロールの切り替え」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316676/a7681194-acda-36b4-c3e2-db3f2fb2279e.png)

ロールの切り替えに成功したら、画面右上のアカウント名に色がつきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316676/2813baa2-fd1f-f60d-2919-04be4ad0aa66.png)

EC2インスタンスが起動できるようになったのか、確認します。

EC2を開き、「インスタンスを起動」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316676/7b5ee249-ceaa-5d79-2e43-4cea0937f071.png)

先ほどはできなかったインスタンスタイプの選択ができるようになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316676/aaa31a01-aeff-1c72-8b47-3f34c483a9c5.png)

なんやかんや設定を進めていき、インスタンスの作成が完了しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316676/ef2f91f9-b678-f7dc-48bd-579d6bcded4d.png)

これで社外ユーザーはEC2インスタンスをいじり放題になったというわけですが、
委託した業務が終了した際は速やかにロールを削除しましょう。


<h1>所感</h1>

ハンズオンを通して、IAMについてだいぶわかるようになった気がします。

特にスイッチロールは「信頼関係？？？」「ロール？？？」みたいな状態だったので、
手を動かしながら説明を読むことで理解が深まりました。

皆さんもぜひ、ドキュメントなどを読むだけでなく、実際に手を動かしてみてはいかがでしょうか！


<h1>参考</h1>

[AWS を安全に使うために（IAMのベストプラクティス）](https://dev.classmethod.jp/articles/sugano-042-iam-best-practices/)

[AWSで複数アカウントをスイッチロールする方法](https://garafu.blogspot.com/2020/11/how-to-switch-role.html)

<h1>AWSのIAMについて理解を深めるためのハンズオンシリーズ</h1>
[AWSのIAMについて理解を深めるためのハンズオン①](
https://qiita.com/ymochi_camera/items/bdaec3d0f3cfa60e7b0d)

[AWSのIAMについて理解を深めるためのハンズオン②](
https://qiita.com/ymochi_camera/items/e8fc4d58998a6ba8d28e)

[AWSのIAMについて理解を深めるためのハンズオン③](
https://qiita.com/ymochi_camera/items/aac607413d54f50f1c25)

<h2></h2>

この記事はAWS初学者を導く体系的な動画学習サービス
「AWS CloudTech」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com