AWS

CloudTrailのログをs3に送る

CloudTrailとは

CloudTrailとは、API呼び出しを記録するサービスです。IAM Userとしての呼び出しがちゃんと記録されています。IAM Roleの呼び出しも記録できるらしいですが、今回は目で確認できませんでした(会社のデモ環境で後日確認しました)。

IAMをAWSの認証サービスとして考えていましたが、

  1. IAM User(IAM Role)の情報付きでAPI呼び出し
  2. IAMサービスで、User(Role)に関する情報を探してAPI呼び出しが許可されているか問い合わせ
  3. 許可されていればそれをつけて再度呼び出し
  4. 実際に変化する

みたいな流れかなと思いました。Cognitoみたいな感じかなって勝手に想像しています。

コード

https://github.com/BlueSugar620/poc-cloudtrail_to_s3

ここにterraformコードを書いておきました。

cloudtrailはs3のバケットポリシーに依存する

CloudTrailを作成する前に、s3バケットを作成します(コードの依存関係からわかります)。CloudTrail側でs3に送るための設定をやってくれますが、そのためにはs3バケットへアクセスしないといけません。なのでGetBucketAclでバケット情報を取得する必要がありそうです。

これのせいで、バケットポリシーにcloudtrailの変数を使うことができません。local変数やvariableを設定しないといけないのは少し不便に感じました。

思ったよりもログがたくさん

一瞬でたくさんのログが収納されてしまいました。

管理イベントのみを収集する設定などもできるようなので、そのような適切な設定をしないとs3の料金が怖いです。

またライフサイクルルールも気にしなければなりません。ログとしては重要なものが並ぶので可用性は欲しいですが、アクセス頻度によっては保存する場所を変えるなどした方が良さそうです。低頻度アクセスやGlacierの出番ですね。

CloudWatch Logsに取り込みかどうか

管理イベントだけ取り込んだ方がいい気がしていました。というのも、s3に対してAthenaでクエリを叩いたときのログはLogsに取り込む必要もなさそうですし、アプリケーションによってs3の中身が変わるなどはバージョニングなどによって対応すべきな気がしていました。

CloudWatch Logsとして普段からデータを見たいのは、管理イベントであるケースが多そうだと思いました。Athenaのクエリ発行がどのくらいの細かさでCloudTrailに取り込まれるのか気になってしまいますね。

ちょっと時間差がある

「イベント発生 -> CloudTrailへの取り込み」に少しタイムラグを感じました(1分無いくらいです)。検証をしていて失敗したのかと焦りましたが、そんなことはなかったです。

「CloudTrailへの取り込み -> s3への転送」にはあまりタイムラグを感じませんでした。下のテーマにもつながりますが、AWSがインターネットを経由せずにうまいことしてくれていそうな感じがしました。

通信経路がよくわからない

VPCやサブネットの設定も必要なかったです。AWSがCloudTrail用の通信用のIPを持っていて、s3のIPへと送ってくれているのでしょうか?

CTAサンプル

これはCTAサンプルです。
内容を編集するか削除してください。