パーソル&サーバーワークス

ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

【CloudTrail】S3データイベント保管バケットはログ取得対象外にしたほうがいい話

この記事を共有する

はじめに

S3のアクセスログを有効化する場合はログを保管しているバケットは対象外にしましょうと言うのは有名な話ですが、CloudTrailのS3データイベントではどうなのかと思って調べてみました。

いきなり結論

データイベントを保管するバケットは対象外にすることが推奨されます。
S3のアクセスログと同様に無限ループがおきてログが大量に生成されてしまいます。

データイベントをログ記録する - AWS CloudTrail

特定の Amazon S3 バケットのデータイベントをログ記録する場合は、証跡のデータイベントセクションで指定したログファイルの受け取り用に、データイベントをログに記録する Amazon S3 バケットを使用しないことをお勧めします。同じ Amazon S3バケットを使用すると、証跡は、ログファイルが Amazon S3 バケットに配信されるたびにデータイベントをログに記録します。ログファイルは、間隔で配信される集約イベントのため、イベントとログファイルの比率は 1:1 になりません。イベントは、次回のログファイルに記録されます。たとえば、CloudTrail がログを配信すると、PutObject イベントが S3 バケットで発生します。S3 バケットがデータイベントセクションでも指定されていると、証跡は PutObject イベントをデータイベントとして処理して記録します。このアクションは別の PutObject イベントであり、証跡はイベントを再び処理して記録します。

設定方法

結論がでたのですが、せっかくなので設定方法を記載します。
やり方はいくつかありますが、マネジメントコンソールとCloudFormationの2パターンを紹介します。

マネジメントコンソールでの実装

証跡の作成画面、またはデータイベントの編集にて以下の様に設定します。

  1. データイベントにチェックマークを入れる
  2. 高度なイベントセレクターに切り替え、設定値を入力
    1. データイベントタイプ:S3
    2. ログセレクターテンプレート:カスタム
    3. セレクター名:任意の名前
    4. フィールド:resources.ARN
    5. オペレーター:次で始まらない: (NotStartsWith)
    6. Value:arn:aws:s3:::ログを保管するバケット名/

capture-01

これでログを保管するバケットを除いたS3のデータイベントの保管ができます。

ちなみに今回は 高度なイベントセレクター を使って設定しています。基本的にはこちらをおすすめします。
基本的なイベントセレクター では"NotStartsWith"の設定がないのでS3が追加された場合は、都度証跡の設定追加が必要になります。

高度なイベントセレクターの設定についてはこちらに詳細が記載されています。
高度なイベントセレクタを使用してデータイベントをフィルタする - AWS CloudTrail

CloudFormationでの実装

マネジメントコンソールで設定したものと同様の設定になります。

AWSTemplateFormatVersion: 2010-09-09
Resources:
  Trail:
    Type: AWS::CloudTrail::Trail
    Properties: 
      TrailName: trail-name
      IsLogging: true
      S3BucketName: bucket-name
      IncludeGlobalServiceEvents: true
      IsMultiRegionTrail: true
      EnableLogFileValidation: true
      AdvancedEventSelectors:
        - Name: "Exclude Log Bucket"
          FieldSelectors:
            - Field: eventCategory
              Equals: [Data]
            - Field: resources.type
              Equals: [AWS::S3::Object]
            - Field: resources.ARN
              NotStartsWith: 
                - arn:aws:s3:::bucket-name/

12行目のAdvancedEventSelectors からが 高度なイベントセレクター の設定です。
詳細は以下をご参考ください。
AWS::CloudTrail::Trail AdvancedFieldSelector - AWS CloudFormation

まとめ

CloudTrailのデータイベントもS3アクセスログ同様に保管するバケットは対象外としましょう。

このことに言及しているブログは意外と見かけなかったので調査してみました。
皆さんの参考になれば幸いです。

この記事は私が書きました

渡邉 和貴

CCoEをやってます。あと森と山に出没します。 好きなAWSサービスは CloudFormation

渡邉 和貴

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。