自由気ままに書いちゃおう

好きなことをつらつらと・・・

【AWS】CloudTrailについて

今回は、CloudTrailについてです。

■はじめに

AWSの操作は、ほぼすべてAPIを通じて提供されています。
そのため、APIを記録することで、
「いつ」「どこで」「誰が」「何を」「どのように」「実行結果」を把握することができます。

■CloudTrailとは?

AWS操作で利用されるAPIを記録するAWSサービスです。
もう少しかみ砕くと、

① ルートアカウント、IAMユーザの操作を記録/追跡するサービスです。

② 記録対象のイベントには2種類あります。
  ・管理イベント
  ・データイベント

③ デフォルトで管理イベントの取得は有効になっており、90日間分のデータがS3に保存されています。(無料です)

④ デフォルトではデータイベントの取得は無効になっており、記録するには設定が必要です。

⑤ 90日以上のデータを保持したい場合には、別途操作が必要です。(有料です。)

■管理イベントについて

AWSアカウント内のリソースに対して実行される管理操作(=コントロールプレーン操作)のことです。
デフォルトでは、Cloudtrailは管理イベントをログに記録するように設定されています。

尚、読み取り専用イベントと書き込み専用イベントに区別することもあります。

【読み取り専用イベント】
リソースを読み込んで変更を行わないAPI操作が含まれます。
たとえば、Amazon EC2のDescribeSecurityGroupsとDescribeSubnets API操作が含まれます。これらの操作は、EC2リソースに関する情報を表示しますが、構成を変更することはありません。

【書き込み専用イベント】
リソースを変更する(または変更する可能性のある)API操作が含まれます。
例えば、EC2 RunInstances API操作とTerminateInstances API操作はインスタンスを変更します。

■データイベントについて

データイベントは、リソース上またはリソース内で実行されるリソース操作のことです。データプレーン操作とも言います。
データイベントは多くの場合、大量のアクティビティです。

例)
・Amazon S3 バケット上で PutObject/GetObject/DeleteObject等のAPI
・Lambda関数の実行アクティビティ(Inovoke API)

データイベントはコストが発生するため、
Cloudtrailを作成する際にはデフォルトでは有効になっていません。

■CloudTrailを使うメリット

操作履歴を記録できるため、
・コンプライアンス順守の準拠状態を確認することができます。
・不正防止効果があります。
・不正発生時の追跡が可能になります。
・トラブルシューティング時の操作ログとして活用することができます。

■CloudTrailを使うデメリット

基本的にはないです。
90日間以上のデータ保存の際に、S3の利用料金が発生しますが、メリットを享受できるだけの支出と考えてもらえれば気にならないぐらいです。
※S3の利用料金については後述します。

■S3に保管したデータの利用料について

保管データ容量に応じてS3の料金が発生しますが、
ほとんどの場合、毎月3$未満とのことです。
※ソース:https://aws.amazon.com/jp/cloudtrail/pricing/

■CloudTrailのコンソール画面を見てみる

AWSコンソールでCloudTrailと検索するとサービスが表示されるため、
それをクリックしたところが以下の画面です。

f:id:guri2o1667:20210122095607p:plain

 

■コンソール画面を見てみる(イベント履歴)

左ペインにある「イベント履歴」をクリックした画面は以下です。
※「イベント履歴」は90日間の管理イベントが表示されます。

f:id:guri2o1667:20210122095723p:plain

デフォルトで表示されている列名以外には以下のものがあります。

f:id:guri2o1667:20210122095929p:plain

各列の意味は以下を参照ください。

CloudTrail レコードの内容 - AWS CloudTrail

 

■コンソール画面を見てみる(Insights)

デフォルトは無効です。そのため、初期状態では以下の画面が表示されます。

f:id:guri2o1667:20210122100549p:plain

※Insightsについてはここでは割愛します。

■コンソール画面を見てみる(証跡)

デフォルトは無効です。
イベント履歴は90日間分の管理イベントを保存していますが、
"永続的に保存したい"
"データイベントも保存したい"
場合には、証跡の設定(作成)が必要です。

f:id:guri2o1667:20210122101350p:plain

尚、全リージョンに対してCloudtrailを有効化することが推奨されておりますが、
執筆時点(2021/1/22時点)では、
証跡を作成すると自動的に全リージョンのCloudtrailが有効になります。
そのため、「全リージョンを指定する」という設定はAWS管理コンソールからは不要です。

■証跡の作成

前述の通り、証跡はデフォルトでは作成されておりません。
作成方法を下記します。

1.「証跡の作成」をクリックします。

