CloudTrailによるIAMアクセス権限変更の追跡 ── インシデント対応のための権限変更履歴の調査

目次

概要

セキュリティインシデントが発生した際、「誰が・いつ・どのIAM権限を変更したか」を正確に把握することは、原因究明と再発防止の第一歩です。例えば、ある日突然、本来アクセスできないはずのS3バケットにアクセスできるようになっていた場合、ポリシーの変更やグループへの追加といったIAM権限の変更履歴を遡って調査する必要があります。

AWS CloudTrailは、AWSアカウント内で行われたすべてのAPI呼び出しを記録するサービスです。IAMに関する操作も例外ではなく、ポリシーの作成・アタッチ、ロールの変更、グループメンバーシップの変更など、あらゆる権限変更がイベントとして記録されます。本記事では、CloudTrailを使ってIAMアクセス権限の変更履歴を調査する方法を解説します。

なお、アクセスキー漏洩時の調査手法については流出したアクセスキーの操作履歴をAthena × CloudTrailで調査するで解説しています。本記事はアクセスキー漏洩調査ではなく、IAM権限そのものの変更追跡に焦点を当てています。

CloudTrailがIAMのAPI呼び出し(ポリシー変更・ロール変更・グループ変更)を記録し、管理者がイベント履歴から調査する構成図
CloudTrailがIAMのAPI呼び出し(ポリシー変更・ロール変更・グループ変更)を記録し、管理者がイベント履歴から調査する構成図

この記事のメリット

  • 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イベントを、操作の種類ごとに整理します。

ポリシー操作

イベント名説明
CreatePolicyIAMポリシーの新規作成
CreatePolicyVersion既存ポリシーの新しいバージョンを作成(ポリシー内容の変更)
DeletePolicyIAMポリシーの削除
AttachUserPolicy管理ポリシーをユーザーにアタッチ
DetachUserPolicy管理ポリシーをユーザーからデタッチ
AttachRolePolicy管理ポリシーをロールにアタッチ
DetachRolePolicy管理ポリシーをロールからデタッチ
AttachGroupPolicy管理ポリシーをグループにアタッチ
DetachGroupPolicy管理ポリシーをグループからデタッチ
PutUserPolicyインラインポリシーをユーザーに設定
PutRolePolicyインラインポリシーをロールに設定
PutGroupPolicyインラインポリシーをグループに設定

ユーザー・グループ操作

イベント名説明
AddUserToGroupユーザーをグループに追加(グループのポリシーが適用される)
RemoveUserFromGroupユーザーをグループから削除
CreateUserIAMユーザーの新規作成
DeleteUserIAMユーザーの削除

ロール操作

イベント名説明
CreateRoleIAMロールの新規作成
DeleteRoleIAMロールの削除
UpdateAssumeRolePolicyロールの信頼ポリシー(AssumeRolePolicy)の変更

Permissions Boundary操作

イベント名説明
PutUserPermissionsBoundaryユーザーにPermissions Boundaryを設定
PutRolePermissionsBoundaryロールにPermissions Boundaryを設定
DeleteUserPermissionsBoundaryユーザーのPermissions Boundaryを削除
DeleteRolePermissionsBoundaryロールのPermissions Boundaryを削除

これらのイベントはすべてイベントソースが iam.amazonaws.com として記録されます。CloudTrailのイベント履歴でイベントソースをフィルタリングすることで、IAM関連の操作のみを抽出できます。

IAM権限変更イベントの分類図(ポリシー操作・ユーザー/グループ操作・ロール操作・Permissions Boundary操作の4カテゴリ)
IAM権限変更イベントの分類図(ポリシー操作・ユーザー/グループ操作・ロール操作・Permissions Boundary操作の4カテゴリ)

CloudTrailイベントの構造

CloudTrailが記録するイベントには、調査に必要な情報が含まれています。IAM権限変更を調査する際に注目すべき主要フィールドを確認します。

フィールド説明例
eventTimeイベント発生日時(UTC)2026-03-22T10:30:00Z
eventSourceAPIを提供したサービスiam.amazonaws.com
eventName実行されたAPI操作名AttachUserPolicy
userIdentity操作を実行したプリンシパルの情報IAMユーザー名、ロール名、アカウントID
requestParametersAPIリクエストのパラメータアタッチ対象のユーザー名、ポリシーARN
responseElementsAPIレスポンスの内容操作の成功/失敗
sourceIPAddressリクエスト元のIPアドレス203.0.113.10
userAgentリクエストに使用されたツールconsole.amazonaws.com、aws-cli/2.x

