S3 Object-level loggingの設定をCloudFormationで書くときのポイント

September 1, 2018

CloudTrailをCFnで書くことになるんですが、ReadWriteTypeのNoneを選びたいところ実はNoneは無いのです。その対処法です。

背景

私がCloudTrailを設定するときは、後から参照することを考慮してReadWrite、あと特定のS3BucketのObject-level loggingとで、TrailおよびBucketを分けて設定することが多いのです。 このObject-level loggingをCloudFormationで書こうとしたときに、ちょっとハマったっていう話です。

ハマったところ

下記リファレンスの通り、Valid Values: ReadOnly | WriteOnly | Allとあり、Noneはありません。

  • https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_EventSelector.html

マネコンの設定画面ではラジオボタンでNoneを選べるんですが、CFnではどうやら定義の仕方が異なるようなのです。

Object-level logging用と全体の監査ログ用とでBucketレベルで分かれていると管理上微妙に都合が良かったりするので、できればNoneを選びたい…。

解決するコード

MyObjectLevelLoggingTrail:
  Type: "AWS::CloudTrail::Trail"
  Properties:
    EnableLogFileValidation: true
    EventSelectors:
      - DataResources:
          - Type: "AWS::S3::Object"
            Values:
              - !Sub "arn:aws:s3:::${MyTargetS3Bucket}/"
        IncludeManagementEvents: false # <= ここfalseにする
        ReadWriteType: 'All' # <= するとここの設定は無視される
    IncludeGlobalServiceEvents: false
    IsLogging: true
    IsMultiRegionTrail: false
    S3BucketName: 'my-object-level-logging-bucket'
    S3KeyPrefix: 'my-key-prefix'
    TrailName: "my-object-level-logging-trail"

IncludeManagementEventsfalseにすれば、実態としてはNoneを選んだことになります。できてよかった。



Recent blog posts



(c) Copyright 2023 Kotaro Yoshimatsu