イラストで理解するAWS CloudTrail
はじめに
この記事では私がAWS CloudTrailというサービスを触った時、ここら辺が難しかったな〜
という部分に焦点を当てながら、なるべくイメージしやすいようにイラストを用いてCloudTrailを解説します。
比較的初歩的な記事なので込み入ったことは書いておりません。
また、一般的に利用頻度の高そうな機能のみに焦点を当てて紹介しています。
ふわっとサービスの概要を知りたいよ!という方向けです。
それではいってみましょう!
CloudTrailってどんなサービス?
まず一言で表すと、CloudTrailはAWSの操作ログを取得するサービスです。
もう少し具体的にいうと「誰が、どこで、いつ、何をしたのか」というログを取得します。
ちなみにこのログをCloudTrailではイベントと呼びます。
なぜイベントを取得するのでしょうか?
よくあるのは監査やトラブルシューティングの目的です。
監査やトラブル調査では誰が、どこで、いつ、何をしたのかを紐解き、イベントが発生した原因を探ります。
そういった場面でCloudTrailのイベントが活躍します。
イベントって何?
具体的にイベントってどんなものでしょうか?
例えば「EC2インスタンスを起動する」や「S3バケットの一覧を表示する」などです。
つまりAWSのほぼ全ての操作が何かしらのイベントです。
ではこの操作というのをもう少し深ぼってみましょう。
AWSを操作する時、裏では何が起きているのでしょうか?
マネジメントコンソールから操作しているとあまり意識することはありませんが、AWSの操作をすると操作毎にAPIが実行されています。
APIって何?という方はWebで検索すればたくさん説明記事が出てくるので調べてみてください。
簡単にいうと、AWSに対して〜の操作して!とお願いすると、AWS側がお願いされたプログラムを実行するイメージです。
ちなみに、
「EC2インスタンスを起動する」はAWSに対してRunInstances
というAPIが実行されます。
「S3バケットの一覧を表示する」はAWSに対してListBucket
というAPIが実行されます。
このように、普段マネジメントコンソールで画面をポチポチしていると、その操作毎に何かしらのAPIが実行されています。
このAPIの実行履歴を記録すれば、誰が、どこで、いつ、何をしたのか分かりそうですね。
そうです、CloudTrailはそのAPIの実行履歴をイベントとして記録するサービスなのです。
ちなみに、CloudTrailのコンソール画面だとイベント履歴を表示すると過去90日間のイベントを見ることができます。
ユーザー以外の操作
余談ですが、CloudTrailからイベントを確認すると、ユーザー名の行にユーザー以外が表示されているケースもあると思います。
例えばAWS BackupがEC2インスタンスのバックアップを取得する際、AWS BackupがEC2インスタンスの情報を取得するためにAPIが実行されることがあります。
こういったサービス間のAPI実行履歴も記録されます。
必ずしもユーザー操作のみが記録されるという訳ではない。ということは覚えておきましょう。
ここまででなんとなくCloudTrailが何をするサービスなのか理解できたかと思います。
イベント記録方法
CloudTrailではイベントの記録方法にもいくつか種類があります。
CloudTrailに記録
まずはデフォルトで有効化されているCloudTrail内に記録する方法です。
これは先ほども説明した通り、CloudTrailのコンソール画面のイベント履歴に記録されるイベントです。
後ほど説明しますが、このイベントを管理イベントと呼びます。
保管期間は90日間で、サクッとコンソール画面からイベントを検索したい場合に便利なイベントです。
しかし、ログの保管期間要件で90日以上保管しなければならないというケースも多いでしょう。
そんな時はどうすればいいのでしょうか?次の証跡を使います。
証跡
証跡は特定のS3バケットにCloudTrailのイベント履歴を出力できる機能です。
CloudTrailのコンソール画面だと証跡です。
保存先はS3なので、S3側でデータの保管期間を設定することができます。
監査要件で長期間保管する場合はこちらの証跡が便利ですね。
管理イベントと証跡を別々に書いているのは、証跡を取得した場合も管理イベントはCloudTrailに、証跡はS3に取得されるので別々に記載しています。
証跡のデメリットは、S3にデータが保管されるのでそのデータを調査するためにはAmazon Athenaなどを利用する必要があります。
CloudTrailのコンソール画面から検索することに比べると少し手間とコストがかかります。
また、証跡は複数作成することも可能です。
各リージョンで最初の管理イベントのコピーは無料です。
つまり、上の図の状態は無料です。
しかし、同じ管理イベントを複数の宛先に配信する場合には追加のコストが発生します。
そもそも同じ管理イベントを複数取得することなんてあるのか?と思われるかもしれませんが、
- 監査用
- CloudWatchアラームを設定し、特定のAPIの通知用
のように異なる目的で証跡を設定することもあります。
このように複数の証跡を作成する場合はコストにも注意が必要です。
どんなイベントがあるの?
では、イベントの取得方法は分かりましたが、イベントにはどのような種類があるのでしょうか?
イベントといってもいくつか種類があります。
私は最初、このイベントが複数あるという点がよく分かりませんでした。
それぞれどんなイベントなのか見ていきましょう。
管理イベント
まずは管理イベントです。
管理イベントは最も基本的なイベントで、CloudTrailを有効化すると自動的に取得されるイベントです。
これまでも記載したEC2の起動やS3バケットの一覧表示などです。
CloudTrailのコンソール画面のイベント履歴から閲覧できるイベントです。
また、管理イベントではAPIが実行されないイベントも取得します。
例えばアカウントにサインインした際のConsoleLogin
イベントはAPIが実行されないイベントです。
無料で便利な管理イベントですが、全てのイベントを取得できる訳ではありません。
サービスによっては管理イベントでは詳細なイベントが出力されないことがあります。
そんなイベントを取得するには次のデータイベントを取得します。
データイベント
データイベントはより詳細なイベントです。
データイベントを取得するには、先ほど紹介した証跡を作成する必要があります。
イメージとしてはこんな感じですね。
図では証跡の管理イベントとデータイベントを別々に記載していますが、同時に1つのS3バケットに出力することもできます。
また、データイベントは管理イベントと違い、1つ目の証跡からコストが発生します。
では具体的にデータイベントにはどのような操作が含まれるのでしょうか?
いくつか例を書きます。
- S3バケット内のオブジェクトに対するオブジェクトレベルの操作 (例: GetObject、DeleteObject、PutObject)
- AWS Lambda関数の実行操作 (例: InvokeAPI)
- Amazon DynamoDBのアイテムレベルの操作(例: PutItem、DeleteItem、UpdateItem)
なんとなく共通点が見えてきましたか・・・?
これらのイベントはシステムによっては膨大な数のイベントになるという共通点があります。
例えば、Webサイトに大量の静的ファイルが埋め込まれていて、その全てをS3に保存している場合、ページを開くたびに大量の静的ファイルに対するAPIが実行されます。
つまり大量のAPI実行履歴がCloudTrailに記録されることになります。
その結果、データイベントのコストとイベント保管先のS3の保管料金も嵩みます。
データイベントを取得することで、より詳細なイベントを記録できますが、使い所を見極めて利用することが重要です。
データイベントの使い所としては、
管理イベントだけでは足りないよ!ウチはS3で重要なデータを扱っているからS3のオブジェクトレベルの操作までイベントを取得したいんだよ!というようなケースです。
注意点として、データイベントはイベント履歴には表示されません。
データイベントは証跡でしか取得することができないため、イベント履歴を閲覧するには一手間が必要になります。
そのほかにInsights イベント、ネットワークアクティビティイベントがありますが、管理イベントやデータイベントと比較して利用頻度が少ないためこの記事では割愛します。
まとめ
いかがでしたでしょうか?
CloudTrail全くわからん!から、ちょっとわかる!になってもらえたら嬉しいです。
CloudTrailはAWSを利用する上で必須といってもよいサービスです。
イベントがJSON形式で書かれているため、最初は少し調査に手こずるかもしれませんが、慣れてくれば必要な部分のみ見れるようになると思います。
ぜひこれを機にCloudTrailと仲良くなってみてください!