

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

# 适用于 Amazon S3 存储桶政策 CloudTrail
<a name="create-s3-bucket-policy-for-cloudtrail"></a>

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

要创建或修改 Amazon S3 存储桶以接收企业跟踪记录的日志文件，您必须修改存储桶策略。有关更多信息，请参阅 [使用以下方法为组织创建跟踪 AWS CLI](cloudtrail-create-and-update-an-organizational-trail-by-using-the-aws-cli.md)。

要将日志文件传送到 S3 存储桶， CloudTrail 必须具有所需的权限，并且不能将其配置为[申请方付款](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RequesterPaysBuckets.html)存储桶。

CloudTrail 为您在策略中添加以下字段：
+ 允许的 SIDs
+ 存储桶名称
+ 的服务主体名称 CloudTrail
+ 存储日志文件的文件夹的名称，包括存储桶名称、前缀（如果您已指定）和您的 AWS 账户 ID

作为安全最佳实践，请将 `aws:SourceArn` 条件密钥添加到 Amazon S3 存储桶策略。IAM 全局条件密钥`aws:SourceArn`有助于确保仅针对一个或多个特定的跟踪 CloudTrail 写入 S3 存储桶。的值始终`aws:SourceArn`是使用存储桶存储日志的跟踪（或跟踪数组 ARNs）的 ARN。确保将 `aws:SourceArn` 条件密钥添加到现有跟踪记录的 S3 存储桶策略。

**注意**  
如果您错误配置了跟踪（例如，无法访问 S3 存储桶），则 CloudTrail 会尝试将日志文件重新传送到您的 S3 存储桶，持续 30 天，这些 attempted-to-deliver事件将按标准费用收费。 CloudTrail 为避免配置错误的跟踪产生费用，您需要删除跟踪。

