Amazon Simple Storage Service
开发人员指南 (API Version 2006-03-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

使用 AWS CloudTrail 记录 Amazon S3 API 调用

Amazon S3 与 CloudTrail 集成在一起,后者是一种服务,可以捕获从您的 AWS 账户向 Amazon S3 做出的特定的 API 调用,并将日志文件传输到您指定的 Amazon S3 存储桶。CloudTrail 捕获从 Amazon S3 控制台或从 Amazon S3 API 发出的 API 调用。

通过使用 CloudTrail 收集的信息,您可以确定向 Amazon S3 发出了什么请求、发出请求的源 IP 地址、何人发出的请求以及发出请求的时间等。这些信息能够帮助您追踪 AWS 资源的变更情况,帮助您排查操作问题。CloudTrail 便于您确保与内部策略和监管标准的合规性。要了解有关 CloudTrail 的更多信息,包括如何对其进行配置和启用,请参阅 AWS CloudTrail User Guide

CloudTrail 中的 Amazon S3 信息

在您的 AWS 账户中启用 CloudTrail 日志记录后,将在 CloudTrail 日志文件中跟踪对特定 Amazon S3 操作执行的 API 调用。

CloudTrail 日志记录跟踪的 Amazon S3 存储桶级操作

默认情况下,CloudTrail 将记录存储桶级操作。Amazon S3 记录与其他 AWS 服务记录一起写入日志文件。CloudTrail 基于时间段和文件大小来确定何时创建新文件并向其写入内容。

本节中的表格列出了可用于 CloudTrail 日志记录的 Amazon S3 存储桶级操作。

CloudTrail 日志记录跟踪的 Amazon S3 存储桶级操作

REST API 名称 在 CloudTrail 日志中使用的 API 事件名称

DELETE Bucket

DeleteBucket

DELETE Bucket cors

DeleteBucketCors

DELETE Bucket lifecycle

DeleteBucketLifecycle

DELETE Bucket policy

DeleteBucketPolicy

DELETE Bucket 复制

DeleteBucketReplication

DELETE 存储桶标记

DeleteBucketTagging

DELETE Bucket website

DeleteBucketWebsite

GET Bucket acl

GetBucketAcl

GET Bucket cors

GetBucketCors

GET Bucket lifecycle

GetBucketLifecycle

GET Bucket policy

GetBucketPolicy

GET Bucket location

GetBucketLocation

GET Bucket logging

GetBucketLogging

GET Bucket notification

GetBucketNotification

GET Bucket 复制

GetBucketReplication

GET Bucket 标记

GetBucketTagging

GET Bucket requestPayment

GetBucketRequestPay

GET Bucket versioning

GetBucketVersioning

GET Bucket website

GetBucketWebsite

GET 服务 (列出所有存储桶)

ListBuckets

PUT Bucket

CreateBucket

PUT Bucket acl

PutBucketAcl

PUT Bucket cors

PutBucketCors

PUT Bucket lifecycle

PutBucketLifecycle

PUT 存储桶策略

PutBucketPolicy

PUT Bucket logging

PutBucketLogging

PUT Bucket notification

PutBucketNotification

PUT Bucket 复制

PutBucketReplication

PUT Bucket requestPayment

PutBucketRequestPay

PUT Bucket 标记

PutBucketTagging

PUT Bucket versioning

PutBucketVersioning

PUT Bucket website

PutBucketWebsite

除了这些 API 操作之外,您还可以使用 OPTIONS object 对象级操作,该操作在 CloudTrail 日志记录中被视为存储桶级操作,因为它会检查存储桶的 cors 配置。

CloudTrail 日志记录跟踪的 Amazon S3 对象级操作

您也可以获取对象级 Amazon S3 操作的 CloudTrail 日志。要执行此操作,请指定跟踪的 Amazon S3 对象。当对象级操作在您的账户中发生时,CloudTrail 将评估您的跟踪设置。如果事件与您在跟踪中指定的对象相匹配,则记录该事件。有关更多信息,请参阅 AWS CloudTrail User Guide 中的数据事件。下表列出了 CloudTrail 可以记录的对象级操作:

REST API 名称 在 CloudTrail 日志中使用的 API 事件名称

DeleteObject

DeleteObject

GetObject

GetObject

GetObjectACL

GetObjectAcl

GetObjectTorrent

GetObjectTorrent

HeadObject

HeadObject

PostObject

PostObject

PostObjectRestore

RestoreObject

PutObject

PutObject

PutObjectACL

PutObjectAcl

PutObjectCopy

CopyObject

InitiateMultipartUpload

CreateMultipartUpload

UploadPart

UploadPart

UploadPart - Copy

UploadPartCopy

CompleteMultipartUpload

CompleteMultipartUpload

AbortMultipartUpload

AbortMultipartUpload

ListParts

ListParts

除了这些操作之外,在特定情况下,您还可以使用以下存储桶级操作获取 CloudTrail 日志作为对象级 Amazon S3 操作:

跨账户情形中的对象级操作

下面是涉及跨账户情形中的对象级 API 调用的特殊使用案例以及报告 CloudTrail 日志的方法。CloudTrail 始终会将日志提供给请求者 (进行 API 调用的人)。在设置跨账户访问时,请考虑本节中的示例。

注意

这些示例假定 CloudTrail 日志已适当配置。

示例 1:CloudTrail 将访问日志提供给存储桶拥有者

仅当存储桶拥有者具有对同一对象 API 的权限时,CloudTrail 才会将访问日志提供给存储桶拥有者。请考虑以下跨账户情形:

  • 账户 A 拥有一个存储桶。

  • 账户 B (请求者) 尝试访问该存储桶中的对象。

CloudTrail 始终将对象级 API 访问日志提供给请求者。此外,仅当存储桶拥有者具有对该对象执行同一 API 操作的权限时,CloudTrail 才会将相同的日志提供给存储桶拥有者。

注意

如果存储桶拥有者也是对象拥有者,存储桶拥有者将获得对象访问日志。否则,存储桶拥有者必须通过对象 ACL 获取权限,以便让相同的对象 API 获取相同的对象访问 API 日志。

示例 2:CloudTrail 没有使设置对象 ACL 时使用的电子邮件地址激增

请考虑以下跨账户情形:

  • 账户 A 拥有一个存储桶。

  • 账户 B (请求者) 使用电子邮件地址发送了一个设置对象 ACL 授权的请求。有关 ACL 的信息,请参阅访问控制列表 (ACL) 概述

该请求获取日志以及电子邮件信息。但是,存储桶拥有者 (如果他们像在示例 1 中一样有资格接收日志) 将获取报告该事件的 CloudTrail 日志。但是,存储桶拥有者不会获取 ACL 配置信息,尤其是被授权者电子邮件和授权。日志为存储桶拥有者提供的唯一信息是账户 B 进行了 ACL API 调用。

CloudTrail 对 Amazon S3 SOAP API 调用的跟踪

CloudTrail 跟踪 Amazon S3 SOAP API 调用。Amazon S3HTTP 上的 SOAP 支持已弃用,但是仍可在 HTTPS 上使用。有关 Amazon S3 SOAP 支持的更多信息,请参阅 附录 A:使用 SOAP API

重要

SOAP 不支持较新的 Amazon S3 功能。我们建议您使用 REST API 或 AWS 开发工具包。

CloudTrail 日志记录跟踪的 Amazon S3 SOAP 操作

SOAP API 名称 在 CloudTrail 日志中使用的 API 事件名称

ListAllMyBuckets

ListBuckets

CreateBucket

CreateBucket

DeleteBucket

DeleteBucket

GetBucketAccessControlPolicy

GetBucketAcl

SetBucketAccessControlPolicy

PutBucketAcl

GetBucketLoggingStatus

GetBucketLogging

SetBucketLoggingStatus

PutBucketLogging

每个日志条目都包含有关生成请求的人员的信息。日志中的用户身份信息有助于确定请求是由根或 IAM 用户凭证发出,通过某个角色或联合用户的临时安全凭证发出,还是由其他 AWS 服务发出。有关更多信息,请参阅 CloudTrail 事件参考中的 userIdentity 字段。

日志文件可以在存储桶中存储任意长时间,不过您也可以定义 Amazon S3 生命周期规则以自动存档或删除日志文件。默认情况下,将使用 Amazon S3 服务器端加密 (SSE) 对日志文件进行加密。

您可以选择让 CloudTrail 在新日志文件提供后发布 Amazon SNS 通知 (例如,如果您要在日志文件提供后快速响应它们)。有关更多信息,请参阅 AWS CloudTrail User Guide 中的为 CloudTrail 配置 Amazon Simple Notification Service 通知

您还可以将多个 AWS 区域和多个 AWS 账户中的 Amazon S3 日志文件聚合到单个 Amazon S3 存储桶中。有关更多信息,请参阅 AWS CloudTrail User Guide 中的接收多个区域中的 CloudTrail 日志文件

使用 CloudTrail 日志和 Amazon S3 服务器访问日志及 CloudWatch Logs

您可以将 AWS CloudTrail 日志与 Amazon S3 服务器访问日志搭配使用。CloudTrail 日志为您提供了对 Amazon S3 存储桶级和对象级操作的详细 API 跟踪,而 Amazon S3 服务器访问日志则可让您了解关于您存储在 Amazon S3 中的数据的对象级操作。有关服务器访问日志的更多信息,请参阅 服务器访问日志记录

此外,您还可以将 CloudTrail 日志与用于 Amazon S3 的 CloudWatch 搭配使用。CloudTrail 与 CloudWatch 日志集成在一起,将 CloudTrail 捕获的 S3 存储桶级 API 活动传输到您指定的 CloudWatch 日志组中的 CloudWatch 日志流。您可以创建用于监控特定 API 活动的 CloudWatch 警报,并在此特定 API 活动发生时收到电子邮件通知。有关用于监控特定 API 活动的 CloudWatch 警报的更多信息,请参阅 AWS CloudTrail User Guide。有关将 CloudWatch 与 Amazon S3 配合使用的更多信息,请参阅使用 Amazon CloudWatch 来监控指标

了解 Amazon S3 日志文件条目

CloudTrail 日志文件可包含一个或多个日志条目,每个条目由多个 JSON 格式的事件组成。一个日志条目表示来自任何源的一个请求,包括有关所请求的操作、所有参数以及操作的日期和时间等信息。日志条目不一定具有任何特定顺序。也即,它们不是公用 API 调用的有序堆栈跟踪。

下面的示例显示了一条 CloudTrail 日志条目,它演示了 DELETE 存储桶策略PUT 存储桶 aclGET 存储桶版本控制操作。

Copy
{ "Records": [ { "eventVersion": "1.03", "userIdentity": { "type": "IAMUser", "principalId": "111122223333", "arn": "arn:aws-cn:iam::111122223333:user/myUserName", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "myUserName" }, "eventTime": "2015-08-26T20:46:31Z", "eventSource": "s3.amazonaws.com", "eventName": "DeleteBucketPolicy", "awsRegion": "us-west-2", "sourceIPAddress": "127.0.0.1", "userAgent": "[]", "requestParameters": { "bucketName": "myawsbucket" }, "responseElements": null, "requestID": "47B8E8D397DCE7A6", "eventID": "cdc4b7ed-e171-4cef-975a-ad829d4123e8", "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }, { "eventVersion": "1.03", "userIdentity": { "type": "IAMUser", "principalId": "111122223333", "arn": "arn:aws-cn:iam::111122223333:user/myUserName", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "myUserName" }, "eventTime": "2015-08-26T20:46:31Z", "eventSource": "s3.amazonaws.com", "eventName": "PutBucketAcl", "awsRegion": "us-west-2", "sourceIPAddress": "", "userAgent": "[]", "requestParameters": { "bucketName": "", "AccessControlPolicy": { "AccessControlList": { "Grant": { "Grantee": { "xsi:type": "CanonicalUser", "xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance", "ID": "d25639fbe9c19cd30a4c0f43fbf00e2d3f96400a9aa8dabfbbebe1906Example" }, "Permission": "FULL_CONTROL" } }, "xmlns": "http://s3.amazonaws.com/doc/2006-03-01/", "Owner": { "ID": "d25639fbe9c19cd30a4c0f43fbf00e2d3f96400a9aa8dabfbbebe1906Example" } } }, "responseElements": null, "requestID": "BD8798EACDD16751", "eventID": "607b9532-1423-41c7-b048-ec2641693c47", "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }, { "eventVersion": "1.03", "userIdentity": { "type": "IAMUser", "principalId": "111122223333", "arn": "arn:aws-cn:iam::111122223333:user/myUserName", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "myUserName" }, "eventTime": "2015-08-26T20:46:31Z", "eventSource": "s3.amazonaws.com", "eventName": "GetBucketVersioning", "awsRegion": "us-west-2", "sourceIPAddress": "", "userAgent": "[]", "requestParameters": { "bucketName": "myawsbucket" }, "responseElements": null, "requestID": "07D681279BD94AED", "eventID": "f2b287f3-0df1-4961-a2f4-c4bdfed47657", "eventType": "AwsApiCall", "recipientAccountId": "111122223333" } ] }