CloudTrailのデータイベントログ(S3)の形式を実際のログを見ながら確認してみた

2022.05.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

アノテーション テクニカルサポートの小川です。

このブログは、以下ブログのCloudTrailデータイベントログバージョンです。

気になったので、CloudTrailのデータイベントログ(S3)の中身がどのようなものか確認してみました。

上記記事と同一のリクエストの際に取得したログとなりますので、PutObjectの成功時とエラー時のログを確認しています。
本ブログと上記ブログのログを比較することで、S3サーバーアクセスログとCloudTrailデータイベントログで記録されるログについて、大体の違いが分かります。気になる方は見比べてみてください。

対象のS3バケットの設定

特定のIPアドレス以外からのアクションを拒否する、以下のバケットポリシーを設定しています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::test-blog-12345/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "xx.xx.xx.xx/32"
                }
            }
        }
    ]
}

CloudTrailデータイベントログ

ログの形式は以下に記載されています。

CloudTrail レコードの内容

また、ログのいくつかの箇所は「xxx」で隠しています。

PutObject

成功時

S3のコンソールから、test.txtというファイルをアップロードしました。
ファイルの内容は「test」という文字列だけです

特定のIPアドレスからのアクセスのため、拒否されていません。
設定をしておけば、S3に加えてCloudWatch Logsにもデータイベントログを出力できます。

{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "xxx:xxx",
        "arn": "arn:aws:sts::xxx:assumed-role/xxx/xxx",
        "accountId": "xxx",
        "accessKeyId": "xxx",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "xxx",
                "arn": "arn:aws:iam::xxx:role/xxx",
                "accountId": "xxx",
                "userName": "xxx"
            },
            "attributes": {
                "creationDate": "2022-05-15T01:57:56Z",
                "mfaAuthenticated": "true"
            }
        }
    },
    "eventTime": "2022-05-15T02:43:58Z",
    "eventSource": "s3.amazonaws.com",
    "eventName": "PutObject",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "xxx",
    "userAgent": "[Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36]",
    "requestParameters": {
        "X-Amz-Date": "20220515T024358Z",
        "bucketName": "test-blog-12345",
        "X-Amz-Algorithm": "AWS4-HMAC-SHA256",
        "x-amz-acl": "bucket-owner-full-control",
        "X-Amz-SignedHeaders": "content-md5;content-type;host;x-amz-acl;x-amz-storage-class",
        "Host": "test-blog-12345.s3.ap-northeast-1.amazonaws.com",
        "X-Amz-Expires": "300",
        "key": "test.txt",
        "x-amz-storage-class": "STANDARD"
    },
    "responseElements": null,
    "additionalEventData": {
        "SignatureVersion": "SigV4",
        "CipherSuite": "ECDHE-RSA-AES128-GCM-SHA256",
        "bytesTransferredIn": 4,
        "AuthenticationMethod": "QueryString",
        "x-amz-id-2": "GZWg3nxxx",
        "bytesTransferredOut": 0
    },
    "requestID": "T7F06Dxxx",
    "eventID": "xxx",
    "readOnly": false,
    "resources": [
        {
            "type": "AWS::S3::Object",
            "ARN": "arn:aws:s3:::test-blog-12345/test.txt"
        },
        {
            "accountId": "xxx",
            "type": "AWS::S3::Bucket",
            "ARN": "arn:aws:s3:::test-blog-12345"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": false,
    "recipientAccountId": "xxx",
    "eventCategory": "Data",
    "tlsDetails": {
        "tlsVersion": "TLSv1.2",
        "cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256",
        "clientProvidedHostHeader": "test-blog-12345.s3.ap-northeast-1.amazonaws.com"
    }
}

S3サーバーアクセスログと比較すると、情報量が多いですね。
ただサーバーアクセスログにあったReferなど、サーバーアクセスログでしか確認できないフィールドもあるようです。

エラー時

CloudShellからAWS CLIを利用し、空のファイルをs3api put-objectでアップロードしました。
特定IPアドレスからのリクエストでないため、アクセスが拒否されています。

{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "xxx:xxx",
        "arn": "arn:aws:sts::xxx:assumed-role/xxx/xxx",
        "accountId": "xxx",
        "accessKeyId": "xxx",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "xxx",
                "arn": "arn:aws:iam::xxx:role/xxx",
                "accountId": "xxx",
                "userName": "xxx"
            },
            "attributes": {
                "creationDate": "2022-05-15T01:57:56Z",
                "mfaAuthenticated": "true"
            }
        }
    },
    "eventTime": "2022-05-15T02:46:31Z",
    "eventSource": "s3.amazonaws.com",
    "eventName": "PutObject",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "xxx",
    "userAgent": "[aws-cli/2.6.3 Python/3.9.11 Linux/4.14.275-207.503.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off command/s3api.put-object]",
    "errorCode": "AccessDenied",
    "errorMessage": "Access Denied",
    "requestParameters": {
        "bucketName": "test-blog-12345",
        "Host": "test-blog-12345.s3.ap-northeast-1.amazonaws.com",
        "key": "test2.txt"
    },
    "responseElements": null,
    "additionalEventData": {
        "SignatureVersion": "SigV4",
        "CipherSuite": "ECDHE-RSA-AES128-GCM-SHA256",
        "bytesTransferredIn": 0,
        "AuthenticationMethod": "AuthHeader",
        "x-amz-id-2": "jfovOJxxx",
        "bytesTransferredOut": 243
    },
    "requestID": "C9VCT7xxx",
    "eventID": "xxx",
    "readOnly": false,
    "resources": [
        {
            "type": "AWS::S3::Object",
            "ARN": "arn:aws:s3:::test-blog-12345/test2.txt"
        },
        {
            "accountId": "xxx",
            "type": "AWS::S3::Bucket",
            "ARN": "arn:aws:s3:::test-blog-12345"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": false,
    "recipientAccountId": "xxx",
    "eventCategory": "Data",
    "tlsDetails": {
        "tlsVersion": "TLSv1.2",
        "cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256",
        "clientProvidedHostHeader": "test-blog-12345.s3.ap-northeast-1.amazonaws.com"
    }
}

さいごに

どなたかのお役に立てれば幸いです。

参考資料

CloudTrail レコードの内容

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、さまざまな背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。