IAM Access Analyzer で最小権限のポリシーを洗い出す

IAM Access Analyzer で最小権限のポリシーを洗い出す

AWS 上でユーザーの誤操作を防ぐため、最小権限の IAM ポリシーを構成することが重要です。本記事では、IAM Access Analyzer のポリシー生成機能を使用して、CloudTrail の操作ログから自動でポリシーを作成する方法を紹介します。
2026.08.13

はじめに

こんにちは、Kanaru です。
AWS 上でユーザーがリソースを操作する際、誤操作や情報漏洩が発生した場合の影響を最小限にするため、最小権限の IAM ポリシーを構成することが重要です。しかし、操作を実施するのに必要な権限を正確に列挙することは難しいです。

本記事では、IAM Access Analyzer のポリシー生成機能を使用して、ある操作を実施するための最小権限の IAM ポリシーを作成する方法を紹介します。

注意点

自動生成される IAM ポリシーは基本的に不完全です。例えば、リージョンやアカウントの指定は手動で行う必要があります。また、アクションもワイルドカードで指定可能です。
このように、「最小権限」が指す範囲は広く、解釈の余地があります。そのため、あらかじめプロジェクト内でポリシーの作成方針を統一しておくことが重要です。

また、一部の操作(Put 系や List 系など)は細かいリソースの指定ができないことにも注意が必要です。詳細は公式リファレンスを参照してください。

手順

AWS IAM には CloudTrail で記録した過去の操作から自動でポリシーを作成する機能である IAM Access Analyzer policy generation があります。今回はこの機能を利用してポリシーの叩き台を作成し、そこから調整を繰り返す方針で実施します。

具体的に、次のような手順で進めます。

  1. 証跡用ロールの作成
  2. 証跡の作成
  3. 作業の実施
  4. ポリシーの作成
  5. 再検証
  6. 手動確認

証跡用ロールの作成

CloudTrail では、ロールやユーザーごとに API 操作が記録されます。そのため、操作を記録するための専用のロールを作成します。

このロールは、スイッチロールや IAM Identity Center のユーザー経由など、なんらかの方法でロール作成者が引き受けられるように、信頼ポリシーを設定してください。また、対象の操作を実施するために必要な広めの許可ポリシー(Administrator Access など)をアタッチしてください。

今回は、trail-test-role という名前のロールを作成しました。

証跡の作成

次に、CloudTrail の証跡を作成します。ログは S3 バケットに保存されます。内容を暗号化する場合は、ここで KMS キーを作成できます。

create-trail.png

ログイベントは、管理イベントのみで十分です。データイベントは Lambda の実行や、S3 オブジェクトの読み書きなどを記録しますが、IAM Access Analyzer はデータイベントからポリシーを生成しません

log-event.png

操作の実施

ここで、証跡用ロールに切り替え、記録する対象の操作を実施してください。

今回は、マネコンから以下の操作を実施しました。

  1. Lambda 関数の作成
  2. Lambda 関数コードの更新
  3. Lambda 関数の削除

ポリシーの作成

以下、元のユーザーやロールに戻って作業します。

stop-recording.png

次に、証跡用ロールの詳細からポリシーを生成します。

policy-generation.png

適切に期間、リージョン、証跡を指定して、「ポリシーを生成」をクリックします。

policy-generation-1.png

しばらくすると、ポリシーの生成が完了します。

created-policy.png

生成されたポリシーを表示し、指示に従って進むと、「許可をカスタマイズ」という画面になります。

customize.png

ここで、リソースの指定が可能なアクションはリージョンやアカウント ID、リソース名がプレースホルダーになっているので、適切な範囲に書き換えます。また、ポリシーの追加や削除も可能です。

指示に従って進み、「ポリシーを作成およびアタッチ」をクリックすれば先ほど作成したポリシーが自動でアタッチされます。

再検証

元々証跡用ロールにあった AdministratorAccess を外し、再度スイッチロールします。元の手順を繰り返すことができれば完了です。

ポリシーが足りない場合は、次のようなエラーが出ます。

% aws --profile trail-test s3 ls                                           

aws: [ERROR]: An error occurred (AccessDenied) when calling the ListBuckets operation: User: arn:aws:sts::***:assumed-role/trail-test-role/botocore-session-1786605785 is not authorized to perform: s3:ListAllMyBuckets because no identity-based policy allows the s3:ListAllMyBuckets action

ほとんどの場合、不足している権限がエラーログに記載されているので、適切に追加してください。

手動確認

作成されたポリシーは必ず手動で確認するようにしましょう。

  • 不要な権限が含まれていないか
  • 不足した権限はないか
  • リージョン、アカウント、リソースの範囲は適切か

特に、マネコンの操作からポリシーを生成した場合、操作ミスや関係のない部分の読み込みなどにより、不要な権限が発生しやすいです。適宜修正してください。また、修正後は必ず操作が正しく行えるか、再検証するようにしましょう。

おわりに

本記事では、CloudTrail の証跡ログを基に最小権限のポリシーを作成する方法を紹介しました。証跡ログを元にポリシーの叩き台を自動生成することで、手動で権限を列挙するよりも抜け漏れを少なくしながら、手間も削減できました。

この記事をシェアする

関連記事