本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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
betweentime_stamp
andtime_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。