概要
セキュリティインシデントが発生した際、「誰が・いつ・どのIAM権限を変更したか」を正確に把握することは、原因究明と再発防止の第一歩です。例えば、ある日突然、本来アクセスできないはずのS3バケットにアクセスできるようになっていた場合、ポリシーの変更やグループへの追加といったIAM権限の変更履歴を遡って調査する必要があります。
AWS CloudTrailは、AWSアカウント内で行われたすべてのAPI呼び出しを記録するサービスです。IAMに関する操作も例外ではなく、ポリシーの作成・アタッチ、ロールの変更、グループメンバーシップの変更など、あらゆる権限変更がイベントとして記録されます。本記事では、CloudTrailを使ってIAMアクセス権限の変更履歴を調査する方法を解説します。
なお、アクセスキー漏洩時の調査手法については流出したアクセスキーの操作履歴をAthena × CloudTrailで調査するで解説しています。本記事はアクセスキー漏洩調査ではなく、IAM権限そのものの変更追跡に焦点を当てています。

この記事のメリット
- CloudTrailが記録するIAM関連イベントの種類と内容を体系的に理解できる
- CloudTrailのイベント履歴を使って、特定ユーザーの権限変更を効率的に調査する方法を習得できる
- IAM権限変更の追跡において、CloudTrail・AWS Config・IAM Access Analyzer・Security Hubの使い分けを明確に理解できる
- インシデント対応時に「誰が・いつ・何の権限を変更したか」を迅速に特定するスキルを身につけられる
- SCS試験で「IAM権限変更の追跡に適したサービス」を問われた際に正確に判断できるようになる
執筆者とキャラクター紹介
執筆者:土肥(とひ)
株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。

クラウドおさる
クラウドおさるはじめましてでござる。弊猿はクラウドおさる。IT インフラが異常に発達した猿山から、雲に乗って地上の AWS を学びに降りてきたのでござる。



基礎編や Cloud Practitioner の記事では、とひさんに素朴な疑問をぶつける役でござるな。Security - Specialty などの記事では、要所でワンポイントや注意点をひとこと添えるでござる。



猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。
技術解説
CloudTrailの基本
CloudTrailは、AWSアカウント内のAPI呼び出しを「イベント」として記録するサービスです。CloudTrailが記録するイベントは3種類あります。
| イベントタイプ | 説明 | 例 |
|---|---|---|
| 管理イベント | AWSリソースに対する管理操作 | IAMポリシーの作成、EC2インスタンスの起動、S3バケットの作成 |
| データイベント | リソース上またはリソース内で実行される操作 | S3オブジェクトの取得、Lambda関数の呼び出し |
| Insightsイベント | 異常なAPI呼び出しパターンを検知 | 短時間での大量のAPI呼び出し |
IAMに関する操作(ポリシーの作成・変更・アタッチ、ロールの変更、ユーザーの追加など)は 管理イベント に分類されます。管理イベントはCloudTrailのデフォルト設定で記録されるため、追加の設定なしでIAM権限変更の履歴を確認できます。
IAM関連のCloudTrailイベント
IAMの権限変更に関連する主要なCloudTrailイベントを、操作の種類ごとに整理します。
ポリシー操作
| イベント名 | 説明 |
|---|---|
CreatePolicy | IAMポリシーの新規作成 |
CreatePolicyVersion | 既存ポリシーの新しいバージョンを作成(ポリシー内容の変更) |
DeletePolicy | IAMポリシーの削除 |
AttachUserPolicy | 管理ポリシーをユーザーにアタッチ |
DetachUserPolicy | 管理ポリシーをユーザーからデタッチ |
AttachRolePolicy | 管理ポリシーをロールにアタッチ |
DetachRolePolicy | 管理ポリシーをロールからデタッチ |
AttachGroupPolicy | 管理ポリシーをグループにアタッチ |
DetachGroupPolicy | 管理ポリシーをグループからデタッチ |
PutUserPolicy | インラインポリシーをユーザーに設定 |
PutRolePolicy | インラインポリシーをロールに設定 |
PutGroupPolicy | インラインポリシーをグループに設定 |
ユーザー・グループ操作
| イベント名 | 説明 |
|---|---|
AddUserToGroup | ユーザーをグループに追加(グループのポリシーが適用される) |
RemoveUserFromGroup | ユーザーをグループから削除 |
CreateUser | IAMユーザーの新規作成 |
DeleteUser | IAMユーザーの削除 |
ロール操作
| イベント名 | 説明 |
|---|---|
CreateRole | IAMロールの新規作成 |
DeleteRole | IAMロールの削除 |
UpdateAssumeRolePolicy | ロールの信頼ポリシー(AssumeRolePolicy)の変更 |
Permissions Boundary操作
| イベント名 | 説明 |
|---|---|
PutUserPermissionsBoundary | ユーザーにPermissions Boundaryを設定 |
PutRolePermissionsBoundary | ロールにPermissions Boundaryを設定 |
DeleteUserPermissionsBoundary | ユーザーのPermissions Boundaryを削除 |
DeleteRolePermissionsBoundary | ロールのPermissions Boundaryを削除 |
これらのイベントはすべてイベントソースが iam.amazonaws.com として記録されます。CloudTrailのイベント履歴でイベントソースをフィルタリングすることで、IAM関連の操作のみを抽出できます。


