适用于 CloudTrail 的 Amazon S3 存储桶策略 - AWS CloudTrail
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

适用于 CloudTrail 的 Amazon S3 存储桶策略

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

如果您要创建或修改 Amazon S3 存储桶以接收组织跟踪的日志文件,您必须进一步修改存储桶策略。有关更多信息,请参阅使用 AWS 命令行界面为组织创建跟踪

要将日志文件传输到 S3 存储桶,CloudTrail 必须具有所需的权限,且不得配置为申请方付款存储桶。在 CloudTrail 控制台中创建或更新跟踪的过程中创建 Amazon S3 存储桶时,CloudTrail 会自动将所需权限附加到存储桶。

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

  • 允许的 SID。

  • 存储桶名称。

  • CloudTrail 的服务委托人名称。

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

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

S3 存储桶策略

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSCloudTrailAclCheck20150319", "Effect": "Allow", "Principal": {"Service": "cloudtrail.amazonaws.com"}, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::myBucketName" }, { "Sid": "AWSCloudTrailWrite20150319", "Effect": "Allow", "Principal": {"Service": "cloudtrail.amazonaws.com"}, "Action": "s3:PutObject", "Resource": "arn:aws: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.aws.amazon.com/s3/

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

  3. 选择 Permissions

  4. 选择 Edit Bucket Policy

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

    注意

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

接收其他账户的日志文件

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

创建或更新 Amazon S3 存储桶以用于存储组织跟踪的日志文件

您必须指定 Amazon S3 存储桶以接收组织跟踪的日志文件。此存储桶必须具有允许 CloudTrail 将组织的日志文件放入存储桶的策略。

以下是名为的 Amazon S3 存储桶的示例策略我的组织存储桶。此存储桶位于 AWS 账户中,ID 为1111111111,该帐户是具有 ID 的组织的管理帐户o-示例允许组织跟踪的日志记录。它还允许对1111111111帐户,以防止跟踪从组织跟踪更改为该账户的跟踪。

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

此示例策略不允许来自成员账户的任何用户访问为组织创建的日志文件。默认情况下,组织日志文件只能由管理账户访问。有关如何允许成员账户中的 IAM 用户对 Amazon S3 存储桶进行读取访问的信息,请参阅在 AWS 账户之间共享 CloudTrail 日志文件

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

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

S3 策略配置常见错误

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

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

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

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

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

更改现有存储桶的前缀

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

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

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

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

  3. 选择 Permissions

  4. 选择 Edit Bucket Policy

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

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

  7. 通过打开 CloudTrail 控制台https://console.aws.amazon.com/cloudtrail/

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

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

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

  11. 选择 Save

其他资源

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