将跟踪事件复制到事件数据存储 - Amazon CloudTrail
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

将跟踪事件复制到事件数据存储

您可以将跟踪事件复制到 CloudTrail Lake 事件数据存储中,以创建记录到跟踪的事件时间点快照。复制跟踪的事件不会干扰跟踪记录事件的功能,也不会以任何方式修改跟踪。

您可以将跟踪事件复制到为 CloudTrail 事件配置的现有事件数据存储中,也可以创建新的 CloudTrail 事件数据存储,并在创建事件数据存储时选择复制跟踪事件选项。有关将跟踪事件复制到现有事件数据存储的更多信息,请参阅使用控制台将跟踪事件复制到现有事件数据存储。有关创建新的事件数据存储的更多信息,请参阅使用控制台为 CloudTrail 事件创建事件数据存储

如果您要将跟踪事件复制到组织事件数据存储,则必须使用该组织的管理账户。您不能使用组织的委托管理员账户复制跟踪事件。

CloudTrail Lake 事件数据存储会产生费用。创建事件数据存储时,您可以选择要用于事件数据存储的定价选项。定价选项决定了摄取和存储事件的成本,以及事件数据存储的默认和最长保留期。有关 CloudTrail 定价的信息,请参阅 Amazon CloudTrail 定价管理 CloudTrail Lake 成本

将跟踪事件复制到 CloudTrail Lake 事件数据存储时,需要按事件数据存储摄取的未压缩数据量付费。

将跟踪事件复制到 CloudTrail Lake 时,CloudTrail 会解压缩以 gzip(压缩)格式存储的日志,然后将日志中包含的事件复制到事件数据存储。未压缩数据的大小可能大于 S3 的实际存储大小。要对未压缩数据的大小进行总体估计,可以将 S3 存储桶中日志的大小乘以 10。

您可以通过为复制的事件指定更窄的时间范围来降低成本。如果您计划仅使用事件数据存储来查询复制的事件,则可以关闭事件摄取,以免对将来的事件产生费用。有关更多信息,请参阅 Amazon CloudTrail 定价管理 CloudTrail Lake 成本

