AWS CloudTrail
用户指南 (版本 1.0)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 验证 日志文件完整性

要使用 AWS Command Line Interface 验证日志,请使用 CloudTrail validate-logs 命令。此命令使用提交到 Amazon S3 存储桶的摘要文件执行验证。有关摘要文件的信息,请参阅 CloudTrail 摘要文件结构

AWS CLI 让您能够检测以下类型的更改:

  • CloudTrail 日志文件的修改或删除

  • CloudTrail 摘要文件的修改或删除

  • 上述两者的修改或删除

注意

AWS CLI 只验证摘要文件引用的日志文件。有关更多信息,请参阅检查 CloudTrail 是否提交了特定的文件

先决条件

要使用 AWS CLI 验证日志文件的完整性,必须满足以下条件:

  • 您必须在线连接到 AWS。

  • 您必须拥有包含摘要文件和日志文件的 Amazon S3 存储桶的读取访问权限。

  • 摘要文件和日志文件在由 提交到 位置后不能发生移动。

注意

AWS CLI 无法验证下载到本地磁盘的日志文件。有关自行创建验证工具的指南,请参阅 CloudTrail 日志文件完整性验证的自定义实现

validate-logs

语法

validate-logs 采用下面的语法形式。括号内为可选参数。

aws cloudtrail validate-logs --trail-arn <trailARN> --start-time <start-time> [--end-time <end-time>] [--s3-bucket <bucket-name>] [--s3-prefix <prefix>] [--verbose]

选项

validate-logs 提供以下命令行选项。--trail-arn--start-time 为必需选项。

--start-time

指定将验证在指定 UTC 时间戳值当时或之后提交的日志文件。示例: 2015-01-08T05:21:42Z.

--end-time

(可选)指定将验证在指定 UTC 时间戳值当时或之前提交的日志文件。默认值为当前 UTC 时间 (Date.now())。示例: 2015-01-08T12:31:41Z.

注意

对于指定的时间范围,validate-logs 命令只检查其对应的摘要文件引用的日志文件。不检查 Amazon S3 存储桶中的任何其他日志文件。有关更多信息,请参阅检查 CloudTrail 是否提交了特定的文件

--s3-bucket

(可选)指定存储摘要文件的 Amazon S3 存储桶。如果未指定存储桶名称,则 AWS CLI 会调用 DescribeTrails() 来检索它。

--prefix

(可选)指定表示摘要文件存储位置的 Amazon S3 前缀。如果未指定,则 AWS CLI 将调用 DescribeTrails() 来检索它。

注意

仅在当前前缀不同于指定时间范围期间使用的前缀时,才应使用此选项。

--trail-arn

指定要验证的跟踪的亚马逊资源名称 (ARN)。跟踪 ARN 遵循的格式。

arn:aws:cloudtrail:us-east-2:111111111111:trail/MyTrailName

注意

要获取跟踪的 ARN,您可以先使用 describe-trails 命令,然后再运行 validate-logs

如果在您指定的时间范围内日志文件被提交到多个存储桶,而您需要将对日志文件的验证限制在一个存储桶,则除了跟踪 ARN,您可能还需要指定存储桶的名称和前缀。

--verbose

(可选)输出指定时间范围内的每个日志文件或摘要文件的验证信息。输出指示文件保持不变还是发生过修改或已删除。在非详细模式(默认)下,仅当验证失败时才返回信息。

示例

下面的示例验证从指定起始时间到当前时间的日志文件,使用为当前跟踪配置的 Amazon S3 存储桶并指定详细输出。

aws cloudtrail validate-logs --start-time 2015-08-27T00:00:00Z --end-time 2015-08-28T00:00:00Z --trail-arn arn:aws:cloudtrail:us-east-2:111111111111:trail/my-trail-name --verbose

validate-logs 的工作原理

validate-logs 命令从验证指定时间范围内最新的摘要文件开始。首先,它验证摘要文件是否已从其声明的所属位置下载。换句话说,如果 CLI 从 S3 位置 下载摘要文件 ,则 validate-logs 会验证 p1 == df1.digestS3Bucket + '/' + df1.digestS3Object