CloudTrailイベントの構造
CloudTrailが記録するイベントには、調査に必要な情報が含まれています。IAM権限変更を調査する際に注目すべき主要フィールドを確認します。
| フィールド | 説明 | 例 |
|---|---|---|
eventTime | イベント発生日時(UTC) | 2026-03-22T10:30:00Z |
eventSource | APIを提供したサービス | iam.amazonaws.com |
eventName | 実行されたAPI操作名 | AttachUserPolicy |
userIdentity | 操作を実行したプリンシパルの情報 | IAMユーザー名、ロール名、アカウントID |
requestParameters | APIリクエストのパラメータ | アタッチ対象のユーザー名、ポリシーARN |
responseElements | APIレスポンスの内容 | 操作の成功/失敗 |
sourceIPAddress | リクエスト元のIPアドレス | 203.0.113.10 |
userAgent | リクエストに使用されたツール | console.amazonaws.com、aws-cli/2.x |
requestParameters フィールドには、どのユーザーやロールに対してどのポリシーがアタッチされたかといった具体的な情報が含まれるため、権限変更の詳細を正確に把握できます。
関連サービスとの比較
IAM権限の管理・監視に関連するサービスは複数あります。それぞれの目的と特徴を比較し、CloudTrailが権限変更の追跡に最適である理由を整理します。
| サービス | 目的 | IAM権限変更に対する役割 |
|---|---|---|
| CloudTrail | API呼び出しの記録と追跡 | 誰が・いつ・何を変更したかを記録する。インシデント対応時の調査に最適 |
| AWS Config | リソースの構成変更の記録と評価 | IAMポリシーやロールの「構成の変化」を記録する。変更前後の差分確認に適している |
| IAM Access Analyzer | 外部からのアクセスを分析 | リソースベースポリシーで外部エンティティにアクセスを許可しているリソースを検出する。権限変更の追跡ではない |
| Security Hub | セキュリティ状態の一元管理 | セキュリティベストプラクティスへの準拠状況を評価する。権限変更の追跡ではなく、現在の設定の評価 |
権限変更の追跡において、CloudTrailとAWS Configは補完的な関係にあります。
- CloudTrail: 「誰が」「いつ」「どのAPIを呼び出したか」を記録します。操作の実行者と操作内容の特定に優れています
- AWS Config: 「リソースの構成がどう変わったか」を記録します。変更前後のポリシー内容の差分確認に優れています
インシデント対応で「誰がこの権限変更を行ったか」を特定する場合はCloudTrailが最適です。一方、「ポリシーの内容がどのように変わったか」を確認する場合はAWS Configが適しています。
実践
前提条件
以下のリソースが作成済みであること。
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| IAMユーザー | test-user | 権限変更の対象となるテスト用ユーザー |
| IAMグループ | developers | テスト用グループ |
| IAMポリシー | AmazonS3ReadOnlyAccess(AWS管理ポリシー) | テスト用にアタッチするポリシー |
実践の流れ
以下の流れで、IAM権限の変更操作を行い、CloudTrailでその変更履歴を調査します。
- IAM権限の変更操作を実施する(CloudTrailに記録されるイベントを発生させる)
- CloudTrailのイベント履歴でIAM関連イベントを検索する
- 特定ユーザーの権限変更履歴を詳細に分析する
ステップ1: IAM権限の変更操作
CloudTrailに記録されるイベントを発生させるため、いくつかのIAM権限変更操作を行います。
ポリシーのアタッチ
- AWSマネジメントコンソールにログインし、リージョンが
ap-northeast-1(東京)であることを確認します - 上部の検索バーに
IAMと入力し、表示された「IAM」を選択します - 左側ナビゲーションの「ユーザー」を選択します
- ユーザー一覧から
test-userをクリックします - 「許可」タブを選択し、右上の「許可を追加」をクリックして、開いたメニューから「許可を追加」を選択します
- 「許可のオプション」で「ポリシーを直接アタッチする」を選択します
- 「許可ポリシー」の検索バーに
S3ReadOnlyと入力し、AmazonS3ReadOnlyAccessにチェックを入れます - 「次へ」をクリックし、内容を確認して「許可を追加」をクリックします


