驗證 CloudTrail 記錄檔完整性 AWS CLI - AWS CloudTrail

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

驗證 CloudTrail 記錄檔完整性 AWS CLI

若要使用驗證記錄檔 AWS Command Line Interface,請使用 CloudTrail validate-logs指令。此命令會使用交付至您 Amazon S3 儲存貯體的摘要檔案來執行驗證。如需摘要檔案的資訊,請參閱「CloudTrail 摘要檔案結構」。

AWS CLI 可讓您偵測下列類型的變更:

  • 修改或刪除 CloudTrail 記錄檔

  • 修改或刪除 CloudTrail 摘要檔

  • 修改或刪除上述兩者

注意

只會 AWS CLI 驗證摘要檔所參考的記錄檔。如需詳細資訊,請參閱 檢查特定檔案是否由 CloudTrail

必要條件

若要使用驗證記錄檔完整性 AWS CLI,必須符合下列條件:

  • 您必須具有的線上連線 AWS。

  • 您必須具有包含摘要和日誌檔案之 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 <DOC-EXAMPLE-BUCKET>] [--s3-prefix <prefix>] [--account-id <account-id>] [--verbose]

注意

validate-logs 命令限特定區域使用。您必須指定--region全域選項,以驗證特定記錄檔 AWS 區域。

選項

下列是 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 命令只會檢查其對應摘要檔案中所參考的日誌檔案。不會檢查 Amazon S3 儲存貯體中的其他日誌檔案。如需詳細資訊,請參閱 檢查特定檔案是否由 CloudTrail

--s3-bucket

選擇性指定摘要檔案要存放的 Amazon S3 儲存貯體。如果未指定值區名稱,則 AWS CLI 會透過呼叫來擷取值區名稱DescribeTrails()

--s3-prefix

選擇性指定摘要檔案要存放的 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

選擇性地輸出所指定時間範圍內每個日誌或摘要檔案的驗證資訊。該輸出會指出檔案保持不變還是已進行修改或刪除。在非詳細資訊模式下 (預設),僅於驗證失敗時才會傳回資訊。

範例

下列範例會驗證自指定的時間開始到現在的日誌檔案,並使用針對目前線索所設定的 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://DOC-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://DOC-EXAMPLE-BUCKET/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1925Z_WZZw1RymnjCRjxXc.json.gz valid Log file s3://DOC-EXAMPLE-BUCKET/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1915Z_POuvV87nu6pfAV2W.json.gz valid Log file s3://DOC-EXAMPLE-BUCKET/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1930Z_l2QgXhAKVm1QXiIA.json.gz valid Log file s3://DOC-EXAMPLE-BUCKET/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1920Z_eQJteBBrfpBCqOqw.json.gz valid Log file s3://DOC-EXAMPLE-BUCKET/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1950Z_9g5A6qlR2B5KaRdq.json.gz valid Log file s3://DOC-EXAMPLE-BUCKET/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1920Z_i4DNCC12BuXd6Ru7.json.gz valid Log file s3://DOC-EXAMPLE-BUCKET/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1915Z_Sg5caf2RH6Jdx0EJ.json.gz valid Digest file s3://DOC-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://DOC-EXAMPLE-BUCKET/AWSLogs/111111111111/CloudTrail/us-east-2/2015/09/01/111111111111_CloudTrail_us-east-2_20150901T1910Z_YYSFiuFQk4nrtnEW.json.gz valid [...] Log file s3://DOC-EXAMPLE-BUCKET/AWSLogs/144218288521/CloudTrail/us-east-2/2015/09/01/144218288521_CloudTrail_us-east-2_20150901T1055Z_0Sfy6m9f6iBzmoPF.json.gz valid Log file s3://DOC-EXAMPLE-BUCKET/AWSLogs/144218288521/CloudTrail/us-east-2/2015/09/01/144218288521_CloudTrail_us-east-2_20150901T1040Z_lLa3QzVLpOed7igR.json.gz valid Digest file s3://DOC-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://DOC-EXAMPLE-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://DOC-EXAMPLE-BUCKET/AWSLogs/144218288521/CloudTrail/us-east-2/2015/09/01/144218288521_CloudTrail_us-east-2_20150901T0830Z_eaFvO3dwHo4NCqqc.json.gz valid Digest file s3://DOC-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://DOC-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://DOC-EXAMPLE-BUCKET/AWSLogs/111111111111/CloudTrail/us-east-2/2015/08/31/111111111111_CloudTrail_us-east-2_20150831T2245Z_mbJkEO5kNcDnVhGh.json.gz valid Log file s3://DOC-EXAMPLE-BUCKET/AWSLogs/111111111111/CloudTrail/us-east-2/2015/08/31/111111111111_CloudTrail_us-east-2_20150831T2225Z_IQ6kXy8sKU03RSPr.json.gz valid Log file s3://DOC-EXAMPLE-BUCKET/AWSLogs/111111111111/CloudTrail/us-east-2/2015/08/31/111111111111_CloudTrail_us-east-2_20150831T2230Z_eRPVRTxHQ5498ROA.json.gz valid Log file s3://DOC-EXAMPLE-BUCKET/AWSLogs/111111111111/CloudTrail/us-east-2/2015/08/31/111111111111_CloudTrail_us-east-2_20150831T2255Z_IlWawYZGvTWB5vYN.json.gz valid Digest file s3://DOC-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://DOC-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。