如果摘要文件的签名有效,则它检查摘要文件中引用的每个日志的哈希值。之后,此命令按时间倒序连续验证之前的摘要文件及其引用的日志文件。它继续进行这一操作,直到到达指定的 start-time 值或摘要链结束为止。如果有摘要文件缺失或无效,则此命令在输出中指出无法验证的时间范围。

验证结果

验证结果从摘要头开始,采用以下格式:

Validating log files for trail trail_ARN between time_stamp and time_stamp

主输出的每行包含单个摘要文件或日志文件的验证结果,格式如下:

<Digest file | Log file> <S3 path> <Validation Message>

下表描述了可能会出现的日志文件和摘要文件的验证消息。

文件类型 验证消息 描述
Digest file valid 摘要文件签名有效。可以检查所引用的日志文件。仅详细模式包含此消息。
Digest file INVALID: has been moved from its original location 检索摘要文件的 S3 存储桶或 S3 对象与摘要文件中记录的 S3 存储桶或 S3 对象位置不匹配。
Digest file INVALID: invalid format 摘要文件格式无效。无法验证与摘要文件表示的时间范围对应的日志文件。
Digest file INVALID: not found 找不到摘要文件。无法验证与摘要文件表示的时间范围对应的日志文件。
Digest file INVALID: public key not found for fingerprint 指纹 找不到与摘要文件中记录的指纹对应的公有密钥。无法验证摘要文件。
Digest file INVALID: signature verification failed 摘要文件签名无效。摘要文件无效,无法验证其引用的日志文件,也无法确定其中所列的 API 活动。
Digest file INVALID: Unable to load PKCS #1 key with fingerprint 指纹 无法加载含有指定指纹的 DER 编码公有密钥(PKCS #1 格式),无法验证摘要文件。
Log file valid 日志文件已验证且自提交以来未发生过修改。仅详细模式包含此消息。
Log file INVALID: hash value doesn't match 日志文件的哈希值不匹配。日志文件自 CloudTrail 提交后发生过修改。
Log file INVALID: invalid format 日志文件格式无效。无法验证日志文件。
Log file INVALID: not found 找不到日志文件,无法验证。

输出包含有关返回结果的摘要信息。

示例输出

详细

下面的示例 validate-logs 命令使用 --verbose 标志并生成后面的示例输出。[...] 表示示例输出已省略。