SCENARIOS(场景

下表描述了复制跟踪事件的一些常见场景,以及如何使用控制台完成每个场景。

场景 如何在控制台中完成此操作?

无需摄取新事件即可分析和查询 CloudTrail Lake 中的历史跟踪事件

在创建事件数据存储时,创建新的事件数据存储并选择复制跟踪事件选项。创建事件数据存储时,请取消选择摄取事件(程序的步骤 15),以确保事件数据存储仅包含跟踪的历史事件,不包含未来事件。

将现有跟踪替换为 CloudTrail Lake 事件数据存储

使用与您的跟踪相同的事件选择器创建事件数据存储,以确保事件数据存储与跟踪具有相同的覆盖范围。

为避免源跟踪和目标事件数据存储之间存在重复事件,请为复制的事件选择一个早于事件数据存储创建时间的时间范围。

创建事件存储后,您可以关闭跟踪的日志记录,避免产生额外费用。

复制跟踪事件的注意事项

复制跟踪事件时,请将以下因素考虑在内。

  • 在复制跟踪事件时,CloudTrail 使用 S3 GetObject API 操作来检索源 S3 存储桶中的跟踪事件。有些 S3 归档存储类,例如 S3 Glacier Flexible Retrieval、S3 Glacier Deep Archive、S3 Outposts 和 S3 Intelligent-Tiering Deep Archive 层,无法使用 GetObject 来访问。要复制存储在这些归档存储类中的跟踪事件,必须先使用 S3 RestoreObject 操作还原副本。有关还原已归档的对象的信息,请参阅《Amazon S3 用户指南》中的恢复已归档的对象

  • 当您将跟踪事件复制到事件数据存储中时,无论目标事件数据存储的事件类型、高级事件选择器或 Amazon Web Services 区域 的配置如何,CloudTrail 都会复制所有跟踪事件。

  • 在将跟踪事件复制到现有的事件数据存储之前,请确保根据您的应用场景适当配置了事件数据存储的定价选项和保留期。

    • 定价选项:定价选项决定了摄取和存储事件的成本。有关定价选项的更多信息,请参阅 Amazon CloudTrail 定价事件数据存储定价选项

    • 保留期:保留期决定事件数据在事件数据存储中保存的时长。CloudTrail 仅复制 eventTime 处于事件数据存储保留期内的跟踪事件。要确定适当的保留期,请计算要复制的最旧事件(以天为单位)和要在事件数据存储中保留这些事件的天数的总和(保留期 = 最旧的事件(天数)+ 要保留的天数)。例如,如果您要复制的最早事件已有 45 天,并且您想将事件在事件数据存储中再保留 45 天,则可以将保留期设置为 90 天。

  • 如果您要将跟踪事件复制到事件数据存储中进行调查,并且不想摄取任何未来事件,则可以停止对事件数据存储的摄取。创建事件数据存储时,请取消选择摄取事件选项(程序的步骤 15),以确保事件数据存储仅包含跟踪的历史事件,不包含未来事件。

  • 在复制跟踪事件之前,请禁用任何附加到源 S3 存储桶的访问控制列表(ACL),并更新目标事件数据存储的 S3 存储桶策略。有关更新 S3 存储桶策略的更多信息,请参阅复制跟踪事件所用的 Amazon S3 存储桶策略。有关禁用 ACL 的更多信息,请参阅为您的存储桶控制对象所有权和禁用 ACL

  • CloudTrail 仅从 Gzip 压缩日志文件中复制跟踪事件,这些文件位于源 S3 存储桶中。CloudTrail 不会从未压缩的日志文件或使用除 Gzip 以外的格式压缩的日志文件中复制跟踪事件。

  • 为避免源跟踪和目标事件数据存储之间存在重复事件,请为复制的事件选择一个早于事件数据存储创建时间的时间范围。

  • 默认情况下,CloudTrail 仅复制 S3 存储桶 CloudTrail 前缀中包含的 CloudTrail 事件以及 CloudTrail 前缀中的前缀,而不会检查其他 Amazon 服务的前缀。如果要复制包含在另一个前缀中的 CloudTrail 事件,则必须在复制跟踪事件时选择该前缀。

  • 要将跟踪事件复制到组织事件数据存储,必须使用该组织的管理账户。您不能使用委托管理员账户将跟踪事件复制到组织事件数据存储。

复制跟踪事件所需的权限

在复制跟踪事件之前,请确保您拥有 IAM 角色所需的全部权限。如果您选择现有 IAM 角色来复制跟踪事件,则只需要更新 IAM 角色权限。如果您选择创建新的 IAM 角色,CloudTrail 将为此角色提供所有必要权限。

如果源 S3 桶使用 KMS 密钥进行数据加密,请确保 KMS 密钥政策允许 CloudTrail 解密桶中的数据。如果源 S3 桶使用多个 KMS 密钥,则必须更新每个密钥的策略,以允许 CloudTrail 解密桶中的数据。

复制跟踪事件所需的 IAM 权限

复制跟踪事件时,您可以选择创建新的 IAM 角色,也可以使用现有 IAM 角色。当您选择新的 IAM 角色时,CloudTrail 会创建一个具有所需权限的 IAM 角色,而您无需采取进一步操作。

如果选择现有角色,请确保 IAM 角色的策略允许 CloudTrail 从源 S3 存储桶复制跟踪事件。此部分提供所需 IAM 角色权限和信任策略的示例。

以下示例提供了权限策略,其允许 CloudTrail 从源 S3 存储桶复制跟踪事件。使用您配置的相应值替换 amzn-s3-demo-bucketmyAccountIDregionprefixeventDataStoreIdmyAccountID 是用于 CloudTrail Lake 的 Amazon 账户 ID,其可能与 S3 存储桶的 Amazon 账户 ID 不同。

key-regionkeyAccountIDkeyID 替换为用于加密源 S3 存储桶的 KMS 密钥的值。如果源 S3 存储桶未使用 KMS 密钥进行加密,则可省略 AWSCloudTrailImportKeyAccess 语句。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSCloudTrailImportBucketAccess", "Effect": "Allow", "Action": ["s3:ListBucket", "s3:GetBucketAcl"], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket" ], "Condition": { "StringEquals": { "aws:SourceAccount": "myAccountID", "aws:SourceArn": "arn:aws:cloudtrail:region:myAccountID:eventdatastore/eventDataStoreId" } } }, { "Sid": "AWSCloudTrailImportObjectAccess", "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/prefix", "arn:aws:s3:::amzn-s3-demo-bucket/prefix/*" ], "Condition": { "StringEquals": { "aws:SourceAccount": "myAccountID", "aws:SourceArn": "arn:aws:cloudtrail:region:myAccountID:eventdatastore/eventDataStoreId" } } }, { "Sid": "AWSCloudTrailImportKeyAccess", "Effect": "Allow", "Action": ["kms:GenerateDataKey","kms:Decrypt"], "Resource": [ "arn:aws:kms:key-region:keyAccountID:key/keyID" ] } ] }

