CloudTrailでインスタンスのログを確認

「CloudTrail」について学習をしたので自身の理解・復習また文章力の向上のためアウトプットさせていただきます。

# はじめに

### CloudTrailとは

AWSサービスでAWSアカウントの作成から自動的に全操作を記録しています。
「誰が」「いつ」「どの操作を行ったか」を記録できるサービスなので不正行為や予期せぬ操作・エラーに対する原因の特定に役立ちます。

ログは90日間は自動保存されますが、90日以上の保存が必要であれば「S3」などにファイルとして保管することも可能で「S3」などに保存するファイルは「証跡」と呼ばれそのログファイルは暗号化されます。
＊「S3」などのストレージサービスは別途料金が発生します。

「CloudTrail」については<a href="https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-user-guide.html" target="_blank">こちら</a>を参考にしました。

ーーーーーー
今回は以前に学習してQiitaに書きました<a href="https://qiita.com/hiro_10/items/cadcc5ed6865f8b7e3e6" target="_blank">Lambdaで自動でEC2の起動・停止</a>の記事より：
インスタンスの起動・停止のログを「CloudTrail」から確認していきたいと思います。


上記のリンクの実行内容は
・「Lambda関数」を実行し設定した時間に対象のインスタンスを起動・停止する内容になっています。

# CloudTrailでのログ確認

検索で「CloudTrail」に入り、「イベント履歴」>「ルックアップ属性」で確認したいもののログを検索します。

#### 「Lambda関数」が作成されたログを確認
リソースタイプ：`AWS::Lambda::Function`で検索をすると

「CreateFunction」と書かれたログを発見しました。
履歴一覧に表示されている内容を確認してみると

イベント名：`CreateFunction`
イベント時間：`August 11, 2023, 03:02:37 (UTC+09:00)`
ユーザー名：`自身のユーザー名`
イベントソース：`lambda.amazonaws.com`
リソースタイプ：`AWS::Lambda::Function`
リソース名：`start_stop_ec2instance`


上記の表示から「いつ」「誰が」「どこで」「何を」などの確認ができました。
詳細に入って確認してみると

```
JSON ビュー
......省略
"eventTime": "2023-08-10T18:02:37Z",
    "eventSource": "lambda.amazonaws.com",
    "eventName": "CreateFunction",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "自身のIPアドレス",
    "requestParameters": {
        "functionName": "start_stop_ec2instance",
        "runtime": "python3.8",
        "role": "arn:aws:iam::************:role/start_stop_instance_lambda",
        "handler": "lambda_function.lambda_handler",
        "code": {},
        "timeout": 3,
        "memorySize": 128,
        "publish": false,
        "packageType": "Zip",
        "deadLetterConfig": {},
        "environment": {},
        "tracingConfig": {
            "mode": "PassThrough"
        },
        "architectures": [
            "x86_64"
        ]
    },
......省略
＊確認に必要そうな箇所のみピックアップしています。
```

このように作成の情報が記録されています。


#### 「Lambda関数」が実行されたインスタンスのログを確認

リソースタイプ：`AWS::EC2::Instance`で検索し対象のインスタンスのIDを探します。
＊学習ではインスタンスが「10：00」に起動し「10：30」に停止するように設定しました。

【起動】


イベント名：`StartInstances`
イベント時間：`August 11, 2023, 10:00:40 (UTC+09:00)`
ユーザー名：`start_stop_ec2instance`
イベントソース：`ec2.amazonaws.com`
リソースタイプ：`AWS::EC2::Instance`
リソース名：`対象のインスタンスID`


一覧は上記の表示がされておりました。
詳細を見てみます。

