AWS CloudTrail
用户指南 (版本 1.0)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

CloudTrail 的 Amazon S3 存储桶策略

默认情况下,Amazon S3 存储桶和对象都是私有的。仅资源所有者(创建存储桶的 AWS 账户)能够访问存储桶及其包含的对象。资源所有者可以通过编写访问策略来向其他资源和用户授予访问权。

要将日志文件传输到 S3 存储桶,CloudTrail 必须拥有必要的权限,且不得配置为 Requester Pays (申请方付款) 存储桶。您在执行以下操作时,CloudTrail 会自动为存储桶附加所需的权限:

  • 在创建或更新跟踪的过程中通过 CloudTrail 控制台创建 S3 存储桶。

  • 通过 AWS CLI create-subscriptionupdate-subscription 命令创建 S3 存储桶。

CloudTrail 将在策略中添加以下字段:

  • 允许的 SID。

  • 存储桶名称。

  • CloudTrail 的服务委托人名称。

  • 存储日志文件的文件夹名称,其中包括存储桶名称、前缀(如已指定)以及您的 AWS 账户 ID。

以下策略允许 CloudTrail 从支持的区域将日志文件写入存储桶。有关更多信息,请参阅CloudTrail支持的区域

S3 存储桶策略

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSCloudTrailAclCheck20150319", "Effect": "Allow", "Principal": {"Service": "cloudtrail.amazonaws.com.cn"}, "Action": "s3:GetBucketAcl", "Resource": "arn:aws-cn:s3:::myBucketName" }, { "Sid": "AWSCloudTrailWrite20150319", "Effect": "Allow", "Principal": {"Service": "cloudtrail.amazonaws.com.cn"}, "Action": "s3:PutObject", "Resource": "arn:aws-cn:s3:::myBucketName/[optional prefix]/AWSLogs/myAccountID/*", "Condition": {"StringEquals": {"s3:x-amz-acl": "bucket-owner-full-control"}} } ] }

注意

如果您在 中国(北京)区域 中创建策略,请使用服务委托人名称:"cloudtrail.amazonaws.com.cn"

指定现有存储桶,用于 CloudTrail 日志传输

如果您指定某个现有 S3 存储桶作为日志文件传输的存储位置,则必须为该存储桶附加一个允许 CloudTrail 写入的策略。

注意

最佳做法是为 CloudTrail 日志使用专用的 S3 存储桶。

将所需的 CloudTrail 策略添加到 Amazon S3 存储桶

  1. 通过以下网址打开 Amazon S3 控制台:https://console.amazonaws.cn/s3/

  2. 选择希望 CloudTrail 将日志文件传输到的存储桶,然后选择 Properties (属性)

  3. 选择 Permissions

  4. 选择 Edit Bucket Policy

  5. S3 存储桶策略 复制到 Bucket Policy Editor 窗口。用您的存储桶名称、前缀和账号替换斜体占位符。如果您在创建跟踪时指定了前缀,请在此处包含该前缀。前缀是 S3 对象键的可选附加内容,可在存储桶中创建类似于文件夹的组织结构。

    注意

    如果现有存储桶已附加一个或多个策略,请将 CloudTrail 访问的语句添加到这些策略。评估生成的权限集,确保它们适合于访问存储桶的用户。

接收其他账户的日志文件

您可以将 CloudTrail 配置为从多个 AWS 账户向单个 S3 存储桶传输日志文件。有关更多信息,请参阅从多个账户中接收 CloudTrail 日志文件

对 S3 存储桶策略进行问题排查

以下部分说明如何对 S3 存储桶策略进行问题排查。

S3 策略配置常见错误

当您在创建或更新跟踪的过程中新建存储桶时,CloudTrail 会为您的存储桶附加必要的权限。存储桶策略使用名为 "cloudtrail.amazonaws.com.cn" 的服务委托方,它允许 CloudTrail 将日志传输到所有区域。

如果 CloudTrail 不能将日志传输到某一区域,可能是您的存储桶使用较旧的策略,针对每个区域指定 CloudTrail 账户 ID。这样的策略只允许 CloudTrail 将日志传输到指定区域。

以下存储桶策略只允许 CloudTrail 将日志传输到指定的九个区域:

例 具有账户 ID 的存储桶策略

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSCloudTrailAclCheck20131101", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::903692715234:root", "arn:aws:iam::035351147821:root", "arn:aws:iam::859597730677:root", "arn:aws:iam::814480443879:root", "arn:aws:iam::216624486486:root", "arn:aws:iam::086441151436:root", "arn:aws:iam::388731089494:root", "arn:aws:iam::284668455005:root", "arn:aws:iam::113285607260:root" ]}, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::bucket-1" }, { "Sid": "AWSCloudTrailWrite20131101", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::903692715234:root", "arn:aws:iam::035351147821:root", "arn:aws:iam::859597730677:root", "arn:aws:iam::814480443879:root", "arn:aws:iam::216624486486:root", "arn:aws:iam::086441151436:root", "arn:aws:iam::388731089494:root", "arn:aws:iam::284668455005:root", "arn:aws:iam::113285607260:root" ]}, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::bucket-1/my-prefix/AWSLogs/123456789012/*", "Condition": {"StringEquals": {"s3:x-amz-acl": "bucket-owner-full-control"}} } ] }

此策略根据单个 CloudTrail 账户 ID 来使用权限。要向新区域发送通知,您必须手动更新策略,以包含该区域的 CloudTrail 账户 ID。例如,由于 CloudTrail 新增了对 美国东部(俄亥俄)区域 的支持,您必须更新策略,以包括该区域的账户 ID ARN:"arn:aws:iam::475085895292:root"。

更新策略,以使用 CloudTrail 服务委托方的权限,这是最佳做法。为此,请用服务委托方的名称 ("cloudtrail.amazonaws.com.cn") 替换账户 ID ARN。这样 CloudTrail 就拥有了将日志传输到当前区域和新区域的权限。以下是前一策略的更新版本:

例 具有服务委托方名称的存储桶策略

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSCloudTrailAclCheck20150319", "Effect": "Allow", "Principal": {"Service": "cloudtrail.amazonaws.com.cn"}, "Action": "s3:GetBucketAcl", "Resource": "arn:aws-cn:s3:::bucket-1" }, { "Sid": "AWSCloudTrailWrite20150319", "Effect": "Allow", "Principal": {"Service": "cloudtrail.amazonaws.com.cn"}, "Action": "s3:PutObject", "Resource": "arn:aws-cn:s3:::bucket-1/my-prefix/AWSLogs/123456789012/*", "Condition": {"StringEquals": {"s3:x-amz-acl": "bucket-owner-full-control"}} } ] }

更改现有存储桶的前缀

如果您尝试添加、修改或删除从跟踪接收日志的 S3 存储桶的日志文件前缀,可能会看到以下错误消息:There is a problem with the bucket policy。存储桶策略包含错误的前缀会阻碍跟踪向存储桶传送日志。要解决此问题,请使用 Amazon S3 控制台更新存储桶策略中的前缀,然后使用 CloudTrail 控制台为跟踪中的存储桶指定相同的前缀。

更新 S3 存储桶的日志文件前缀

  1. 通过以下网址打开 Amazon S3 控制台:https://console.amazonaws.cn/s3/

  2. 选择要修改其前缀的存储桶,然后选择 Properties

  3. 选择 Permissions

  4. 选择 Edit Bucket Policy

  5. 在存储桶策略中,在 s3:PutObject 操作下编辑 Resource 条目,根据需要添加、修改或删除日志文件前缀

    "Action": "s3:PutObject", "Resource": "arn:aws-cn:s3:::myBucketName/prefix/AWSLogs/myAccountID/*",
  6. 选择 Save

  7. https://console.amazonaws.cn/cloudtrail/ 打开 CloudTrail 控制台。

  8. 选择跟踪,并在 Storage location 中点击铅笔图标来编辑存储桶的设置。

  9. 对于 S3 bucket,选择要更改前缀的存储桶。

  10. 对于 Log file prefix,更新前缀,使其与您在存储桶策略中输入的前缀相符。

  11. 选择 Save

其他资源

有关 S3 存储桶和策略的更多信息,请参阅 Amazon Simple Storage Service 开发人员指南