この記事は公開されてから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データイベントログ
ログの形式は以下に記載されています。
また、ログのいくつかの箇所は「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サイトをご覧ください。