以下示例提供了 IAM 信任策略,其允许 CloudTrail 代入 IAM 角色以从源 S3 存储桶复制跟踪事件。使用您的配置的相应值替换 myAccountIDregioneventDataStoreArnmyAccountID 是用于 CloudTrail Lake 的 Amazon Web Services 账户 ID,其可能与 S3 存储桶的 Amazon 账户 ID 不同。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "myAccountID", "aws:SourceArn": "arn:aws:cloudtrail:region:myAccountID:eventdatastore/eventDataStoreId" } } } ] }

复制跟踪事件所用的 Amazon S3 存储桶策略

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

在复制跟踪事件之前,您必须更新 S3 存储桶策略以允许 CloudTrail 从源 S3 存储桶复制跟踪事件。

您可以将以下语句添加到 S3 存储桶策略,以授予这些权限。使用您的配置的相应值替换 roleArnamzn-s3-demo-bucket

{ "Sid": "AWSCloudTrailImportBucketAccess", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketAcl", "s3:GetObject" ], "Principal": { "AWS": "roleArn" }, "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] },

用于解密源 S3 存储桶中数据的 KMS 密钥政策

如果源 S3 存储桶使用 KMS 密钥进行数据加密,请确保 KMS 密钥政策为 CloudTrail 提供了从已启用 SSE-KMS 加密的 S3 存储桶复制跟踪事件所需的 kms:Decryptkms:GenerateDataKey 权限。如果源 S3 存储桶使用多个 KMS 密钥,则必须更新每个密钥的策略。更新 KMS 密钥政策允许 CloudTrail 解密源 S3 桶中的数据、运行验证检查,以确保事件符合 CloudTrail 标准,并将事件复制到 CloudTrail Lake 事件数据存储中。

以下示例提供了 KMS 密钥政策,该策略允许 CloudTrail 解密源 S3 桶中数据。使用您配置的相应值替换 roleArnamzn-s3-demo-bucketmyAccountIDregioneventDataStoreIdmyAccountID 是用于 CloudTrail Lake 的 Amazon 账户 ID,其可能与 S3 存储桶的 Amazon 账户 ID 不同。

{ "Sid": "AWSCloudTrailImportDecrypt", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Principal": { "AWS": "roleArn" }, "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::amzn-s3-demo-bucket/*" }, "StringEquals": { "aws:SourceAccount": "myAccountID", "aws:SourceArn": "arn:aws:cloudtrail:region:myAccountID:eventdatastore/eventDataStoreId" } } }