Redshiftにおいて監査ログを出力する方法

Redshiftにおいても、一般のRDBと同等レベルのAuditLogを取得可能です。その方法について、まとめておきます。基本的にマニュアルの記載をざっくりまとめたものなので、詳細については以下の公式マニュアルを見てみて下さい。

データベース監査ログ作成 - Amazon Redshift

監査ログの種類

Redshitの監査ログは、以下の3種類があります。公式サイトからの引用です。

  • 接続ログ
    • 認証の試みと、接続および切断を記録
  • ユーザーログ
    • データベースのユーザー定義への変更に関する情報を記録
  • ユーザーアクティビティログ
    • データベースで実行される前に各クエリを記録

データベース監査ログ作成 - Amazon Redshift

設定変更方法

Redshiftコンソールにて、対象Redshiftクラスターを選択して、「Database」-「Configure Audit Loggin」と選択します

以下の通り Configure Audit Logging を有効とし、ログ保管先とするs3を指定します

f:id:goodbyegangster:20180705015858p:plain

なお、 ユーザーアクティビティログ を出力せさるためには、この設定のほか、Parameter Groupの値を変更する必要があります

利用しているParameter Groupの enable_user_activity_logging の値を、trueに変更します

f:id:goodbyegangster:20180705015851p:plain

RedshiftにおいてParameter Groupを変更すると、 Parameter Group Apply Status の値が、「applying」->「pending-reboot」と遷移します。

f:id:goodbyegangster:20180705015854p:plain

f:id:goodbyegangster:20180705015856p:plain

この後、Redshift Clusterを再起動することで、パラメータが実際に反映されます。

出力ログについて

監査ログは、設定時に指定したs3パスに、以下のパス構成で出力されることになります。

指定s3Bucke名/KeyPrefix名/AWSLogs/AccountID/ServiceName/Region/Year/Month/Day/AccountID_ServiceName_Region_ClusterName_LogType_Timestamp.gz

操作を実施してから、実際にs3に出力されるには、1時間ほどのタイムラグが発生します。

ログの中身はこんな感じです。

'2018-07-04T15:22:20Z UTC [ db=test user=root pid=20345 userid=100 xid=88200 ]' LOG: create table public.kiritan ( name varchar(300) )
'2018-07-04T15:22:25Z UTC [ db=test user=root pid=20347 userid=100 xid=88209 ]' LOG: INSERT INTO public.kiritan(name) VALUES('zunda');
'2018-07-04T15:22:31Z UTC [ db=test user=root pid=20390 userid=100 xid=88224 ]' LOG: SELECT public.kiritan.name AS name FROM public.kiritan;

Redshiftでは、ユーザ側で何もしていないとしても、内部的にはシステム的はクエリが絶えず実行されているため、それらのログが大量に出力されることになります。ログから有効な情報を取得するには、Athenaであるとか、ElasticSearchやSplunkで検索しないと、もうどうしようもない感じになります。

その他

出力されるログは、Redshiftのシステムテーブルで確認することも可能です。こちらの情報の方が、よりリアルタイムに確認できます。