AWS Organization全体のCloudTrailの多重証跡を管理アカウントから一括チェック

AWS Organization全体のCloudTrailの多重証跡を管理アカウントから一括チェック

Control Towerで組織レベルの証跡有効化後に気づかず多重課金していませんか?
2025.12.08

AWS CloudTrailは、AWSアカウント内でのAPIコールやアクティビティを記録する証跡サービスです。監査やセキュリティ分析に不可欠ということもあり、1つ目の証跡は無償で利用できます。

ただし、アカウント単位で証跡を有効化したあとで、AWS Organization全体でも証跡を有効化するというように、複数の証跡が同時に有効になると、2つ目以降の証跡については、次のブログのように追加費用が発生します。

https://dev.classmethod.jp/articles/aws-cloudtrail-watch-out-for-2nd-trail-costs/

このような問題に対応するために、CloudTrailの多重証跡を以下のステップで設定を見直すことを想定しています。

  1. CloudTrail証跡の利用費の発生の確認
  2. 証跡の重複設定のチェック
  3. 証跡の棚卸し
  4. 証跡の最適化

本記事では、この第2ステップとして、Organization配下の全アカウントで多重証跡が発生していないかチェックするスクリプトを紹介します。

スクリプトの概要

管理アカウントから実行し、以下をチェックします。

  • 組織レベルの証跡
  • 各メンバーアカウントの証跡

有効な証跡が2つ以上あるアカウントを警告表示します。

スクリプトは次のGitHubリポジトリで公開しています

https://github.com/quiver/check-cloudtrail-under-organization

実行方法

AWS Organizationの 管理アカウント のCloudShellで実行します。

$ wget https://raw.githubusercontent.com/quiver/check-cloudtrail-under-organization/refs/heads/main/check_cloudtrail_status_under_organization.sh

$ bash check_cloudtrail_status_under_organization.sh

スクリプト実行例

CloudTrail証跡・二重課金チェック
=============================================

AWS Organization全体でCloudTrailの有効な証跡をチェックします
2つ目以降の証跡は有償です。そのような証跡を警告表示します

チェック対象リージョン: ap-northeast-1
※ 管理アカウントから実行する必要があります

実行しますか? (y/n): y

=== 組織レベルのCloudTrail ====
トレイル名: aws-controltower-BaselineCloudTrail(有効)
  - マルチリージョン: はい
  - リージョン: ap-northeast-1

組織レベル有効トレイル数: 1

=== メンバーアカウントレベルのCloudTrail ====
----------------
アカウントID: 123456789012
アカウント名: my-account
トレイル名: aws-controltower-BaselineCloudTrail(有効)
  - レベル: 組織
  - マルチリージョン: はい
  - リージョン: ap-northeast-1

トレイル名: my-legacy-trail(有効)
  - レベル: アカウント
  - マルチリージョン: はい
  - リージョン: ap-northeast-1

このアカウントの有効トレイル数: 1 (アカウントレベル) + 1 (組織レベル) = 2
警告: このアカウントでは 2 つのトレイルが有効です

この例では、組織証跡に加えてアカウントレベルの証跡 my-legacy-trail が有効なため、警告が表示されています。

仕組み

スクリプトは以下の流れで動作します。

  1. 管理アカウントで組織レベルの証跡をチェック
  2. 各メンバーアカウントにAssume Roleしてアカウントレベルの証跡をチェック
  3. 有効な証跡が2つ以上あるアカウントを警告

Assume Roleには以下のロールを利用します(優先順)。

  • AWSControlTowerExecution (Control Tower環境)
  • OrganizationAccountAccessRole (Organizations環境)

AWS Organizationの管理アカウント外から実行してエラーが発生する例

メンバーアカウントから本スクリプトを実行すると、以下のような 「管理アカウント以外から実行されています。管理アカウントから実行してください。」 というエラーが発生します。

多重証跡が見つかったら

警告が表示されたアカウントでは、以下を確認してください。

  1. 組織証跡とアカウント証跡が共存している理由
  2. アカウント証跡が本当に必要か
  3. 不要であれば、アカウント証跡を無効化

証跡を無効化すると、追加のイベントコピーが行われなくなり、CloudTrailの課金が止まります。

まとめ

AWS Organizationを長年運用していると、様々なイベントをトリガーに、結果的に複数の証跡が共存することがあります。

まずは、CloudTrailの利用費が発生していないか確認しましょう。

AWS Budgetsで検知することも可能です。

https://dev.classmethod.jp/articles/detect-and-notify-cloudtrail-paid-events-recorded/

AWS Organization利用時に利用費の発生が確認できた場合は、本記事で紹介したようなスクリプトを実行し、意図したものであるか棚卸しを行い、証跡設定を最適化しましょう。

参考

この記事をシェアする

FacebookHatena blogX

関連記事