CloudTrail 使用验证日志文件的完整性 AWS CLI - AWS CloudTrail

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

CloudTrail 使用验证日志文件的完整性 AWS CLI

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

AWS CLI 允许您检测以下类型的更改:

  • 修改或删除 CloudTrail 日志文件

  • 修改或删除 CloudTrail 摘要文件

  • 上述两者的修改或删除

注意

仅 AWS CLI 验证摘要文件引用的日志文件。有关更多信息,请参阅 检查特定文件是否由传送 CloudTrail

先决条件

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

  • 您必须联机连接到 AWS。

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

  • 摘要和日志文件不得从 CloudTrail 交付它们的原始 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 <amzn-s3-demo-bucket>] [--s3-prefix <prefix>] [--account-id <account-id>] [--verbose]

注意

validate-logs 命令与特定区域相关。必须指定--region全局选项才能验证特定日志的日志 AWS 区域。

Options

validate-logs 提供以下命令行选项。--trail-arn--start-time 为必需选项。组织跟踪还需要 --account-id 选项。

--start-time

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

--end-time

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

注意

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

--s3-bucket

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

--s3-prefix

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

注意

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

--account-id

也可选择指定用于验证日志的账户。组织跟踪需要此参数来验证组织内特定账户的日志。

--trail-arn

指定要验证的跟踪的 Amazon 资源名称 (ARN)。路径的格式ARN如下。

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

要获取跟踪ARN的跟踪,可以在运行前使用describe-trails命令validate-logs

ARN如果在您指定的时间范围内已将日志文件传送到多个存储桶,并且您希望仅对其中一个存储桶中的日志文件进行验证,则除了跟踪之外,您可能还需要指定存储桶名称和前缀。

--verbose

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

示例

下面的示例验证从指定起始时间到当前时间的日志文件,使用为当前跟踪配置的 Simple Storage Service(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 命令从验证指定时间范围内最新的摘要文件开始。首先,它验证摘要文件是否已从其声明的所属位置下载。换句话说,如果df1从 S3 位置CLI下载摘要文件p1,则验证日志将对此进行验证。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 fingerprint 找不到与摘要文件中记录的指纹对应的公有密钥。无法验证摘要文件。
Digest file INVALID: signature verification failed 摘要文件签名无效。由于摘要文件无效,因此无法验证其引用的日志文件,也无法对其中的API活动做出任何断言。
Digest file INVALID: Unable to load PKCS #1 key with fingerprint fingerprint 由于无法加载具有指定指纹的 PKCS #1 格式的DER编码公钥,因此无法验证摘要文件。
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://amzn-s3-demo-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://amzn-s3-demo-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1925Z_WZZw1RymnjCRjxXc.json.gz valid Log file s3://amzn-s3-demo-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1915Z_POuvV87nu6pfAV2W.json.gz valid Log file s3://amzn-s3-demo-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1930Z_l2QgXhAKVm1QXiIA.json.gz valid Log file s3://amzn-s3-demo-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1920Z_eQJteBBrfpBCqOqw.json.gz valid Log file s3://amzn-s3-demo-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1950Z_9g5A6qlR2B5KaRdq.json.gz valid Log file s3://amzn-s3-demo-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1920Z_i4DNCC12BuXd6Ru7.json.gz valid Log file s3://amzn-s3-demo-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1915Z_Sg5caf2RH6Jdx0EJ.json.gz valid Digest file s3://amzn-s3-demo-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://amzn-s3-demo-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1910Z_YYSFiuFQk4nrtnEW.json.gz valid [...] Log file s3://amzn-s3-demo-bucket/AWSLogs/144218288521/CloudTrail/us-east-2/2015/09/01/144218288521_CloudTrail_us-east-2_20150901T1055Z_0Sfy6m9f6iBzmoPF.json.gz valid Log file s3://amzn-s3-demo-bucket/AWSLogs/144218288521/CloudTrail/us-east-2/2015/09/01/144218288521_CloudTrail_us-east-2_20150901T1040Z_lLa3QzVLpOed7igR.json.gz valid Digest file s3://amzn-s3-demo-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://amzn-s3-demo-bucketAWSLogs/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://amzn-s3-demo-bucket/AWSLogs/144218288521/CloudTrail/us-east-2/2015/09/01/144218288521_CloudTrail_us-east-2_20150901T0830Z_eaFvO3dwHo4NCqqc.json.gz valid Digest file s3://amzn-s3-demo-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://amzn-s3-demo-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://amzn-s3-demo-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/08/31/111111111111_CloudTrail_us-east-2_20150831T2245Z_mbJkEO5kNcDnVhGh.json.gz valid Log file s3://amzn-s3-demo-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/08/31/111111111111_CloudTrail_us-east-2_20150831T2225Z_IQ6kXy8sKU03RSPr.json.gz valid Log file s3://amzn-s3-demo-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/08/31/111111111111_CloudTrail_us-east-2_20150831T2230Z_eRPVRTxHQ5498ROA.json.gz valid Log file s3://amzn-s3-demo-bucket/AWSLogs/111111111111/CloudTrail/us-east-2/2015/08/31/111111111111_CloudTrail_us-east-2_20150831T2255Z_IlWawYZGvTWB5vYN.json.gz valid Digest file s3://amzn-s3-demo-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://amzn-s3-demo-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。