使用 Lake 创建、更新和管理 CloudTrail Lake 集成 AWS CLI - AWS CloudTrail

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

使用 Lake 创建、更新和管理 CloudTrail Lake 集成 AWS CLI

您可以使用 AWS CLI 来创建、更新和管理您的 CloudTrail Lake 集成。使用时 AWS CLI,请记住您的命令在 AWS 区域 配置文件中运行。如果您想要在不同的区域中运行命令,可以为配置文件更改默认区域,或者与命令一起使用 --region 参数。

L CloudTrail ake 集成的可用命令

用于在 La CloudTrail ke 中创建、更新和管理集成的命令包括:

  • create-event-data-store为之外的事件创建事件数据存储 AWS。

  • delete-channel删除用于集成的频道。

  • delete-resource-policy删除附加到 La CloudTrail ke 集成频道的资源策略。

  • get-channel返回有关 CloudTrail 频道的信息。

  • get-resource-policy检索附加到 CloudTrail 频道的基于资源的政策文档的 JSON 文本。

  • list-channels列出当前账户中的频道及其来源名称。

  • put-audit-events将您的应用程序事件摄取到 CloudTrail Lake 中。必填参数接受您要 CloudTrail 采集的事件的 JSON 记录(也称为有效负载)。auditEvents每个PutAuditEvents请求最多可以添加 100 个此类事件(或最多 1 MB)。

  • put-resource-policy将基于资源的权限策略附加到用于与外部事件源集成的 CloudTrail 频道。 AWS有关基于资源的策略的更多信息,请参阅AWS CloudTrail 基于资源的策略示例。

  • update-channel更新由所需频道 ARN 或 UUID 指定的频道。

有关 La CloudTrail ke 事件数据存储的可用命令列表,请参阅事件数据存储的可用命令

有关可用于 La CloudTrail ke 查询的命令列表,请参阅可用于 L CloudTrail ake 查询的命令

创建用于从外部记录事件 AWS 的集成 AWS CLI

在中 AWS CLI,您可以创建一个集成,该集成通过四个命令记录来自外部 AWS 的事件(如果您已经有符合条件的事件数据存储,则使用三个命令)。用作集成目标的事件数据存储必须用于单个区域和单个账户;它们不能是多区域的,不能为组织记录事件 AWS Organizations,只能包括活动事件。控制台中的事件类型必须是 Events from integrations(来自集成的事件)。在 API 中,eventCategory 值必须为 ActivityAuditLog。有关集成的更多信息,请参阅 与外部的事件源创建集成 AWS

  1. 如果您还没有一个或多个可用于集成的事件数据存储,请运行 create-event-data-store 以创建事件数据存储。

    以下示例 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)才能继续进行下一步,并创建您的通道。

  2. 运行create-channel命令创建一个通道,允许合作伙伴或源应用程序向中的事件数据存储发送事件 CloudTrail。

    通道包含下列组件:

    CloudTrail 使用此信息来确定代表您向 CloudTrail 哪些合作伙伴发送事件数据。来源是必填项,可以是所有有效非AWS 事件的 Custom,也可以是伙伴事件源的名称。每个来源最多允许一个通道。

    有关可用合作伙伴 Source 值的信息,请参阅 有关集成合作伙伴的其他信息

    摄取状态

    该通道状态显示从通道来源接收到最后一次事件的时间。

    目标

    目的地是接收来自该频道的事件的 CloudTrail Lake 事件数据存储。您可以更改通道的目标事件数据存储。

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

    您需要至少一个目标事件数据存储的 ID 才能运行此命令。目标的有效类型为 EVENT_DATA_STORE。您可以将摄取的事件发送到多个事件数据存储。以下示例命令将创建一个通道,用于将事件发送到两个事件数据存储,这两个存储库在 --destinations 参数的 Location 属性中由其 ID 表示。--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-policyput-audit-events 命令。

  3. 运行put-resource-policy命令将资源策略附加到频道。资源策略是 JSON 策略文档,它们指定了指定主体可在资源上执行的操作,以及在什么条件下执行操作。在通道的资源策略中定义为主体的账户可以调用 PutAuditEvents API 来传送事件。

    注意

    如果您没有为通道创建资源策略,则只有通道所有者可以针对该通道调用 PutAuditEvents API。

    该策略所需的信息由集成类型决定。

    • 对于方向集成, CloudTrail 要求策略包含合作伙伴的 AWS 账户 ID,并要求您输入合作伙伴提供的唯一外部 ID。 CloudTrail 使用 CloudTrail 控制台创建集成时,会自动将合作伙伴的 AWS 账户 ID 添加到资源策略中。请参阅合作伙伴的文档,了解如何获取保单所需的 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 基于资源的策略示例

  4. 运行 PutAuditEventsAPI 以将你的活动事件采集到其中 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,以及一个可选的校验和,以帮助验证事件在摄取后是否完整性。 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 是否正确地从源接收事件。get-channel的输出get-channel显示了最近 CloudTrail收到事件的时间戳。

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

(可选)计算校验和值

您在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

使用更新频道 AWS CLI

要更新通道的名称或目标事件数据存储,请运行 update-channel 命令。--channel 参数是必需的。您无法更新通道的来源。示例如下:

aws cloudtrail update-channel \ --channel aws:cloudtrail:us-east-1:123456789012:channel/EXAMPLE8-0558-4f7e-a06a-43969EXAMPLE \ --name "new-channel-name" \ --destinations '[{"Type": "EVENT_DATA_STORE", "Location": "EXAMPLEf852-4e8f-8bd1-bcf6cEXAMPLE"}, {"Type": "EVENT_DATA_STORE", "Location": "EXAMPLEg922-5n2l-3vz1- apqw8EXAMPLE"}]'

删除频道以删除与的集成 AWS CLI

要停止在外部推送合作伙伴或其他活动事件 AWS,请运行命令删除频道。delete-channel需要您要删除的通道的 ARN 或通道 ID(ARN 后缀)。示例如下:

aws cloudtrail delete-channel \ --channel EXAMPLE8-0558-4f7e-a06a-43969EXAMPLE