Amazon Redshiftでデータベース監査ログをS3に出力する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

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に設定します。

screenshot 2015-02-08 17.21.18

監査ログを有効にする

Redshiftの監査ログを有効にしてみましょう。cliコマンドでサクッと新規作成したかったのですが、S3バケットにIAMポリシーを程よく設定してくれなかったので、画面からやってみました。こちらは簡単です。監査ログを有効にして新規のS3バケット名を指定するだけです。

screenshot 2015-02-08 18.55.21

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形式になっていますね。

screenshot 2015-02-08 19.33.45

まとめ

Redshiftから収集できるログについて調べてみました。監査ログは、データベースに対する操作のログです。CloudTrailは、Redshift APIに対する操作のログです。ということでスッキリしましたー。

参考資料

Amazon Redshift 管理ガイド データベース監査ログ作成