

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

# 接收来自多个账户的 CloudTrail 日志文件
<a name="cloudtrail-receive-logs-from-multiple-accounts"></a>

您可以 AWS 账户 将多个日志文件 CloudTrail 传输到单个 Amazon S3 存储桶中。例如，您有四个 AWS 账户 账户为 IDs 111111111111、222222222222、33333333333333和4444444444444，并且您要配置为将所有四个账户中的日志文件传输到属于账户 11111111111111 的存储桶。 CloudTrail 要完成此操作，请依次完成以下步骤：

1. 在目标存储桶所属的账户（此示例中为 111111111111）中创建跟踪。不要为任何其他账户创建跟踪。

   有关说明，请参阅[使用控制台创建跟踪](cloudtrail-create-a-trail-using-the-console-first-time.md#creating-a-trail-in-the-console)。

1. 更新目标存储桶的存储桶策略，以便向 CloudTrail 授予跨账户权限。

   有关说明，请参阅[设置适用于多个账户的存储桶策略](cloudtrail-set-bucket-policy-for-multiple-accounts.md)。

1. 在要为其记录活动的其他账户（此示例中为 222222222222、333333333333 和 444444444444）中创建跟踪。在每个账户中创建跟踪时，指定属于您在步骤 1 中指定的账户（此示例中为 111111111111）的 Amazon S3 存储桶。有关说明，请参阅[在其他账户中创建跟踪](turn-on-cloudtrail-in-additional-accounts.md)。
**注意**  
如果您选择启用 SSE-KMS 加密，KMS 密钥策略必须 CloudTrail 允许使用该密钥加密您的日志文件和摘要文件，并允许您指定的用户读取未加密形式的日志文件或摘要文件。有关手动编辑密钥政策的信息，请参阅[为以下各项配置 AWS KMS 密钥策略 CloudTrail](create-kms-key-policy-for-cloudtrail.md)。

## 为其他账户调 IDs 用的数据事件编辑存储桶所有者账户
<a name="cloudtrail-receive-logs-s3-owner-id-redaction"></a>

过去，如果在 Amazon S3 CloudTrail 数据事件 API 调用者中启用了数据事件，则会在数据事件中 CloudTrail 显示 S3 存储桶拥有者的账户 ID（例如`PutObject`）。 AWS 账户 即使存储桶拥有者账户没有启用 S3 数据事件，也会出现这种情况。

现在，如果满足以下两个条件，则 CloudTrail 删除`resources`区块中 S3 存储桶所有者的账户 ID：
+ 数据事件 API 调用来自不同 AWS 账户 于 Amazon S3 存储桶拥有者的人。
+ API 调用程序收到了一个仅适用于该调用程序账户的 `AccessDenied` 错误。

在其上面进行 API 调用的资源的拥有者仍收到完整的事件。

以下事件记录片段是一个预期行为的示例。在 `Historic` 片段中，将向不同账户中的 API 调用程序显示 S3 存储桶拥有者的账户 ID 123456789012。在当前行为示例中，不会显示存储桶拥有者的账户 ID。

```
# Historic

"resources": [
    {
        "type": "AWS::S3::Object",
        "ARNPrefix": "arn:aws:s3:::amzn-s3-demo-bucket2/"
    },
    {
        "accountId": "123456789012",
        "type": "AWS::S3::Bucket",
        "ARN": "arn:aws:s3:::amzn-s3-demo-bucket2"
    }
]
```

以下是当前的行为。

```
# Current

"resources": [
    {
        "type": "AWS::S3::Object",
        "ARNPrefix": "arn:aws:s3:::amzn-s3-demo-bucket2/"
    },
    {
        "accountId": "",
        "type": "AWS::S3::Bucket",
        "ARN": "arn:aws:s3:::amzn-s3-demo-bucket2"
    }
]
```

**Topics**
+ [为其他账户调 IDs 用的数据事件编辑存储桶所有者账户](#cloudtrail-receive-logs-s3-owner-id-redaction)
+ [设置适用于多个账户的存储桶策略](cloudtrail-set-bucket-policy-for-multiple-accounts.md)
+ [在其他账户中创建跟踪](turn-on-cloudtrail-in-additional-accounts.md)

# 设置适用于多个账户的存储桶策略
<a name="cloudtrail-set-bucket-policy-for-multiple-accounts"></a>

对于要从多个账户接收日志文件的存储桶，其存储桶策略必须向 CloudTrail 授予从您指定的所有账户写入日志文件的权限。这意味着您必须修改目标存储桶的存储桶策略，以授予从每个指定账户写入日志文件的 CloudTrail 权限。

**注意**  
出于安全原因，未经授权的用户无法创建包含 `AWSLogs/` 作为 `S3KeyPrefix` 参数的跟踪记录。

**修改存储桶权限，以便可以从多个账户接收这些文件**

1.  AWS 管理控制台 使用拥有存储桶的账户（在本示例中为 111111111111）登录，然后打开 Amazon S3 控制台。

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

1. 在 **Bucket policy**（存储桶策略）下，选择 **Edit**（编辑）。

1. 修改现有策略以便为要将其日志文件传输到此存储桶的每个额外账户添加一个行。参阅以下示例策略并记下指定另一个账户 ID 的带下划线的 `Resource` 行。作为安全最佳实践，请将 `aws:SourceArn` 条件密钥添加到 Amazon S3 存储桶策略。这有助于防止未经授权访问您的 S3 存储桶。如果您有现有跟踪记录，请务必添加一个或多个条件密钥。
**注意**  
 AWS 账户 ID 是一个十二位数字，包括前导零。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AWSCloudTrailAclCheck20131101",
               "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:111111111111:trail/primaryTrailName",
                           "arn:aws:cloudtrail:region:222222222222:trail/secondaryTrailName"
                       ]
                   }
               }
           },
           {
               "Sid": "AWSCloudTrailWrite20131101",
               "Effect": "Allow",
               "Principal": {
                   "Service": "cloudtrail.amazonaws.com"
               },
               "Action": "s3:PutObject",
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket/optionalLogFilePrefix/AWSLogs/111111111111/*",
                   "arn:aws:s3:::amzn-s3-demo-bucket/optionalLogFilePrefix/AWSLogs/222222222222/*"
               ],
               "Condition": {
                   "StringEquals": {
                       "aws:SourceArn": [
                           "arn:aws:cloudtrail:region:111111111111:trail/primaryTrailName",
                           "arn:aws:cloudtrail:region:222222222222:trail/secondaryTrailName"
                       ],
                       "s3:x-amz-acl": "bucket-owner-full-control"
                   }
               }
           }
       ]
   }
   ```

------

# 在其他账户中创建跟踪
<a name="turn-on-cloudtrail-in-additional-accounts"></a>

您可以使用控制台或创建其他跟踪 AWS 账户 并将其日志文件聚合 AWS CLI 到一个 Amazon S3 存储桶中。或者，您可以创建组织跟踪以记录 AWS 账户 属于组织的所有成员 AWS Organizations。有关更多信息，请参阅 [为组织创建跟踪](creating-trail-organization.md)。

## 使用控制台在其他 AWS 账户中创建跟踪
<a name="turn-on-cloudtrail-in-additional-accounts-console"></a>

您可以使用 CloudTrail 控制台在其他账户中创建跟踪。

1.  AWS 管理控制台 使用您要为其创建跟踪的账户登录。按照 [使用控制台创建跟踪](cloudtrail-create-a-trail-using-the-console-first-time.md#creating-a-trail-in-the-console) 中的步骤，使用控制台创建跟踪。

1. 对于 **Storage location**（存储位置），选择 **Use existing S3 bucket**（使用现有 S3 存储桶）。使用文本框输入您用于跨账户存储日志文件的存储桶的名称。
**注意**  
存储桶策略必须授予对其进行写入的 CloudTrail 权限。有关手动编辑存储桶策略的信息，请参阅[设置适用于多个账户的存储桶策略](cloudtrail-set-bucket-policy-for-multiple-accounts.md)。  
![\[使用现有的 S3 存储桶\]](http://docs.aws.amazon.com/zh_cn/awscloudtrail/latest/userguide/images/cloudtrail-use-existing-bucket.png)

1. 在**前缀**中，输入您用于跨账户存储日志文件的前缀。如果您选择使用与您在存储桶策略中指定的前缀不同的前缀，则必须编辑目标存储桶的存储桶策略， CloudTrail 以允许使用此新前缀将日志文件写入存储桶。

## 使用 CLI 在其他 AWS 账户中创建跟踪
<a name="turn-on-cloudtrail-in-additional-accounts-cli"></a>

您可以使用 AWS 命令行工具在其他账户中创建跟踪，并将其日志文件聚合到一个 Amazon S3 存储桶中。有关这些工具的更多信息，请参阅《*AWS CLI 命令参考*》中的 [cloudtrail](https://docs.aws.amazon.com/cli/latest/reference/cloudtrail/)。

使用 **create-trail** 命令创建跟踪，并指定以下内容：
+ `--name` 指定跟踪的名称。
+ `--s3-bucket-name` 指定您用于跨账户存储日志文件的 Amazon S3 存储桶。
+ `--s3-prefix` 指定日志文件传输路径的前缀（可选）。
+ `--is-multi-region-trail`指定此跟踪将记录您所在分区中所有 AWS 区域的事件。

您可以为账户运行 AWS 资源的每个区域创建一个跟踪。

以下示例命令说明如何使用 AWS CLI为您的附加账户创建跟踪。要将这些账户的日志文件传送到您在第一个账户（此示例中为 111111111111）中创建的存储桶，请在 `--s3-bucket-name` 选项中指定存储桶名称。Amazon S3 存储桶名称具有全局唯一性。

```
aws cloudtrail create-trail --name my-trail --s3-bucket-name amzn-s3-demo-bucket --is-multi-region-trail
```

当您运行该命令时，将显示与以下内容类似的输出：

```
{
    "IncludeGlobalServiceEvents": true, 
    "Name": "AWSCloudTrailExample", 
    "TrailARN": "arn:aws:cloudtrail:us-east-2:222222222222:trail/my-trail", 
    "LogFileValidationEnabled": false, 
    "IsMultiRegionTrail": true, 
    "IsOrganizationTrail": false,
    "S3BucketName": "amzn-s3-demo-bucket"
}
```

有关使用 AWS 命令行工具 CloudTrail 的更多信息，请参阅[CloudTrail 命令行参考](https://docs.aws.amazon.com/cli/latest/reference/cloudtrail/index.html)。