CloudTrail ログファイルの整合性を検証する

# CloudTrail ログファイルの整合性の検証とは
- CloudTrail のログファイルの改竄有無を確認できる
- CloudTrail が作成するダイジェストファイル（ログファイルのハッシュを含むファイル）とログファイルを使って検証する

詳細は[こちら](https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-log-file-validation-intro.html)

# なぜログファイルの整合性を検証するのか
- セキュリティおよびフォレンシック調査で重要
 - CloudTrail のログファイルが改竄有無を確認できる

詳細は[こちら](https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-log-file-validation-intro.html#cloudtrail-log-file-validation-intro-use-cases)

# この記事で試したこと
AWS CloudTrail のログファイルが改竄有無を AWS CLI を使って検証しました。
改竄無し、改竄有り（変更、削除）、の結果もそれぞれ記載しています。

# 前提
 - CloudTrail が有効になっていること
 - AWS CLI が使えること

# 検証準備
1. CloudtTrail のログファイルの整合性検証を有効にする　（デフォルトは有効）
<img width="400" alt="cloudtrail.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2305599/98cea232-c876-a56c-71e9-e73960206a9a.png">

2. CloudTrail に紐付く S3 Bucket にダイジェストファイルがあることを確認する （ダイジェストファイルは整合性検証を有効化後、約1時間で作成される）
<img width="400" alt="s3.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2305599/5555c8a1-d798-ad47-ca52-788c45d7c685.png">

# 検証方法
こちらのコマンドで検証します
「--start-time」と「--trail-arn」オプションは必須です

```bash
aws cloudtrail validate-logs --start-time <開始時間> --end-time <終了時間> --trail-arn <CloudTrailのARN> --verbose
```
コマンドの詳細は[こちら](https://docs.aws.amazon.com/cli/latest/reference/cloudtrail/validate-logs.html)

# 検証結果（改竄されていない場合）
エラーなく終了

```
$ aws cloudtrail validate-logs --start-time 20211120T07:00:00Z --end-time 20211120T08:00:00Z --trail-arn arn:aws:cloudtrail:us-east-1:123456789012:trail/management-events
Validating log files for trail arn:aws:cloudtrail:us-east-1:123456789012:trail/management-events between 2021-11-20T07:00:00Z and 2021-11-20T08:00:00Z

Results requested for 2021-11-20T07:00:00Z to 2021-11-20T08:00:00Z
Results found for 2021-11-20T07:28:41Z to 2021-11-20T08:00:00Z:

2/2 digest files valid
23/23 log files valid
```


# 検証結果（改竄されている場合）
ログファイルが変更されている場合、Log fileの右側に「INVALID: hash value doesn't match」が出力される


```
$ aws cloudtrail validate-logs --start-time 20211120T07:00:00Z --end-time 20211120T08:00:00Z --trail-arn arn:aws:cloudtrail:us-east-1:123456789012:trail/management-events
Validating log files for trail arn:aws:cloudtrail:us-east-1:123456789012:trail/management-events between 2021-11-20T07:00:00Z and 2021-11-20T08:00:00Z

Log file	s3://aws-cloudtrail-logs-123456789012-d916811f/AWSLogs/123456789012/CloudTrail/us-east-1/2021/11/20/123456789012_CloudTrail_us-east-1_20211120T0755Z_mlU5fRkEPtpb6a8X.json.gz	INVALID: hash value doesn't match

Results requested for 2021-11-20T07:00:00Z to 2021-11-20T08:00:00Z
Results found for 2021-11-20T07:28:41Z to 2021-11-20T08:00:00Z:

2/2 digest files valid
22/23 log files valid, 1/23 log files INVALID
```

ログファイルが削除されている場合、Log fileの右側に「INVALID: not found」が出力される

```
$ aws cloudtrail validate-logs --start-time 20211120T07:00:00Z --end-time 20211120T08:00:00Z --trail-arn arn:aws:cloudtrail:us-east-1:123456789012:trail/management-events
Validating log files for trail arn:aws:cloudtrail:us-east-1:123456789012:trail/management-events between 2021-11-20T07:00:00Z and 2021-11-20T08:00:00Z

Log file	s3://aws-cloudtrail-logs-123456789012-d916811f/AWSLogs/123456789012/CloudTrail/us-east-1/2021/11/20/123456789012_CloudTrail_us-east-1_20211120T0755Z_mlU5fRkEPtpb6a8X.json.gz	INVALID: not found

Results requested for 2021-11-20T07:00:00Z to 2021-11-20T08:00:00Z
Results found for 2021-11-20T07:28:41Z to 2021-11-20T08:00:00Z:

2/2 digest files valid
22/23 log files valid, 1/23 log files INVALID
```

# 参考

https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-log-file-validation-intro.html

https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-log-file-validation-enabling.html

https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-log-file-validation-cli.html

https://dev.classmethod.jp/articles/validating-cloudtrail-log-file-integrity/