```
JSON ビュー
......省略
        "sessionContext": {
            "sessionIssuer": {
                "arn": "arn:aws:iam::************:role/start_stop_instance_lambda",
                "userName": "start_stop_instance_lambda"
            },
            "attributes": {
                "creationDate": "2023-08-11T01:00:36Z",
                "mfaAuthenticated": "false"
            }
        }
    },
    "eventTime": "2023-08-11T01:00:40Z",
    "eventSource": "ec2.amazonaws.com",
    "eventName": "StartInstances",
    "awsRegion": "ap-northeast-1",
    "requestParameters": {
        "instancesSet": {
            "items": [
                {
                    "instanceId": "対象のインスタンスID"
                }
            ]
        }
    },
    "responseElements": {
        "instancesSet": {
            "items": [
                {
                    "instanceId": "対象のインスタンスID",
                    "currentState": {
                        "code": 0,
                        "name": "pending"
                    },
                    "previousState": {
                        "code": 80,
                        "name": "stopped"
                    }
                }
            ]
        }
    },
......省略
＊確認に必要そうな箇所のみピックアップしています。
```


誰：`start_stop_instance_lambda`
いつ：`2023-08-11T01:00:40Z`
どこに：`ec2.amazonaws.com`,`対象のインスタンスID`
何を`StartInstances`
どうなった：
```
"instanceId": "対象のインスタンスID",
"currentState": {
  "code": 0,
  "name": "pending"
},
"previousState": {
  "code": 80,
  "name": "stopped"
}
```

インスタンスは問題なく起動しており、その詳細のログを確認出来ました。
　


【停止】

イベント名：`StopInstances`
イベント時間：`August 11, 2023, 10:30:18 (UTC+09:00)`
ユーザー名：`start_stop_ec2instance`
イベントソース：`ec2.amazonaws.com`
リソースタイプ：`AWS::EC2::Instance`
リソース名：`対象のインスタンスID`

一覧は上記の表示がされておりました。
詳細を見てみます。

```
JSON ビュー
......省略
        "sessionContext": {
            "sessionIssuer": {
                "arn": "arn:aws:iam::************:role/start_stop_instance_lambda",
                "userName": "start_stop_instance_lambda"
            },
            "attributes": {
                "creationDate": "2023-08-11T01:30:15Z",
                "mfaAuthenticated": "false"
            }
        }
    },
    "eventTime": "2023-08-11T01:30:18Z",
    "eventSource": "ec2.amazonaws.com",
    "eventName": "StopInstances",
    "awsRegion": "ap-northeast-1",
    "requestParameters": {
        "instancesSet": {
            "items": [
                {
                    "instanceId": "対象のインスタンスID"
                }
            ]
        }
    },
    "responseElements": {
        "instancesSet": {
            "items": [
                {
                    "instanceId": "対象のインスタンスID",
                    "currentState": {
                        "code": 64,
                        "name": "stopping"
                    },
                    "previousState": {
                        "code": 16,
                        "name": "running"
                    }
                }
            ]
        }
    },
......省略
＊確認に必要そうな箇所のみピックアップしています。
```
誰：`start_stop_instance_lambda`
いつ：`2023-08-11T01:30:18Z`
どこに：`ec2.amazonaws.com`,`対象のインスタンスID`
何を`StopInstances`
どうなった：
```
"instanceId": "対象のインスタンスID",
"currentState": {
  "code": 64,
  "name": "stopping"
},
"previousState": {
  "code": 16,
  "name": "running"
}
```
インスタンスは問題なく停止しておりその詳細を確認出来ました。

 

これで「Lambda関数」を実行し設定した時間に起動・停止したインスタンスのログの詳細を確認することができました。

# 最後に

「CloudTrail」で「いつ」「誰が」「何を」などが詳細に記録されており確認できることで、トラブルやミス、予期せぬエラーが起こった際は「CloudTrail」を確認することで簡単に原因特定が出来ますので、トラブル解決や同じような事が起こらないように対策や不正行為も発見できるためセキュリティ対策など、活用の幅がとても広く感じました。

今回は学習内容は
自身の書いた記事の<a href="https://qiita.com/hiro_10/items/cadcc5ed6865f8b7e3e6" target="_blank">Lambdaで自動でEC2の起動・停止</a>から引用しましたのでLambdaに興味がある方はよろしければこちらもご覧ください。


最後まで読んでいただいた方、ありがとうございました。