f:id:guri2o1667:20210122101500p:plain


2.「証跡名」を入力します。
※表示名として使用されるだけのため、任意のものを入力してください。
※ここでは、evi1としました。

f:id:guri2o1667:20210122101853p:plain

3.「ストレージの場所」でどちらかのラジオボタンを選択します。
※ここでは、「新しいS3~」を選択しています。

f:id:guri2o1667:20210122101929p:plain

4.「証跡ログバケットおよびフォルダ」に、任意でバケット名を入力します。
※ここでは、cloudtrail-evi1 としました。
※S3バケットは世界で一意である必要があります。一意かどうかは手順11の実施タイミングまでわかりません。

f:id:guri2o1667:20210122105222p:plain

 

※このバケット名を設定した場合、証跡のログの場所は以下の通りです。

cloudtrail-evi1/AWSLogs/AWSアカウント番号




5.「ログファイルのSSE-KMS暗号化」は「有効」にチェックを入れます。

f:id:guri2o1667:20210122103453p:plain

※CloudTrailのログファイルを暗号化します。Amazon S3-Managed Encryption Keys (SSE-S3)を使用したサーバーサイド暗号化を利用しています。
※KMSでの鍵を利用する必要があるため、次の手順6で鍵情報を設定しています。


6.「AWS KMSカスタマー管理のCMK」で「新規」を選択し、「AWS KMS エイリアス」に適当名前を入力します。
※ここでは、cloudtrail-evi1-kms としました。

f:id:guri2o1667:20210122103716p:plain


7.それ以外の項目はデフォルトのまま、「次へ」をクリックします。

f:id:guri2o1667:20210122103744p:plain


8.「イベントタイプ」で記録したいイベントのチェックボタンにチェックを入れます。
※ここでは、「管理イベント」を選択しました。

f:id:guri2o1667:20210122104723p:plain



9.「管理イベント」の項目で、記録対象であるAPIアクティビティを選択します。
※「読み取り」「書き込み」の両方がチェックの状態で問題ありません。

f:id:guri2o1667:20210122104154p:plain

== 以下は参考までに ==
管理イベントは、AWSアカウント内のリソースに対して実行される管理操作を記述します。これらはコントロールプレーン操作としても知られています。デフォルトでは、トレイルは管理イベントをログに記録するように設定されています。
読み取り専用イベントには、リソースを読み込んで変更を行わないAPI操作が含まれます。たとえば、読み取り専用イベントには、Amazon EC2のDescribeSecurityGroupsとDescribeSubnets API操作が含まれます。これらの操作は、EC2リソースに関する情報を表示しますが、構成を変更することはありません。
書き込み専用イベントには、リソースを変更する(または変更する可能性のある)API操作が含まれます。例えば、EC2 RunInstances API操作とTerminateInstances API操作は、インスタンスを変更します。
APIアクティビティについて、トレイルにAll、Read-only、Write-onlyのイベントを記録するかどうかを選択し、Nextを選択します。デフォルトでは、トレイルはすべての管理イベントをログに記録します。
AWS Key Management Service (AWS KMS) イベントをトレイルでログに記録したくない場合は、Exclude AWS KMS events を選択します。デフォルトでは、すべてのイベントがログに記録されます。
Encrypt、Decrypt、GenerateDataKeyなどのAWS KMSアクションは、通常、大量(99%以上)のイベントを生成します。これらのアクションは、Readイベントとしてログに記録されます。Disable、Delete、ScheduleKeyのようなボリュームの少ない、関連性の高いAWS KMSアクションは、Writeイベントとしてログに記録されます。
Encrypt、Decrypt、GenerateDataKeyなどの大容量のイベントを除外しても、Disable、Delete、ScheduleKeyなどの関連イベントをログに記録するには、Writeのみの管理イベントをログに記録することを選択し、Exclude AWS KMSイベントを選択しないようにします。
=======================

10.「次へ」をクリックします。

f:id:guri2o1667:20210122104757p:plain


11.「確認と作成」画面で内容に間違いないことを確認し、「証跡の作成」をクリックします。

f:id:guri2o1667:20210122105110p:plain
※S3バケット名が一意ではない場合、エラーが画面上部に表示されるため、「編集」ボタンを押して修正してみてください。

12.問題なく証跡を作成できた場合、以下が表示されます。

f:id:guri2o1667:20210122105501p:plain



■補足:作成したS3バケットをみてみる

f:id:guri2o1667:20210122105639p:plain

 

■補足:作成したKMSのCMS鍵をみてみる

f:id:guri2o1667:20210122105737p:plain


以上です。