

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

# 创建用于从外部记录事件 AWS 的集成 AWS CLI
<a name="lake-cli-create-integration"></a>

本节介绍如何使用创建 CloudTrail Lake 集成来记录外部的事件 AWS。 AWS CLI 

在中 AWS CLI，您可以使用四个命令创建集成（如果您已经有符合条件的事件数据存储，则需要三个命令）。用作集成目标的事件数据存储必须用于单个区域和单个账户；它们不能是多区域的，不能为组织记录事件 AWS Organizations，只能包括活动事件。控制台中的事件类型必须是 **Events from integrations**（来自集成的事件）。在 API 中，`eventCategory` 值必须为 `ActivityAuditLog`。有关集成的更多信息，请参阅 [与外部的事件源创建集成 AWS](query-event-data-store-integration.md)。

1. 如果您还没有一个或多个可用于集成的事件数据存储，请运行 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudtrail/index.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudtrail/index.html) 以创建事件数据存储。

   以下示例 AWS CLI 命令创建了用于记录外部事件的事件数据存储 AWS。对于活动事件，`eventCategory` 字段选择器值为 `ActivityAuditLog`。事件数据存储的保留期设置为 90 天。默认情况下，事件数据存储会收集来自所有区域的事件，但由于这是在收集非AWS 事件，因此请通过添加`--no-multi-region-enabled`选项将其设置为单个区域。默认情况下将启用终止保护，并且事件数据存储不会为组织中的账户收集事件。

   ```
   aws cloudtrail create-event-data-store \
   --name my-event-data-store \
   --no-multi-region-enabled \
   --retention-period 90 \
   --advanced-event-selectors '[
       {
         "Name": "Select all external events",
         "FieldSelectors": [
             { "Field": "eventCategory", "Equals": ["ActivityAuditLog"] }
           ]
       }
     ]'
   ```

   以下为响应示例。

   ```
   {
       "EventDataStoreArn": "arn:aws:cloudtrail:us-east-1:123456789012:eventdatastore/EXAMPLEf852-4e8f-8bd1-bcf6cEXAMPLE",
       "Name": "my-event-data-store",
       "AdvancedEventSelectors": [
           {
              "Name": "Select all external events",
              "FieldSelectors": [
                 {
                     "Field": "eventCategory",
                     "Equals": [
                         "ActivityAuditLog"
                       ]
                   }
               ]
           }
       ],
       "MultiRegionEnabled": true,
       "OrganizationEnabled": false,
       "BillingMode": "EXTENDABLE_RETENTION_PRICING",
       "RetentionPeriod": 90,
       "TerminationProtectionEnabled": true,
       "CreatedTimestamp": "2023-10-27T10:55:55.384000-04:00",
       "UpdatedTimestamp": "2023-10-27T10:57:05.549000-04:00"
   }
   ```

   您需要事件数据存储 ID（ARN 的后缀，或前面的响应示例中的 `EXAMPLEf852-4e8f-8bd1-bcf6cEXAMPLE`）才能继续进行下一步，并创建您的通道。

1. 运行[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudtrail/create-channel.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudtrail/create-channel.html)命令创建一个通道，允许合作伙伴或源应用程序向中的事件数据存储发送事件 CloudTrail。

   通道包含下列组件：  
