CloudTrailの証跡機能にだいぶ詳しくなったのでまとめる
CloudTrailの証跡機能にだいぶ詳しくなったので、個人的なまとめです。
CloudTrailの概要
CloudTrailはアカウントの操作ログを記録し、ログを Amazon S3 バケットに送信することができます。
90日分の管理イベントを無料で保存、検索することが可能です。
証跡の作成により、管理イベントを、S3などにエクスポートすることができます。
また、オプションでデータイベントとCloudTrail Insightsも保存することができます。
各々のログの概要と料金は下記のようになります。
種類 | 概要 | 料金 |
管理イベント | AWSアカウントの操作履歴 | イベント 10 万件あたり 2.00USD(証跡一つ目は無料) |
データイベント | Amazon S3 オブジェクトレベルの API 呼び出し、Lambda 関数の実行履歴 | イベント 10 万件あたり 0.10USD |
CloudTrail Insights | AWS アカウントの異常な操作履歴 | 100,000 の書き込み管理イベントごとに 0.35USD |
管理イベントは一つ目が無料なため、とりあえず、管理イベントのみ保存して、データイベントとCloudTrail Insightsは要件によって保存する場合が多いかと思います。
ログは、デフォルトで以下のプレフィクスに保存されます。
S3バケット名/AWSLogs/アカウントID/
オプションでAWSLogsの前にプレフィクスを追加することも可能です。
この場所には以下の2種のデータが作成されます。
- CloudTrailログ
CloudTrailの階層が掘られ、そのさらに下に、リージョン/YY/mm/dd/にjson.gzで保存されます。
https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-log-file-examples.html
- ダイジェストファイル
CloudTrail-Digest配下に作成される。ログファイルの名前、これらのログファイルのハッシュ値、前のダイジェストファイルのデジタル署名が含まれます。
https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-log-file-validation-digest-file-structure.html
CloudTrailログの例
レコードの項目は全て公式ドキュメントに記載されています。
CloudTrail レコードの内容 - AWS CloudTrail
具体的には以下のようなログが出力されます。
#From https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-log-file-examples.html {"Records": [{ "eventVersion": "1.0", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2014-03-24T21:11:59Z", "eventSource": "iam.amazonaws.com", "eventName": "CreateUser", "awsRegion": "us-east-2", "sourceIPAddress": "127.0.0.1", "userAgent": "aws-cli/1.3.2 Python/2.7.5 Windows/7", "requestParameters": {"userName": "Bob"}, "responseElements": {"user": { "createDate": "Mar 24, 2014 9:11:59 PM", "userName": "Bob", "arn": "arn:aws:iam::123456789012:user/Bob", "path": "/", "userId": "EXAMPLEUSERID" }} }]}
CloudTrailログの検索
Athenaを使ってクエリをかけることも可能です。
テーブルは以下のクエリで作成できます。
#From https://docs.aws.amazon.com/ja_jp/athena/latest/ug/cloudtrail-logs.html CREATE EXTERNAL TABLE cloudtrail_logs ( eventversion STRING, useridentity STRUCT< type:STRING, principalid:STRING, arn:STRING, accountid:STRING, invokedby:STRING, accesskeyid:STRING, userName:STRING, sessioncontext:STRUCT< attributes:STRUCT< mfaauthenticated:STRING, creationdate:STRING>, sessionissuer:STRUCT< type:STRING, principalId:STRING, arn:STRING, accountId:STRING, userName:STRING>>>, eventtime STRING, eventsource STRING, eventname STRING, awsregion STRING, sourceipaddress STRING, useragent STRING, errorcode STRING, errormessage STRING, requestparameters STRING, responseelements STRING, additionaleventdata STRING, requestid STRING, eventid STRING, resources ARRAY<STRUCT< ARN:STRING, accountId:STRING, type:STRING>>, eventtype STRING, apiversion STRING, readonly STRING, recipientaccountid STRING, serviceeventdetails STRING, sharedeventid STRING, vpcendpointid STRING ) PARTITIONED BY (region string, year string, month string, day string) ROW FORMAT SERDE 'com.amazon.emr.hive.serde.CloudTrailSerde' STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://CloudTrail_bucket_name/AWSLogs/Account_ID/CloudTrail/';
パーティションはリージョン・年・月・日で設定することを推奨されています。
リージョンは、CloudTrailの証跡設定作成時に、全リージョンで作成することを指定しなければ、証跡を設定したリージョンのみになります。
後から設定するのは面倒臭いので、とりあえずリージョンもパーティションに含めておくと良さそうです。
注意点としては、CloudTrail証跡は現状、以下のプレフィクスで出力されるため、
MSCK REPAIR TABLE でパーティションデータを自動的に追加できません。
S3バケット/AWSLogs/アカウントID/CloudTrail/リージョン/YY/mm/dd/
そのため、バッチ処理などでADD PARTITIONでパーティションを追加する必要があります。
Athenaのクエリだと以下のようになります。
ALTER TABLE [テーブル名] ADD PARTITION (region='[リージョン]',year='[設定値]',month='[設定値]',day='[設定値]') location 's3://[バケット]/[プレフィックス]/';
バッチ処理での実行方法は、Lambda・Fargate・Glueなどいろいろな方法があります。lambdaでの実行方法は、以下のサイトが参考になります。
dev.classmethod.jp
ログの記録をOFFにした時
ログの記録をOFFにすると、当然ですがログの保存は中止されます。
ONにしても、OFFにしていた間のログは勝手には配信されません。
ログの記録のON/OFFは、[CloudTrai]l >[ 証跡情報] > (各証跡の)設定 から行えます。
配信エラーになった時
こちらにまとめがあるので参考にしてください。
tasotasoso.hatenablog.com