以下策略 CloudTrail 允许将日志文件写入支持的存储桶 AWS 区域。将*amzn-s3-demo-bucket*、*[optionalPrefix]/*、*myAccountID**region*、和*trailName*，替换为适合您的配置的值。

**S3 存储桶策略**

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AWSCloudTrailAclCheck20150319",
            "Effect": "Allow",
            "Principal": {"Service": "cloudtrail.amazonaws.com"},
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": "arn:aws:cloudtrail:region:myAccountID:trail/trailName"
                }
            }
        },
        {
            "Sid": "AWSCloudTrailWrite20150319",
            "Effect": "Allow",
            "Principal": {"Service": "cloudtrail.amazonaws.com"},
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/[optionalPrefix]/AWSLogs/myAccountID/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control",
                    "aws:SourceArn": "arn:aws:cloudtrail:region:myAccountID:trail/trailName"
                }
            }
        }
    ]
}
```

------

有关的更多信息 AWS 区域，请参阅[CloudTrail 支持的区域](cloudtrail-supported-regions.md)。

**Contents**
+ [

## 指定用于 CloudTrail 日志传输的现有存储桶
](#specify-an-existing-bucket-for-cloudtrail-log-delivery)
+ [

## 从其他账户接收日志文件
](#aggregration-option)
+ [

## 创建或更新 Amazon S3 存储桶以用于存储组织跟踪的日志文件
](#org-trail-bucket-policy)
+ [

## Amazon S3 存储桶策略问题排查
](#troubleshooting-s3-bucket-policy)
  + [

### Amazon S3 策略配置常见错误
](#s3-bucket-policy-for-multiple-regions)
  + [

### 更改现有存储桶的前缀
](#cloudtrail-add-change-or-remove-a-bucket-prefix)
+ [

## 其他资源
](#cloudtrail-S3-bucket-policy-resources)

## 指定用于 CloudTrail 日志传输的现有存储桶
<a name="specify-an-existing-bucket-for-cloudtrail-log-delivery"></a>

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

**注意**  
最佳做法是使用专用 S3 存储桶存储 CloudTrail 日志。

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

1. 打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 选择要将日志文件传送 CloudTrail 到的存储桶，然后选择**权限**。

1. 选择**编辑**。

1. 将 [S3 bucket policy](#s3-bucket-policy) 复制到 **Bucket Policy Editor** 窗口。用您的存储桶名称、前缀和账号替换斜体占位符。如果您在创建跟踪时指定了前缀，请在此处包含该前缀。前缀是 S3 对象键的可选附加内容，可在存储桶中创建类似于文件夹的组织结构。
**注意**  
如果现有存储桶已附加了一个或多个策略，请添加用于 CloudTrail 访问该策略的声明。评估生成的权限集，确保它们适合于访问存储桶的用户。

## 从其他账户接收日志文件
<a name="aggregration-option"></a>

您可以配置 CloudTrail 为将来自多个 AWS 账户的日志文件传送到单个 S3 存储桶。有关更多信息，请参阅 [接收来自多个账户的 CloudTrail 日志文件为其他账户调 IDs 用的数据事件编辑存储桶所有者账户](cloudtrail-receive-logs-from-multiple-accounts.md)。

## 创建或更新 Amazon S3 存储桶以用于存储组织跟踪的日志文件
<a name="org-trail-bucket-policy"></a>

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

以下是名为的 Amazon S3 存储桶的策略示例*amzn-s3-demo-bucket*，该存储桶归该组织的管理账户所有。将*amzn-s3-demo-bucket*、*region*、*managementAccountID**trailName*、和*o-organizationID*替换为贵组织的值

此存储桶策略包含三条语句。
+ 第一条语句允许 CloudTrail 对亚马逊 S3 存储桶调用 Amazon S3 `GetBucketAcl` 操作。
+ 第二条语句支持在跟踪仅从组织跟踪更改为该账户的跟踪时进行日志记录。
+ 第三条语句支持对组织跟踪进行日志记录。

示例策略包括 Amazon S3 存储桶策略的 `aws:SourceArn` 条件密钥。IAM 全局条件密钥`aws:SourceArn`有助于确保仅针对一个或多个特定的跟踪 CloudTrail 写入 S3 存储桶。在企业跟踪记录中，`aws:SourceArn` 的值必须是由管理账户拥有并使用管理账户 ID 的跟踪记录 ARN。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AWSCloudTrailAclCheck20150319",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "cloudtrail.amazonaws.com"
                ]
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": "arn:aws:cloudtrail:region:managementAccountID:trail/trailName"
                }
            }
        },
        {
            "Sid": "AWSCloudTrailWrite20150319",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "cloudtrail.amazonaws.com"
                ]
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/AWSLogs/managementAccountID/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control",
                    "aws:SourceArn": "arn:aws:cloudtrail:region:managementAccountID:trail/trailName"
                }
            }
        },
        {
            "Sid": "AWSCloudTrailOrganizationWrite20150319",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "cloudtrail.amazonaws.com"
                ]
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/AWSLogs/o-organizationID/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control",
                    "aws:SourceArn": "arn:aws:cloudtrail:region:managementAccountID:trail/trailName"
                }
            }
        }
    ]
}
```

------

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

## Amazon S3 存储桶策略问题排查
<a name="troubleshooting-s3-bucket-policy"></a>

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

**注意**  
如果您错误配置了跟踪（例如，无法访问 S3 存储桶），则 CloudTrail 会尝试将日志文件重新传送到您的 S3 存储桶，持续 30 天，这些 attempted-to-deliver事件将按标准费用收费。 CloudTrail 为避免配置错误的跟踪产生费用，您需要删除跟踪。

### Amazon S3 策略配置常见错误
<a name="s3-bucket-policy-for-multiple-regions"></a>

当您在创建或更新跟踪的过程中新建存储桶时， CloudTrail 会为您的存储桶附加必要的权限。存储桶策略使用服务主体名称`"cloudtrail.amazonaws.com"`，该名称允许 CloudTrail 为所有区域传送日志。

如果没有 CloudTrail 为某个区域传送日志，则您的存储桶可能有 IDs 为每个区域指定 CloudTrail 账户的较旧策略。此策略仅 CloudTrail允许传输指定区域的日志。

作为最佳实践，请更新策略以使用 CloudTrail 服务主体的权限。为此，请将账户 ID ARNs 替换为服务主体名称：`"cloudtrail.amazonaws.com"`。这 CloudTrail 允许为当前和新区域传送日志。作为安全最佳实践，请将 `aws:SourceArn` 或 `aws:SourceAccount` 条件密钥添加到 Amazon S3 存储桶策略。这有助于防止未经授权的账户访问您的 S3 存储桶。如果您有现有跟踪记录，请务必添加一个或多个条件密钥。以下示例展示了建议的策略配置。将*amzn-s3-demo-bucket*、*[optionalPrefix]/*、*myAccountID**region*、和*trailName*，替换为适合您的配置的值。

**Example 具有服务主体名称的存储桶策略示例**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AWSCloudTrailAclCheck20150319",
            "Effect": "Allow",
            "Principal": {"Service": "cloudtrail.amazonaws.com"},
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": "arn:aws:cloudtrail:region:myAccountID:trail/trailName"
                }
            }
        },
        {
            "Sid": "AWSCloudTrailWrite20150319",
            "Effect": "Allow",
            "Principal": {"Service": "cloudtrail.amazonaws.com"},
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/[optionalPrefix]/AWSLogs/myAccountID/*",
            "Condition": {"StringEquals": {
                "s3:x-amz-acl": "bucket-owner-full-control",
                "aws:SourceArn": "arn:aws:cloudtrail:region:myAccountID:trail/trailName"
                }
            }
        }
    ]
}
```

### 更改现有存储桶的前缀
<a name="cloudtrail-add-change-or-remove-a-bucket-prefix"></a>

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

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

1. 打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 选择要修改其前缀的存储桶，然后选择 **Permissions**（权限）。

1. 选择**编辑**。

1. 在存储桶策略的`s3:PutObject`操作下，编辑`Resource`条目以根据需要添加、修改或删除日志文件*prefix/*。

   ```
   "Action": "s3:PutObject",
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/myAccountID/*",
   ```

1. 选择**保存**。

1. 打开 CloudTrail 控制台，网址为[https://console.aws.amazon.com/cloudtrail/](https://console.aws.amazon.com/cloudtrail/)。

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

1. 对于 **S3 bucket**，选择要更改前缀的存储桶。

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

1. 选择**保存**。

## 其他资源
<a name="cloudtrail-S3-bucket-policy-resources"></a>

有关 S3 存储桶和策略的更多信息，请参阅《Amazon Simple Storage Service 用户指南》中的[使用存储桶策略](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)。