requestParameters フィールドには、どのユーザーやロールに対してどのポリシーがアタッチされたかといった具体的な情報が含まれるため、権限変更の詳細を正確に把握できます。

関連サービスとの比較

IAM権限の管理・監視に関連するサービスは複数あります。それぞれの目的と特徴を比較し、CloudTrailが権限変更の追跡に最適である理由を整理します。

サービス目的IAM権限変更に対する役割
CloudTrailAPI呼び出しの記録と追跡誰が・いつ・何を変更したかを記録する。インシデント対応時の調査に最適
AWS Configリソースの構成変更の記録と評価IAMポリシーやロールの「構成の変化」を記録する。変更前後の差分確認に適している
IAM Access Analyzer外部からのアクセスを分析リソースベースポリシーで外部エンティティにアクセスを許可しているリソースを検出する。権限変更の追跡ではない
Security Hubセキュリティ状態の一元管理セキュリティベストプラクティスへの準拠状況を評価する。権限変更の追跡ではなく、現在の設定の評価

権限変更の追跡において、CloudTrailとAWS Configは補完的な関係にあります。

  • CloudTrail: 「誰が」「いつ」「どのAPIを呼び出したか」を記録します。操作の実行者と操作内容の特定に優れています
  • AWS Config: 「リソースの構成がどう変わったか」を記録します。変更前後のポリシー内容の差分確認に優れています

インシデント対応で「誰がこの権限変更を行ったか」を特定する場合はCloudTrailが最適です。一方、「ポリシーの内容がどのように変わったか」を確認する場合はAWS Configが適しています。

フリーランス案件
クラウドおさる
クラウドキャリアフリーランス

AWS の実務経験があるなら、単価を上げにいく

AWS に特化したフリーランスエージェントです。以下は取り扱い案件の一例です。設計・SRE・セキュリティ・生成 AI の領域で、専門を掛け合わせるほど単価が上がります。

横にスクロールできます。掲載時点の情報のため、募集が終了している場合があります。条件の近い案件をご紹介しますので、お気軽にご相談ください。

実践

前提条件

以下のリソースが作成済みであること。

リソース種別リソース名用途
IAMユーザーtest-user権限変更の対象となるテスト用ユーザー
IAMグループdevelopersテスト用グループ
IAMポリシーAmazonS3ReadOnlyAccess(AWS管理ポリシー)テスト用にアタッチするポリシー

実践の流れ

以下の流れで、IAM権限の変更操作を行い、CloudTrailでその変更履歴を調査します。

  1. IAM権限の変更操作を実施する(CloudTrailに記録されるイベントを発生させる)
  2. CloudTrailのイベント履歴でIAM関連イベントを検索する
  3. 特定ユーザーの権限変更履歴を詳細に分析する

ステップ1: IAM権限の変更操作

CloudTrailに記録されるイベントを発生させるため、いくつかのIAM権限変更操作を行います。

ポリシーのアタッチ

  • AWSマネジメントコンソールにログインし、リージョンがap-northeast-1(東京)であることを確認します
  • 上部の検索バーにIAMと入力し、表示された「IAM」を選択します
  • 左側ナビゲーションの「ユーザー」を選択します
  • ユーザー一覧からtest-userをクリックします
  • 「許可」タブを選択し、右上の「許可を追加」をクリックして、開いたメニューから「許可を追加」を選択します
  • 「許可のオプション」で「ポリシーを直接アタッチする」を選択します
  • 「許可ポリシー」の検索バーにS3ReadOnlyと入力し、AmazonS3ReadOnlyAccessにチェックを入れます
  • 「次へ」をクリックし、内容を確認して「許可を追加」をクリックします
test-user にAmazonS3ReadOnlyAccessポリシーをアタッチする許可追加画面
test-user にAmazonS3ReadOnlyAccessポリシーをアタッチする許可追加画面

グループへのユーザー追加

  • 左側ナビゲーションの「ユーザーグループ」を選択します
  • グループ一覧からdevelopersをクリックします
  • 「ユーザー」タブを選択し、「ユーザーを追加」をクリックします
  • test-userにチェックを入れ、「ユーザーを追加」をクリックします
developers グループに test-user を追加した後のグループメンバー一覧
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と入力します
  • 「ポリシーの作成」をクリックします
test-user のインラインポリシー作成画面(JSON入力済みの状態)
test-user のインラインポリシー作成画面(JSON入力済みの状態)
test-user の許可タブ(AmazonS3ReadOnlyAccess、EC2ReadOnlyInlinePolicy、developers グループ経由のポリシーが表示されている状態)
test-user の許可タブ(AmazonS3ReadOnlyAccess、EC2ReadOnlyInlinePolicy、developers グループ経由のポリシーが表示されている状態)

