[機能拡張]AWS IAM Access Analyzerの未使用アクセス検出機能を検証してみた

## はじめに
AWSでリソースへのアクセス権の制御を行うためのサービスにIAM(Identitiy and Access Management)があります。

https://aws.amazon.com/jp/iam/?nc2=h_ql_prod_se_iam

IAMを使用してアクセス権を付与する際には、ユーザー・ミスによる不慮のリソース削除事故等を未然防止するために、最小権限のみを付与することがベストプラクティスとなっています。
この最小権限付与を実現するための取り組みとして、IAMにはIAM Access Analyzerと呼ばれる機能があります。昨年実施されたAWS re:Invent 2023では、IAM Access Analyzerの機能拡張が発表されており、未使用のIAMユーザーとロールを特定するための未使用アクセス検出機能が提供されるようになりました。
本記事では、実際に筆者のAWS環境で当該未使用アクセス検出機能を検証した際の検証結果をご紹介します。

## IAM Access Analyzer未使用アクセス検出機能
下記がIAM Access Analyzerのトップ画面になりますが、今回の機能拡張により、赤枠で囲んだ箇所が新規に追加されています。
![p1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/50761744-4def-79ce-fa1b-2eb32d61cd18.jpeg)
当該機能を確認するためには、最初にアナライザーを作成する必要がありますので、まずはアナライザーから作成していきます。

### アナライザーの作成
「アナライザーを作成」ボタンを押すと下記の画面に遷移します。赤枠で囲んでいる「未使用のアクセス分析」という選択肢が新たに追加されています。今回はこれを選択します。
![p2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/8e9049fa-53e4-0eac-53b9-c6408706ee77.jpeg)
画面をスクロールすると以下のような表示がありますので、必要事項を入力します。筆者の環境では、複数のAWSアカウントを保有しており、AWS Organizationsサービスを使用していますので、今回は「選択されたアカウント」に「現在の組織」を選択しました。
![q1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/b7b68e0b-6fd0-cdd1-4a3b-fdacadaf81e0.jpeg)
更にスクロールし、画面右下の「アナライザーを作成」ボタンを押下します。
![p4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/e585750e-495b-4bbe-1610-0ba852a261c5.jpeg)

### 検出結果の出力
実際の検出には多少のタイムラグは発生したものの、アクティブになっているIAMユーザーやロールの内、現在未使用状態になっているものの一覧が問題なく抽出できました。検出結果の総数(今回は計22件)や具体的なIAMリソース名などが表示されているのがわかります。(赤枠部分参照)
![q2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/7a9738fe-2ee6-3fc9-995e-5e19e96a4f08.jpeg)

### アーカイブの作成
上記の検出結果一覧から、「アナライザーを管理」ボタンを押下すると、アナライザーの詳細情報を参照することができます。
![q3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/586de53a-b3e8-8a58-574a-34e098776a55.jpeg)
検出された未使用アクセスのうち、今後使用する可能性があるもの、あるいは、消す必要のないものと判断可能なものについては、それらのアクセス権リストをアーカイブすることができます。今回の未使用アクセス権抽出機能を確認するだけであれば、特にアーカイブする必要はありませんが、せっかくなのでどのようにアーカイブされるかを見てみることにします。

### アーカイブルールの作成
どのような基準でアクセス権リストをアーカイブするかを設定するためのアーカイブルールを作成します。上記画面の赤枠で囲んでいる「アーカイブルールを作成」ボタンを押下します。
![q4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/c0d639ee-1557-048d-4797-0fdc7ed87305.jpeg)
アーカイブ名の記入、及び、ルールの基準をプルダウンから選択します。今回は、リソースタイプがIAMユーザーに等しい物を基準にアーカイブすることにしました。
画面をスクロールすると、ルールの条件に一致するものの出力結果が表示されます。(今回は計5件)
![q5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/2616b66c-c30a-b911-4c51-50fd76810ec0.jpeg)
確認後、画面右下の「アクティブな検出結果を作成およびアーカイブ」ボタンを押下します。アーカイブが終わると下記画面の赤枠で囲まれているアーカイブルールが作成されます。
![q6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/f67b7143-2e63-4296-2853-122dc8d7cae9.jpeg)
アーカイブされた未使用アクセス権については、検出結果のステータスのプルダウンメニューで「アーカイブ済み」を選択すると表示されます。
![q7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/8ed32fcf-1675-31f1-6b77-e176f17f2114.jpeg)
この時点で、ステータスが「アクティブ」なものはリソースタイプがIAMロールの計17件となっています。(赤枠参照)
![q8.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/95192095-b397-e25d-0f3d-6468dacfb4d9.jpeg)

### 未使用アクセス権削除後の検出結果
サンプル的にIAMのロール一覧から2件、未使用アクセス権を削除してみます。タイムラグはあるものの、これらの削除した未使用アクセス権については、ステータスのプルダウンメニューで「解決済み」を選択すると表示されます。検出結果の総数も正しく2件と表示されています。
![q9.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/6ed4e4bf-4a89-4242-1614-a77f8809aee3.jpeg)
また、ステータスが「アクティブ」状態にあったIAMロールを2件削除したことで、ステータスが「アクティブ」な未使用アクセス権の個数が15件に減っていることがわかります。(赤枠参照)
![q10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1567099/70595cf5-04b9-7420-f7ba-30a5fbf40443.jpeg)


## 当該機能を使用するメリット
開発環境やテスト環境等では、様々な検証を目的として日々多くのIAMロール等が作成されることが想定されます。それらを全て一覧表などを作成して厳密に管理していることは意外と少ないのではないでしょうか。

筆者の環境でもAWSが提供しているハンズオンなどを実施して、色々なロールを作成してきましたが、管理はできてなかったですし、当該機能を使用してみたことで、自分でも作成したか否かをよく覚えていないような未使用アクセス権を色々見つけることができました。
当該機能がなければ、IAMのロール一覧から使用中の物・未使用のものを正確にフィルタリングすることは非常に大変だと思います。誤って使用中のロールを削除してしまい、リソースへのアクセス時に予期せぬインシデントが発生するリスクもあるかなと考えます。

当該機能が提供されたことで、本当に必要なアクセス権のみを残すといったアクセス権の適切な棚卸しを可能にしてくれる便利な機能だと思いました。

## おわりに
今回は、AWS re:Invent 2023で発表された新機能・アップデートの内、IAM Access Analyzerの未使用アクセス権検出機能における検証を実施し、検証結果に基づく考察を行いました。
当該機能を使用することで適切にアクセス権の棚卸しができるようになると思いましたので、今後も定期的にアクセス権の棚卸しを実施していきたいと思います。