「CloudTrail」について学習をしたので自身の理解・復習また文章力の向上のためアウトプットさせていただきます。
はじめに
CloudTrailとは
AWSサービスでAWSアカウントの作成から自動的に全操作を記録しています。
「誰が」「いつ」「どの操作を行ったか」を記録できるサービスなので不正行為や予期せぬ操作・エラーに対する原因の特定に役立ちます。
ログは90日間は自動保存されますが、90日以上の保存が必要であれば「S3」などにファイルとして保管することも可能で「S3」などに保存するファイルは「証跡」と呼ばれそのログファイルは暗号化されます。
*「S3」などのストレージサービスは別途料金が発生します。
「CloudTrail」についてはこちらを参考にしました。
ーーーーーー
今回は以前に学習してQiitaに書きましたLambdaで自動でEC2の起動・停止の記事より:
インスタンスの起動・停止のログを「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」を確認することで簡単に原因特定が出来ますので、トラブル解決や同じような事が起こらないように対策や不正行為も発見できるためセキュリティ対策など、活用の幅がとても広く感じました。
今回は学習内容は
自身の書いた記事のLambdaで自動でEC2の起動・停止から引用しましたのでLambdaに興味がある方はよろしければこちらもご覧ください。
最後まで読んでいただいた方、ありがとうございました。