**源**  
CloudTrail 使用此信息来确定代表您向 CloudTrail 哪些合作伙伴发送事件数据。来源是必填项，可以是所有有效非AWS 事件的 `Custom`，也可以是伙伴事件源的名称。每个来源最多允许一个通道。  
有关可用合作伙伴 `Source` 值的信息，请参阅[有关集成合作伙伴的其他信息](query-event-data-store-integration.md#cloudtrail-lake-partner-information)。  
**摄取状态**  
该通道状态显示从通道来源接收到最后一次事件的时间。  
**目标**  
目的地是接收来自该频道的事件的 CloudTrail Lake 事件数据存储。您可以更改通道的目标事件数据存储。

   要停止接收来自某个来源的事件，请删除该通道。

   您需要至少一个目标事件数据存储的 ID 才能运行此命令。目标的有效类型为 `EVENT_DATA_STORE`。您可以将摄取的事件发送到多个事件数据存储。以下示例命令创建了一个将事件发送到两个事件数据存储的通道，在`--destinations`参数的`Location`属性 IDs 中用它们表示。`--destinations`、`--name` 和 `--source` 参数是必需的。要接收来自 CloudTrail 合作伙伴的事件，请将合作伙伴的名称指定为的值。`--source`要从您自己的应用程序外部提取事件 AWS，请指定`Custom`为的值。`--source`

   ```
   aws cloudtrail create-channel \
       --region us-east-1 \
       --destinations '[{"Type": "EVENT_DATA_STORE", "Location": "EXAMPLEf852-4e8f-8bd1-bcf6cEXAMPLE"}, {"Type": "EVENT_DATA_STORE", "Location": "EXAMPLEg922-5n2l-3vz1- apqw8EXAMPLE"}]'
       --name my-partner-channel \
       --source $partnerSourceName \
   ```

   在对您的 **create-channel** 命令的响应中，复制新通道的 ARN。在后续步骤中，您将需要该 ARN 来运行 `put-resource-policy` 和 `put-audit-events` 命令。

1.  运行**put-resource-policy**命令将资源策略附加到频道。资源策略是 JSON 策略文档，它们指定了指定主体可在资源上执行的操作，以及在什么条件下执行操作。在通道的资源策略中定义为主体的账户可以调用 `PutAuditEvents` API 来传送事件。
**注意**  
如果您没有为通道创建资源策略，则只有通道所有者可以针对该通道调用 `PutAuditEvents` API。

   该策略所需的信息由集成类型决定。
   + 对于方向集成， CloudTrail 要求策略包含合作伙伴的 AWS 账户 IDs，并要求您输入合作伙伴提供的唯一外部 ID。 CloudTrail 使用 CloudTrail 控制台创建集成时 IDs ，会自动将合作伙伴的 AWS 账户添加到资源策略中。请参阅[合作伙伴的文档](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/query-event-data-store-integration.html#cloudtrail-lake-partner-information#lake-integration-partner-documentation)，了解如何获取保单所需的 AWS 账号。
   + 对于解决方案集成，您必须将至少一个 AWS 账户 ID 指定为委托人，并且可以选择输入外部 ID 以防止副手感到困惑。

   以下是对资源策略的要求：
   + 该策略中定义的资源 ARN 必须与该策略附加到的通道 ARN 相匹配。
   +  该策略只包含一个操作：cloudtrail-data：PutAuditEvents 
   +  该策略至少包含一个语句。该策略最多可以包含 20 个语句。
   +  每个语句至少包含一个主体。一个语句最多可以包含 50 个主体。

   ```
   aws cloudtrail put-resource-policy \
       --resource-arn "channelARN" \
       --policy "{
       "Version": "2012-10-17",		 	 	 
       "Statement":
       [
           {
               "Sid": "ChannelPolicy",
               "Effect": "Allow",
               "Principal":
               {
                   "AWS":
                   [
                       "arn:aws:iam::111122223333:root",
                       "arn:aws:iam::444455556666:root",
                       "arn:aws:iam::123456789012:root"
                   ]
               },
               "Action": "cloudtrail-data:PutAuditEvents",
               "Resource": "arn:aws:cloudtrail:us-east-1:777788889999:channel/EXAMPLE-80b5-40a7-ae65-6e099392355b",
               "Condition":
               {
                   "StringEquals":
                   {
                       "cloudtrail:ExternalId": "UniqueExternalIDFromPartner"
                   }
               }
           }
       ]
   }"
   ```

   有关资源策略的更多信息，请参阅[AWS CloudTrail 基于资源的策略示例](security_iam_resource-based-policy-examples.md)。

1. 运行 [https://docs.aws.amazon.com/awscloudtraildata/latest/APIReference/API_PutAuditEvents.html](https://docs.aws.amazon.com/awscloudtraildata/latest/APIReference/API_PutAuditEvents.html)API 以将你的活动事件采集到其中 CloudTrail。您需要要 CloudTrail 添加的事件的有效负载。在将事件载荷摄入之前，请确保其中没有敏感或个人识别信息。 CloudTrail请注意，`PutAuditEvents` API 使用 `cloudtrail-data` CLI 端点，而不是 `cloudtrail` 端点。

   以下示例演示了如何使用 **put-audit-events** CLI 命令。**--audit-events** 和 **--channel-arn** 参数是必需的。如果在资源策略中定义了外部 ID，则需要 **--external-id** 参数。您需要在前面步骤中创建的通道的 ARN。的值**--audit-events**是事件对象的 JSON 数组。 `--audit-events`包括来自事件的必需 ID、作为值的事件所需的有效负载`EventData`，以及一个[可选的校验和](#lake-cli-integration-checksum.title)，以帮助验证事件在摄取后是否完整性。 CloudTrail

   ```
   aws cloudtrail-data put-audit-events \
   --channel-arn $ChannelArn \
   --external-id $UniqueExternalIDFromPartner \
   --audit-events \
   id="event_ID",eventData='"{event_payload}"' \
   id="event_ID",eventData='"{event_payload}"',eventDataChecksum="optional_checksum"
   ```

   以下是包含两个事件示例的示例命令。

   ```
   aws cloudtrail-data put-audit-events \
   --channel-arn arn:aws:cloudtrail:us-east-1:123456789012:channel/EXAMPLE8-0558-4f7e-a06a-43969EXAMPLE \
   --external-id UniqueExternalIDFromPartner \
   --audit-events \
   id="EXAMPLE3-0f1f-4a85-9664-d50a3EXAMPLE",eventData='"{\"eventVersion\":\0.01\",\"eventSource\":\"custom1.domain.com\", ...
   \}"' \
   id="EXAMPLE7-a999-486d-b241-b33a1EXAMPLE",eventData='"{\"eventVersion\":\0.02\",\"eventSource\":\"custom2.domain.com\", ...
   \}"',eventDataChecksum="EXAMPLE6e7dd61f3ead...93a691d8EXAMPLE"
   ```

   以下示例命令添加了 `--cli-input-json` 参数，以指定事件有效负载的 JSON 文件（`custom-events.json`）。

   ```
   aws cloudtrail-data put-audit-events --channel-arn $channelArn --external-id $UniqueExternalIDFromPartner --cli-input-json file://custom-events.json --region us-east-1
   ```

   以下是示例 JSON 文件 `custom-events.json` 的示例内容。

   ```
   {
       "auditEvents": [
         {
           "eventData": "{\"version\":\"eventData.version\",\"UID\":\"UID\",
           \"userIdentity\":{\"type\":\"CustomUserIdentity\",\"principalId\":\"principalId\",
           \"details\":{\"key\":\"value\"}},\"eventTime\":\"2021-10-27T12:13:14Z\",\"eventName\":\"eventName\",
           \"userAgent\":\"userAgent\",\"eventSource\":\"eventSource\",
           \"requestParameters\":{\"key\":\"value\"},\"responseElements\":{\"key\":\"value\"},
           \"additionalEventData\":{\"key\":\"value\"},
           \"sourceIPAddress\":\"12.34.56.78\",\"recipientAccountId\":\"152089810396\"}",
           "id": "1"
         }
      ]
   }
   ```

您可以通过运行命令来验证集成是否正常工作以及 CloudTrail 是否正确地从源接收事件。[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudtrail/get-channel.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudtrail/get-channel.html)的输出**get-channel**显示了最近 CloudTrail收到事件的时间戳。

```
aws cloudtrail get-channel --channel arn:aws:cloudtrail:us-east-1:01234567890:channel/EXAMPLE8-0558-4f7e-a06a-43969EXAMPLE
```

## （可选）计算校验和值
<a name="lake-cli-integration-checksum"></a>

您在`PutAuditEvents`请求`EventDataChecksum`中指定为的值的校验和可帮助您验证 CloudTrail 收到的事件是否与校验和匹配；它有助于验证事件的完整性。校验和值是一种 base64-SHA256 算法，您可以通过运行以下命令来计算该算法。

```
printf %s "{"eventData": "{\"version\":\"eventData.version\",\"UID\":\"UID\",
        \"userIdentity\":{\"type\":\"CustomUserIdentity\",\"principalId\":\"principalId\",
        \"details\":{\"key\":\"value\"}},\"eventTime\":\"2021-10-27T12:13:14Z\",\"eventName\":\"eventName\",
        \"userAgent\":\"userAgent\",\"eventSource\":\"eventSource\",
        \"requestParameters\":{\"key\":\"value\"},\"responseElements\":{\"key\":\"value\"},
        \"additionalEventData\":{\"key\":\"value\"},
        \"sourceIPAddress\":\"source_IP_address\",
        \"recipientAccountId\":\"recipient_account_ID\"}",
        "id": "1"}" \
 | openssl dgst -binary -sha256 | base64
```

该命令将返回校验和。示例如下：

```
EXAMPLEDHjkI8iehvCUCWTIAbNYkOgO/t0YNw+7rrQE=
```

校验和值将成为您的 `PutAuditEvents` 请求中 `EventDataChecksum` 的值。如果校验和与所提供事件的校验和不匹配，则 CloudTrail 会以错误拒绝该事件。`InvalidChecksum`