グループへのユーザー追加
- 左側ナビゲーションの「ユーザーグループ」を選択します
- グループ一覧から
developersをクリックします - 「ユーザー」タブを選択し、「ユーザーを追加」をクリックします
test-userにチェックを入れ、「ユーザーを追加」をクリックします


インラインポリシーの追加
- 左側ナビゲーションの「ユーザー」を選択し、
test-userをクリックします - 「許可」タブを選択し、右上の「許可を追加」をクリックして、開いたメニューから「インラインポリシーを作成」を選択します
- ポリシーエディタは「ビジュアル」で開くので、「JSON」に切り替えて以下のポリシーを入力します(既定で入っているひな形は消してから貼り付けます)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeSecurityGroups"
],
"Resource": "*"
}
]
}- エディタの下に「Editor has no errors and no warnings.」と表示されることを確認して「次へ」をクリックします
- 「ステップ 2 確認して作成」でポリシー名に
EC2ReadOnlyInlinePolicyと入力します - 「ポリシーの作成」をクリックします




ステップ2: CloudTrailイベント履歴でIAM関連イベントを検索する
ステップ1で実施したIAM権限の変更操作がCloudTrailに記録されていることを確認します。CloudTrailのイベント履歴には、過去90日間の管理イベントが保存されています。
IAMはグローバルサービスで、IAM API のイベントは us-east-1(バージニア北部)リージョンの CloudTrail イベント履歴に記録されます。マルチリージョンの証跡が設定されていない限り、ap-northeast-1(東京)の「イベント履歴」には IAM のイベントは表示されません。以下の手順ではコンソール右上のリージョンを「米国東部(バージニア北部)us-east-1」に切り替えてから操作します。
- コンソール右上のリージョン切替で「米国東部(バージニア北部)us-east-1」を選択します
- 上部の検索バーに
CloudTrailと入力し、表示された「CloudTrail」を選択します - 左側ナビゲーションの「イベント履歴」を選択します


イベントソースでフィルタリング
IAMに関連するイベントのみを表示するために、イベントソースでフィルタリングします。
- 「ルックアップ属性」のドロップダウン(既定は「読み取り専用」)で「イベントソース」を選択します
- 右隣の「イベントソースを入力」に
iam.amazonaws.comと入力し、表示された候補を選びます
フィルタリング結果に、ステップ1で実施した操作に対応するイベントが表示されます。


表示されるイベントの中から、ステップ1で実施した操作に対応する以下のイベントを確認します。
| イベント名 | 対応する操作 |
|---|---|
AttachUserPolicy | test-user に AmazonS3ReadOnlyAccess をアタッチ |
AddUserToGroup | test-user を developers グループに追加 |
PutUserPolicy | test-user にインラインポリシー EC2ReadOnlyInlinePolicy を追加 |
イベント名でフィルタリング
特定のイベント名で絞り込むこともできます。例えば、ポリシーのアタッチ操作のみを確認したい場合は以下のようにフィルタリングします。
- 「ルックアップ属性」のドロップダウンで「イベント名」を選択します
- 右隣の入力欄に
AttachUserPolicyと入力し、表示された候補を選びます


ユーザー名でフィルタリング
特定のユーザーが実行した操作のみを確認する場合は、ユーザー名でフィルタリングします。
- 「ルックアップ属性」のドロップダウンで「ユーザー名」を選択します
- 操作を実行したIAMユーザー名を入力し、表示された候補を選びます
この方法により、特定の管理者が行ったすべてのIAM変更操作を一覧で確認できます。
ステップ3: イベントの詳細を分析する
イベント一覧から個別のイベントを選択し、詳細情報を確認します。
- イベント履歴の一覧から
AttachUserPolicyイベントをクリックします
イベントの詳細画面が表示されます。ここで、以下の情報を確認できます。
- イベント時間: 操作が実行された日時
- ユーザー名: 操作を実行したIAMユーザー
- 発信元 IP アドレス: 操作元のIPアドレス
- イベントソース:
iam.amazonaws.com - イベントレコード(JSON): 操作の詳細情報


