CloudTrailのデータイベントログ(S3)の形式を実際のログを見ながら確認してみた
アノテーション テクニカルサポートの小川です。
このブログは、以下ブログの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データイベントログ
ログの形式は以下に記載されています。
また、ログのいくつかの箇所は「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" } }
さいごに
どなたかのお役に立てれば幸いです。
参考資料
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、さまざまな背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。