全S3バケットのデータイベントをCloudTrailロギング対象にする設定の留意点

2017.09.22

こんにちは、虎塚です。

AWSのアップデートで、すべてのS3バケットで発生したデータイベント (S3オブジェクトレベルのイベント) をCloudTrailでロギングするように、一括設定できる機能が登場しました。

この記事では、全S3バケットを対象にした設定と、個々のS3オブジェクトを対象にした設定が、単一のtrailに同時に存在する場合に、どのような動作になるかを説明します。

今回のアップデートの概要

今回登場した機能を使うと、アカウント内のすべてのS3バケットのデータイベントをロギングするように、CloudTrailの各trailをワンクリックで設定できます。

AWS Management Consoleで、個々のTrailの詳細画面を見ると、次のような設定項目が登場しています。チェックを入れるだけで設定完了です。

すべてのS3バケットを対象にする設定

設定の実態は、Trailのイベントセレクタの一つです。AWS CLIで確認できます。

aws cloudtrail get-event-selectors --trail-name test-event-selector
{
    "EventSelectors": [
        {
            "IncludeManagementEvents": false,
            "DataResources": [
                {
                    "Values": [
                        "arn:aws:s3"
                    ],
                    "Type": "AWS::S3::Object"
                }
            ],
            "ReadWriteType": "All"
        }
    ],
    "TrailARN": "arn:aws:cloudtrail:ap-northeast-1:123456789012:trail/test-event-selector"
}

なお、これまでは、S3オブジェクト (S3バケット) ごとにロギング設定を手動で追加する必要がありました。全S3バケットのイベントを一括してロギングしたい場合、今回登場した機能は、とても便利です。

本機能の留意点

今回登場したS3バケット全体に対する設定は、個々のイベントセレクタの設定を上書きします。

第一に、ロギング対象のバケットを指定する設定は、もちろん上書きされます。たとえば、特定のbucket (bucket-a) のデータイベントだけをロギングする設定をしていたtrailに、全S3バケットをロギングする設定を追加した場合、bucket-a以外のすべてのバケットで発生したデータイベントが、ロギングの対象になります。

第二に、ロギング設定のRead/WriteTypeも上書きされることに注意してください。

  • ReadOnlyのイベント例: ListObjects, HeadObject
  • WriteOnlyのイベント例: PutObject, DeleteObject

たとえば、あるtrailに、特定のS3バケットでのWriteOnlyイベントだけをロギングする設定がすでにあるとします。このtrailに、全S3バケットのReadOnlyイベントだけをロギングする設定を新規に追加したとします。

AWS Management Consoleの設定画面で示すと、次のようになります。

ReadOnlyとWriteOnly

もしくは、次のようなイベントセレクタがtrailに設定されていると考えてください。

aws cloudtrail get-event-selectors --trail-name test-event-selector
{
    "EventSelectors": [
        {
            "IncludeManagementEvents": false,
            "DataResources": [
                {
                    "Values": [
                        "arn:aws:s3"
                    ],
                    "Type": "AWS::S3::Object"
                }
            ],
            "ReadWriteType": "ReadOnly"
        },
        {
            "IncludeManagementEvents": false,
            "DataResources": [
                {
                    "Values": [
                        "arn:aws:s3:::test-20161130/"
                    ],
                    "Type": "AWS::S3::Object"
                }
            ],
            "ReadWriteType": "WriteOnly"
        }
    ],
    "TrailARN": "arn:aws:cloudtrail:ap-northeast-1:123456789012:trail/test-event-selector"
}

この場合、trailログにはReadOnlyイベントだけが記録されます

個別のS3オブジェクトを指定した設定が優先されるわけではありません。また、全S3バケットに対する設定と、個別のS3オブジェクトを指定した設定の両方が有効になるわけでもありません。

結論

全S3バケットでのデータイベントを記録する設定をすることで、個別のS3オブジェクトに対する既存の設定を、意図せず無効にしてしまわないように注意してください。

あるtrailにすでにイベントセレクタが存在する場合は、設定内容と設定時の意図を把握した上で、全体設定を追加しましょう。

それでは、また。