AWS CloudTrailの証跡の各種イベントログをCloudWatch LogsとS3に送る
AWS CloudTrailは各種APIイベントのアクティビティをデフォルトで90日分記録する。AWSアカウントの操作をロギングします。管理コンソール、コマンドライン、3rdParty等、APIコールされるすべてのイベントが対象。また、CloudWatch Logsに送る事が出来ます。管理イベントについては、AWSアカウントのリージョン別にS3に保存、Lambdaに送ることが出来ます。監査等でも利用され、AWSを使う上で必須の機能と言っても過言ではないです。AWS CloudTrailは無料。
以下、一連の設定作業はIAMポリシーのAdministratorAccessをアタッチしたIAMグループに所属するAdministratorsグループのユーザーで行っています。
CloudTrailの証跡はイベントタイプが以下の3種類となる。データイベントは必然的にS3保存もしくはLambdaに送る(双方同時も可能)となります。
- 管理イベント・・・AWSリソースで実行された管理オペレーション
- データイベント・・・リソース上またはリソース内で実行されたリソース操作。必然的にS3保存かLambdaに送る(双方同時も可能)
- Insightsイベント・・・AWSアカウントの異常なアクティビティ、エラーまたはユーザーの動作を特定
CloudWatchロググループを作る、CloudTrailの「証跡の作成」という手順になります。IAMロール(IAMポリシー)もS3も「証跡の作成」の中で命名しながらほとんど自動で作られるため、事前に作成する必要はありません。作られたS3バケットやIAMロール(IAMポリシー)は作成後に中身チェックしておくことを強くお勧めします。
CloudWatchロググループを作る
- CloudWatchへ
- ロググループへ
- ロググループ名を入力 EX)/aws/cloudtrail
- 「作成」をクリック
CloudTrailの証跡を作る
- CloudTrailへ
- 証跡へ
- 「証跡の作成」へ
- 証跡名を入力 EX)cloudtrail-events
- 「ストレージの場所」で「新しいS3バケットを作成します」を選択
- 「認証ログバケットおよびフォルダ」へ新しいS3バケットの名前を入力 EX)cloudtrail-logs-s3bucket-001
- 「ログファイルの SSE-KMS 暗号化」にチェックを入れて有効化
- 「AWS KMS カスタマー管理の CMK」で既存を選択
- 「AWS KMSエイリアス」で「CloudTrail」を選択
- 「その他の設定」を開く
- 「ログファイルの検証」は有効にする
- 「SNS 通知の配信」はチェックしない
- 「CloudWatch Logs – オプション」は、「CloudWatch Logs」を有効に。ロググループは「既存」で「/aws/cloudtrail」を入力
- 「IAMロール」は、新規
- 「ロール名」を入力。EX)CloudTrailRoleForCloudWatchLogs
- 任意でタグを入力
- 「次へ」をクリック
- 「イベントタイプ」の3つ(管理イベント、データイベント、Insightsイベント)すべてをチェック
- 「管理イベント」は、読み取り 書き込み をチェック
- データイベントソースは、S3を選択 (この記事では使いませんが、ここで「データイベントタイプの追加」にてLambdaも追加できます。証跡の作成後に追加/編集/削除が出来ます。)
- 「次へ」をクリック
- 内容を確認して「証跡の作成」をクリック
IAMロールとIAMポリシーのJSONを確認
IAMポリシーは、「ユーザーによる管理」で「CloudTrailPolicyForCloudWatchLogs_ランダム文字列」というIAMポリシー名で自動的にIAMポリシーがIAMロール(CloudTrailRoleForCloudWatchLogs)にアタッチされています。
IAMロールの「信頼されたエンティティ(ユースケース)」はID プロバイダー cloudtrail.amazonaws.comになっています。「信頼されたエンティティ(ユースケース)」が定番のEC2ではないということに気を付けてください。
S3を確認
S3のcloudtrail-logs-s3bucket-001バケットのAWSLogsフォルダのアカウントIDフォルダ内でリージョン別にgzファイルの証跡を確認できれば完了です。S3 SELECTでjsonファイルにSQLでjsonファイル検索出来ることを確認してみてください。