「イベントレコード」セクションに表示されるJSONを確認します。requestParameters フィールドに注目すると、どのユーザーにどのポリシーがアタッチされたかがわかります。
{
"eventVersion": "1.11",
"userIdentity": {
"type": "IAMUser",
"principalId": "AIDAXXXXXXXXXXXXXXXXX",
"arn": "arn:aws:iam::123456789012:user/admin-user",
"accountId": "123456789012",
"userName": "admin-user"
},
"eventTime": "2026-03-22T10:30:00Z",
"eventSource": "iam.amazonaws.com",
"eventName": "AttachUserPolicy",
"awsRegion": "us-east-1",
"sourceIPAddress": "203.0.113.10",
"userAgent": "console.amazonaws.com",
"requestParameters": {
"userName": "test-user",
"policyArn": "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess"
},
"responseElements": null
}

このJSON情報から、以下のことが読み取れます。
- 操作者:
admin-userが操作を実行した(userIdentity.userName) - 操作内容:
test-userにAmazonS3ReadOnlyAccessポリシーをアタッチした(requestParameters) - 操作日時:
2026-03-22T10:30:00Zに実行された(eventTime) - 操作元: IPアドレス
203.0.113.10から、AWSマネジメントコンソール経由で実行された(sourceIPAddress、userAgent)
同様にAddUserToGroupイベントの詳細を確認すると、requestParametersフィールドに対象のグループ名とユーザー名が記録されています。
{
"requestParameters": {
"groupName": "developers",
"userName": "test-user"
}
}PutUserPolicyイベントでは、requestParametersにインラインポリシーの内容そのものが記録されています。
{
"requestParameters": {
"userName": "test-user",
"policyName": "EC2ReadOnlyInlinePolicy",
"policyDocument": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Action\":[\"ec2:DescribeInstances\",\"ec2:DescribeSecurityGroups\"],\"Resource\":\"*\"}]}"
}
}このように、CloudTrailのイベントレコードを確認することで、IAM権限変更の詳細を正確に把握できます。
ステップ4: 時系列での権限変更の整理
インシデント対応では、特定ユーザーの権限変更を時系列で整理することが重要です。ステップ2・3で確認した情報をもとに、test-userの権限変更履歴を時系列で整理すると以下のようになります。
| 日時 | イベント名 | 操作者 | 変更内容 |
|---|---|---|---|
| 2026-03-22 10:30 | AttachUserPolicy | admin-user | AmazonS3ReadOnlyAccess をアタッチ |
| 2026-03-22 10:35 | AddUserToGroup | admin-user | developers グループに追加 |
| 2026-03-22 10:40 | PutUserPolicy | admin-user | EC2ReadOnlyInlinePolicy を追加 |
このように時系列で整理することで、権限がどのような順番で付与されたか、不自然な権限昇格が行われていないかを確認できます。
イベント履歴の制限事項
CloudTrailのイベント履歴を使用する際の制限事項を確認します。
| 項目 | 内容 |
|---|---|
| 保持期間 | 過去90日間のみ |
| フィルタ条件 | 同時に使用できるフィルタは1つのみ |
| イベントタイプ | 管理イベントのみ(データイベント・Insightsイベントは証跡の設定が必要) |
| 検索の柔軟性 | 複雑な条件での検索は不可(Athenaを使えば柔軟なクエリが可能) |
90日を超える期間の調査や、複数条件での複雑な検索が必要な場合は、CloudTrailの証跡(Trail)を作成してS3バケットにログを保存し、Amazon Athenaで分析する方法が有効です。Athenaを使ったCloudTrailログの分析については流出したアクセスキーの操作履歴をAthena × CloudTrailで調査するを参照してください。
まとめ
- CloudTrailはAWSアカウント内のすべてのAPI呼び出しを記録しており、IAM権限の変更操作も管理イベントとしてデフォルトで記録される
- IAM関連のイベントはイベントソース
iam.amazonaws.comでフィルタリングすることで効率的に抽出できる AttachUserPolicy、PutUserPolicy、AddUserToGroupなど、権限変更に関連するイベントのrequestParametersを確認することで、誰に・どのポリシーが・いつ付与されたかを正確に特定できる- イベントの
userIdentityフィールドで操作者、sourceIPAddressで操作元のIPアドレス、userAgentで使用ツール(コンソール/CLI)を確認できる - CloudTrailのイベント履歴は過去90日間の管理イベントを保持しており、それを超える期間の調査にはS3への証跡保存とAthenaによる分析が必要になる
- IAM権限変更の「追跡・調査」にはCloudTrail、「構成変更の差分確認」にはAWS Configが適しており、目的に応じて使い分ける
参照先
- AWS CloudTrail とは
- CloudTrail イベント履歴でのイベントの表示
- CloudTrail ログイベントのリファレンス
- CloudTrail レコードの内容
- IAM と AWS CloudTrail のログ記録
- CloudTrail イベント履歴でのイベントのフィルタリング