aws cloudtrail validate-logs --trail-arn arn:aws:cloudtrail:us-east-2:111111111111:trail/example-trail-name --start-time 2015-08-31T22:00:00Z --end-time 2015-09-01T19:17:29Z --verbose
Validating log files for trail arn:aws:cloudtrail:us-east-2:111111111111:trail/example-trail-name between 2015-08-31T22:00:00Z and 2015-09-01T19:17:29Z Digest file s3://example-bucket/AWSLogs/111111111111/CloudTrail-Digest/us-east-2/2015/09/01/111111111111_CloudTrail-Digest_us-east-2_example-trail-name_us-east-2_20150901T201728Z.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1925Z_WZZw1RymnjCRjxXc.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1915Z_POuvV87nu6pfAV2W.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1930Z_l2QgXhAKVm1QXiIA.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1920Z_eQJteBBrfpBCqOqw.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1950Z_9g5A6qlR2B5KaRdq.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1920Z_i4DNCC12BuXd6Ru7.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1915Z_Sg5caf2RH6Jdx0EJ.json.gz valid Digest file s3://example-bucket/AWSLogs/111111111111/CloudTrail-Digest/us-east-2/2015/09/01/111111111111_CloudTrail-Digest_us-east-2_example-trail-name_us-east-2_20150901T191728Z.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1910Z_YYSFiuFQk4nrtnEW.json.gz valid [...] Log file s3://example-bucket/AWSLogs/144218288521/CloudTrail/us-east-2/2015/09/01/144218288521_CloudTrail_us-east-2_20150901T1055Z_0Sfy6m9f6iBzmoPF.json.gz valid Log file s3://example-bucket/AWSLogs/144218288521/CloudTrail/us-east-2/2015/09/01/144218288521_CloudTrail_us-east-2_20150901T1040Z_lLa3QzVLpOed7igR.json.gz valid Digest file s3://example-bucket/AWSLogs/144218288521/CloudTrail-Digest/us-east-2/2015/09/01/144218288521_CloudTrail-Digest_us-east-2_example-trail-name_us-east-2_20150901T101728Z.json.gz INVALID: signature verification failed Digest file s3://example-bucket/AWSLogs/144218288521/CloudTrail-Digest/us-east-2/2015/09/01/144218288521_CloudTrail-Digest_us-east-2_example-trail-name_us-east-2_20150901T091728Z.json.gz valid Log file s3://example-bucket/AWSLogs/144218288521/CloudTrail/us-east-2/2015/09/01/144218288521_CloudTrail_us-east-2_20150901T0830Z_eaFvO3dwHo4NCqqc.json.gz valid Digest file s3://example-bucket/AWSLogs/144218288521/CloudTrail-Digest/us-east-2/2015/09/01/144218288521_CloudTrail-Digest_us-east-2_example-trail-name_us-east-2_20150901T081728Z.json.gz valid Digest file s3://example-bucket/AWSLogs/144218288521/CloudTrail-Digest/us-east-2/2015/09/01/144218288521_CloudTrail-Digest_us-east-2_example-trail-name_us-east-2_20150901T071728Z.json.gz valid [...] Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/08/31/111111111111_CloudTrail_us-east-2_20150831T2245Z_mbJkEO5kNcDnVhGh.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/08/31/111111111111_CloudTrail_us-east-2_20150831T2225Z_IQ6kXy8sKU03RSPr.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/08/31/111111111111_CloudTrail_us-east-2_20150831T2230Z_eRPVRTxHQ5498ROA.json.gz valid Log file s3://example-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/08/31/111111111111_CloudTrail_us-east-2_20150831T2255Z_IlWawYZGvTWB5vYN.json.gz valid Digest file s3://example-bucket/AWSLogs/111111111111/CloudTrail-Digest/us-east-2/2015/08/31/111111111111_CloudTrail-Digest_us-east-2_example-trail-name_us-east-2_20150831T221728Z.json.gz valid Results requested for 2015-08-31T22:00:00Z to 2015-09-01T19:17:29Z Results found for 2015-08-31T22:17:28Z to 2015-09-01T20:17:28Z: 22/23 digest files valid, 1/23 digest files INVALID 63/63 log files valid

非详细

下面的示例 validate-logs 命令不使用 --verbose 标志。在后面的示例输出中,出现一个错误。只返回了头、错误和摘要信息。

aws cloudtrail validate-logs --trail-arn arn:aws:cloudtrail:us-east-2:111111111111:trail/example-trail-name --start-time 2015-08-31T22:00:00Z --end-time 2015-09-01T19:17:29Z
Validating log files for trail arn:aws:cloudtrail:us-east-2:111111111111:trail/example-trail-name between 2015-08-31T22:00:00Z and 2015-09-01T19:17:29Z Digest file s3://example-bucket/AWSLogs/144218288521/CloudTrail-Digest/us-east-2/2015/09/01/144218288521_CloudTrail-Digest_us-east-2_example-trail-name_us-east-2_20150901T101728Z.json.gz INVALID: signature verification failed Results requested for 2015-08-31T22:00:00Z to 2015-09-01T19:17:29Z Results found for 2015-08-31T22:17:28Z to 2015-09-01T20:17:28Z: 22/23 digest files valid, 1/23 digest files INVALID 63/63 log files valid

检查 CloudTrail 是否提交了特定的文件

要检查 CloudTrail 是否在存储桶中提交了特定的文件,请针对包含此文件的时间段以详细模式运行 validate-logs。如果 validate-logs 输出中包含此文件,则 CloudTrail 已提交此文件。