CloudTrailの「イベント履歴」「証跡」「管理イベント」の基礎

# 内容
CloudTrailはAWSアカウント内のイベントをログとして記録するサービスです。対象（記録するイベント）や方法に多くの選択肢がありますが、今回は基本となる「イベント履歴」「証跡」「管理イベント」について主に記載します。

# イベント記録方法
まず、イベント記録の方法ですが下記3つの方法があります。ここでは「イベント履歴」と「証跡」について記載します。

![スライド1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/da5c48a7-668f-b70e-426a-00f12850aef5.png)

* イベント履歴
過去90日間の管理イベントを表示します。上記の様にCloudTrailのコンソール内からイベントの表示、検索、ダウンロードなどが可能です。

* 証跡
イベント履歴の保存期間は90日間のため、通常は別途「証跡」の設定を行います。証跡を設定することにより、CloudTrailのイベントをS3に配信、格納することが出来ます。必要に応じてCloudWatch LogsやEventBridgeにイベントを配信することが可能です。

なお、「イベント履歴」と「証跡」は別のデータを見ているため、「証跡」側のデータを変更しても「イベント履歴」側のデータに影響はありません。

# イベントの種類

![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/73f1e5cf-e758-cc9e-01e7-a9b2a3d2affb.png)

CloudTrailのコンソールから「イベント履歴」を確認する際、表示されるのは管理イベントのみです。「証跡」を設定する際、上記のように記録対象のイベントを選択することが可能です。「管理イベント」「データイベント」「ネットワークアクティビティイベント」「Insightsイベント」の4種類があります。今回は「管理イベント」について記載します。なお、デフォルトでは「証跡」は「管理イベント」のみを記録します。

# 管理イベントの設定
「証跡」で「管理イベント」を設定する際、下記の項目を選択することが出来ます。

![cloudt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/71b70fd5-921a-6e43-606f-936dda80378a.png)


* 読み取り
例としてセキュリティグループの内容を表示する`DescribeSecurityGroups`サブネットの内容を表示する`DescribeSubnets`などの操作が記録されます。

* 書き込み
例としてEC2インスタンスを起動する`RunInstances`EC2インスタンスを終了する`TerminateInstances`などの操作が記録されます。

* イベントを除外
一部のイベントを除外するオプションになります。

![スライド3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/e9f20e88-075e-f957-b155-0538b6e8042e.png)

「AWS KMS イベントを除外」について、上記の様にKMSのイベントは結構な量が発生しますが、ログ量を抑える方法としてAWSのドキュメントに下記の様な方法の記載があります。



>AWS KMS Encrypt、、 などの アクションはDecrypt、GenerateDataKey通常、大量のイベント (99% 以上) を生成します。これらのアクションは、[読み取り] イベントとしてログに記録されるようになりました。、、 ScheduleKey (通常は AWS KMS イベントボリュームの 0.5% 未満を占める) Disableなどの少量の関連 AWS KMS アクションはDelete、書き込みイベントとして記録されます。

>Encrypt、Decrypt、 などの大量のイベントを除外してもGenerateDataKey、 DisableDeleteや などの関連イベントをログに記録するにはScheduleKey、書き込み管理イベントをログに記録し、Exclude AWS KMS イベントのチェックボックスをオフにします。

# 管理イベントで記録される内容

![スライド4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523652/9f4b91aa-bbc1-b264-59e4-880d339b1cde.png)

まず、上記で設定したAPIイベント（読み取り、書き込み）が記録されます。こちらはAWS Management ConsoleやAWS CLIなどから実行した全ての操作となります。その他のAPI以外のイベントとして下記も記録されます。

* AWS Management Console サインインイベント
IAMユーザ、ルートユーザ、その他フェデレーティッドユーザーのサインインイベントです。

* AWS のサービス のイベント
自分が所有するリソースで別のアカウントが呼び出しをした場合に発生することがあります。該当のイベントサンプルとしてAWSのマニュアル中に下記のイベントの記述があります。

>以下は、カスタマー管理キー が AWS Key Management Service (AWS KMS) 内で自動的にローテーションされるときの AWS サービスイベントのサンプルシナリオです。

```json
{
    "eventVersion": "1.08",
    "userIdentity": {
        "accountId": "111122223333",
        "invokedBy": "AWS Internal"
    },
    "eventTime": "2021-01-14T01:41:59Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "RotateKey",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "AWS Internal",
    "userAgent": "AWS Internal",
    "requestParameters": null,
    "responseElements": null,
    "eventID": "a24b3967-ddad-417f-9b22-2332b918db06",
    "readOnly": false,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsServiceEvent",
    "recipientAccountId": "111122223333",
    "serviceEventDetails": {
        "rotationType": "AUTOMATIC",
        "keyId": "1234abcd-12ab-34cd-56ef-1234567890ab"
    },
    "eventCategory": "Management"
}
```