EC2 フルアクセスだけって言ったよね？(カスタムポリシー作成)

MEGAZONE 株式会社 のテック陣「MEGAZONEのゆかいな仲間たち」がおくる、Megazone Japan Advent Calendar 2023 の8日目のエントリーです。

## はじめに
[前回](https://qiita.com/Bibulous/items/8271b029dd1078b3bf60)の記事に補足でIAMポリシーを自作できることをお伝えしました。

AWSマネージドポリシー(AmazonEC2FullAccess等)では、関連する他のAWSサービスも許可されていたりするため、**「本当にEC2だけのフルアクセス権限にしたい」** といった場合はカスタムポリシーを作成することで実現できます。

具体的には以下のようなEC2以外のAWSサービスの権限を消して...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632907/1d471491-008c-c378-bbfa-7bd5eb0f0c32.png)

↓↓↓

EC2だけのフルアクセス権限にしたい！といったケースです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632907/02508861-6a6b-17d7-efd9-13be2bf051eb.png)

それでは上記を満たすカスタムポリシーを作成してみましょう。


## カスタムポリシーの作成(EC2だけのフルアクセス権限)
IAMのページに移動し、ナビゲーションペイン(左メニュー)のPoliciesをクリックします。
IAMポリシーが一覧表示されるので右上のCreate policyをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632907/5948f40b-1917-e134-661e-d8c2440c36c1.png)

Policy editorはVisualを選択します。
Serviceの項目で「EC2」と入力すると候補が出てくるので、EC2を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632907/a912ab07-fb33-8508-c928-a989815405e7.png)

今回作成するカスタムポリシーはEC2のフルアクセス権限なので、All EC2 actions (ec2:*) にチェックを入れます。EC2に関する全てのActionが許可されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632907/eeae40be-621d-5b06-6f16-d4c55563bb0e.png)

下の方に注意マークで、Required permissions not selected.(必要な権限が選択されていません。)と出ていますね。

これは(EC2側で)許可したActionの中で、他のActionも許可する必要があるという注意となります。「1more」などをクリックすると詳細が表示され、別途許可が必要なActionが確認できます。
下記の場合はIAMの「iam:PassRole」が必要であることが分かります。※今回は許可設定しません
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632907/a74db5ec-46ae-13fb-5b30-cc66c3040df9.png)

Resourcesは「All」を選択し、右下のNextをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632907/2c2769ac-6093-aa76-bc69-c1f3fc7be49a.png)

Review and createページではPolicy nameを決めて入力します。
作成するポリシーの権限を確認したら、右下のCreate policyをクリックします。

その後、マネジメントコンソールの上部に「Policy [Policy name] created.」と表示されたら作成完了です:thumbsup_tone2:


## 作成したカスタムポリシーの確認
IAMのPoliciesのページでPolicy nameを検索すると、作成したポリシー(カスタムポリシー)が確認できます。

※私はAmazonEC2FullAccess-EC2Only_CustomPolicyという名前にしました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632907/95e7ec6a-fa56-fb1c-867a-c4f227713195.png)

ポリシーをクリックすると詳細が表示されます。EC2のFull accessだけであることが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632907/6e32005d-5e6f-a561-d796-5d238b6600c6.png)


## 作成したカスタムポリシーの挙動確認
さっそくtest-user君にアタッチしてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632907/cc9e310e-fc18-ba2f-73ca-66ebb5ab5e99.png)

EC2以外のAWSサービスは警告が表示され、内容は確認できないようになっています。
EC2のページへ移動してみると、すでにAuto Scaling GroupsとLoad balancersの数が表示できずエラーになっていますね。(※権限があれば表示されます)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632907/efde9f80-520b-f8a7-2551-c8a49f8effcf.png)

EC2インスタンスのMonitoring関連ではCloudWatchの権限がないため、グラフの表示ができません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632907/31f4fb9d-2fd7-fd48-207c-ab300d12fd6d.png)

エラー文面詰め込みすぎ:sweat_smile:
>To view this widget you need cloudwatch:GetMetricData because no identity-based policy allows the cloudwatch:GetMetricData action permission.
(このウィジェットを表示するには、cloudwatch:GetMetricData アクション権限を許可する ID ベースのポリシーがないため、cloudwatch:GetMetricData が必要です。)

ついでにIAMに関する権限もないため、IAMのページでも表示エラーとなり、自分にどんな権限があるかも分からず。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632907/fc5807ed-3097-4eda-51eb-41b75b938816.png)

EC2インスタンスの起動や停止、EBSの作成等はできるので、EC2だけのシンプルな操作であれば問題なさそうです。
MonitoringについてはAWS外の監視ソリューションで行うって手もあるか:thinking:


## おわりに
必要なアクセス許可のみ設定というのが[ベストプラクティス](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/best-practices.html#grant-least-privilege "Apply least-privilege permissions")ですが、どの権限が必要なのかを把握するのが課題になりそうですね。

「きめ細かな～」って言葉が好きなのですが、細かすぎると管理者が変わったら対応できなくなったり...。そのあたりは要件や運用ポリシーと相談でしょうか。