AWS CloudTrail
ユーザーガイド (Version 1.0)

AWS CLI による CloudTrail ログファイルの整合性の検証

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 <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

検証する証跡の Amazon リソースネーム (ARN) を指定します。証跡の ARN の形式を次に示します。

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

注記

証跡の証跡 ARN を取得するには、describe-trails を実行する前に validate-logs コマンドを使用することができます。

指定した時間範囲内で複数のバケットにログファイルが配信され、そのバケットのうち 1 つのみのログファイルに検証を限定する場合、証跡の 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 の場所 p1 からダイジェストファイル df1 をダウンロードすると、validate-logs は、p1 == df1.digestS3Bucket + '/' + df1.digestS3Object を確認します。

ダイジェストファイルの署名が有効である場合、ダイジェストファイルで参照されている各ログのハッシュ値をチェックします。次に、このコマンドは時間内に戻り、前のダイジェストファイルとその参照されたログファイルを連続して検証します。start-time の指定した値まで、またはダイジェストチェーンが終了するまで続きます。ダイジェストファイルが見つからない、または有効でない場合、検証不能な時間範囲が出力が示されます。

検証結果

検証結果は、次の形式の要約ヘッダーで始まります。

Validating log files for trail trail_ARN between time_stamp and time_stamp

メイン出力の各行には、1 つのダイジェストまたはログファイルの検証結果が、次の形式で格納されます。

<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 フィンガープリント 指定されたフィンガープリントを持つ 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://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 フラグを使用しません。次の出力例では、1 つのエラーが見つかりました。ヘッダー、エラー、要約情報のみが返されます。

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 によって配信されました。