Amazon Redshiftでデータベース監査ログをS3に出力する
Amazon Redshiftのログについて
Redshiftを使っていて、何か問題や課題が発生した際にログを見て分析することがあります。その際に、どこにどんなログが出力されているか気になりますよね。Redshiftでは2つのログに対応しています。監査ログとCloudTrailです。今回のオチとしては、監査ログとCloudTrailの理解がごっちゃになっていたので別物ですよーという確認のため書きました。
監査ログ
Amazon Redshiftは、監査ログとして以下の情報をS3に記録します。
- 接続ログ — 認証の試みと、接続および切断を記録します。
- ユーザーログ — データベースのユーザー定義への変更に関する情報を記録します。
- ユーザーアクティビティログ — データベースで実行される前に各クエリを記録します。
CloudTrail
Amazon Redshiftは、CloudTrailから以下の情報をS3に記録します。
- API操作ログ - Redshiftが提供しているAPIの操作に関する情報を記録します。
ユーザーアクティビティログを収集する
Redshift利用者がどのようなSQLを発行したか見たい時には、Amazon Redshift パラメータグループのenable_user_activity_loggingをtrueに設定します。
監査ログを有効にする
Redshiftの監査ログを有効にしてみましょう。cliコマンドでサクッと新規作成したかったのですが、S3バケットにIAMポリシーを程よく設定してくれなかったので、画面からやってみました。こちらは簡単です。監査ログを有効にして新規のS3バケット名を指定するだけです。
cliで現在の状態を確認してみます。
$ aws redshift enable-logging --cluster-identifier cm-satoshi --bucket-name redshift-tokyo-auditlog-cmyokota redshift-tokyo-auditlog-cmyokota True
実際にログが出力されているか確認してみます。1時間程度待ってみましょう。実行したSQLについて情報が取得できるようになります。以下のようにテーブル定義が出力されています。監査ログから出力される形式はベタなテキストになっていますね。
'2015-02-08T08:51:00Z UTC [ db=cmdb user=awsuser pid=3492 userid=100 xid=2071 ]' LOG: CREATE TABLE cm_research.redshift_test2 ( id CHAR(5) NOT NULL encode lzo, name VARCHAR(30) NOT NULL encode lzo, quantity INT NOT NULL encode mostly16, date DATE NOT NULL encode delta, PRIMARY KEY(id)) distkey(id) sortkey(date,id)
ユーザーアクティビティログも見つかりました。
'2015-02-08T08:51:15Z UTC [ db=cmdb user=awsuser pid=3492 userid=100 xid=2078 ]' LOG: select * from cm_research.redshift_test
CloudTrailで見える情報
CloudTrailで収集できるログのサンプルです。CloudTrailから出力されるログはJSON形式になっていますね。
まとめ
Redshiftから収集できるログについて調べてみました。監査ログは、データベースに対する操作のログです。CloudTrailは、Redshift APIに対する操作のログです。ということでスッキリしましたー。