ステップ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」を選択します
  • 左側ナビゲーションの「イベント履歴」を選択します
CloudTrail のイベント履歴画面(初期表示状態)
CloudTrail のイベント履歴画面(初期表示状態)

イベントソースでフィルタリング

IAMに関連するイベントのみを表示するために、イベントソースでフィルタリングします。

  • 「ルックアップ属性」のドロップダウン(既定は「読み取り専用」)で「イベントソース」を選択します
  • 右隣の「イベントソースを入力」にiam.amazonaws.comと入力し、表示された候補を選びます

フィルタリング結果に、ステップ1で実施した操作に対応するイベントが表示されます。

イベントソースを iam.amazonaws.com でフィルタリングした結果(AttachUserPolicy、AddUserToGroup、PutUserPolicy などのイベントが表示されている状態)
イベントソースを iam.amazonaws.com でフィルタリングした結果(AttachUserPolicy、AddUserToGroup、PutUserPolicy などのイベントが表示されている状態)

表示されるイベントの中から、ステップ1で実施した操作に対応する以下のイベントを確認します。

イベント名対応する操作
AttachUserPolicytest-user に AmazonS3ReadOnlyAccess をアタッチ
AddUserToGrouptest-user を developers グループに追加
PutUserPolicytest-user にインラインポリシー EC2ReadOnlyInlinePolicy を追加

イベント名でフィルタリング

特定のイベント名で絞り込むこともできます。例えば、ポリシーのアタッチ操作のみを確認したい場合は以下のようにフィルタリングします。

  • 「ルックアップ属性」のドロップダウンで「イベント名」を選択します
  • 右隣の入力欄にAttachUserPolicyと入力し、表示された候補を選びます
イベント名を AttachUserPolicy でフィルタリングした結果
イベント名を AttachUserPolicy でフィルタリングした結果

ユーザー名でフィルタリング

特定のユーザーが実行した操作のみを確認する場合は、ユーザー名でフィルタリングします。

  • 「ルックアップ属性」のドロップダウンで「ユーザー名」を選択します
  • 操作を実行したIAMユーザー名を入力し、表示された候補を選びます

この方法により、特定の管理者が行ったすべてのIAM変更操作を一覧で確認できます。

ステップ3: イベントの詳細を分析する

イベント一覧から個別のイベントを選択し、詳細情報を確認します。

  • イベント履歴の一覧からAttachUserPolicyイベントをクリックします

イベントの詳細画面が表示されます。ここで、以下の情報を確認できます。

  • イベント時間: 操作が実行された日時
  • ユーザー名: 操作を実行したIAMユーザー
  • 発信元 IP アドレス: 操作元のIPアドレス
  • イベントソース: iam.amazonaws.com
  • イベントレコード(JSON): 操作の詳細情報
AttachUserPolicy イベントの詳細画面(イベント時間、ユーザー名、ソースIPアドレスが確認できる状態)
AttachUserPolicy イベントの詳細画面(イベント時間、ユーザー名、ソースIPアドレスが確認できる状態)

「イベントレコード」セクションに表示される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
}
AttachUserPolicy イベントのイベントレコードJSON(requestParameters に userName と policyArn が表示されている状態)
AttachUserPolicy イベントのイベントレコードJSON(requestParameters に userName と policyArn が表示されている状態)

この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:30AttachUserPolicyadmin-userAmazonS3ReadOnlyAccess をアタッチ
2026-03-22 10:35AddUserToGroupadmin-userdevelopers グループに追加
2026-03-22 10:40PutUserPolicyadmin-userEC2ReadOnlyInlinePolicy を追加

このように時系列で整理することで、権限がどのような順番で付与されたか、不自然な権限昇格が行われていないかを確認できます。

イベント履歴の制限事項

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 の実務経験があるなら、単価を上げにいく

AWS に特化したフリーランスエージェントです。以下は取り扱い案件の一例です。設計・SRE・セキュリティ・生成 AI の領域で、専門を掛け合わせるほど単価が上がります。

横にスクロールできます。掲載時点の情報のため、募集が終了している場合があります。条件の近い案件をご紹介しますので、お気軽にご相談ください。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社ジェニュイン(https://genuine-pt.jp)の代表取締役.

2018年〜インフラエンジニアとしてキャリアをスタートし、オンプレミスのネットワーク・サーバ環境で3年半、クラウド環境で4年半の8年間エンジニアとして従事。
2021年に佐藤氏の創業した株式会社Luxyを引き継ぎ、代表に就任。
その後アガルートグループ内の株式会社ジェニュインと合併。
合併後同社代表に就任。

目次