はじめに
Amazon RDS for PostgreSQLの監査ログをCloudWatch Logsに出力します。
RDSのクラスターパラメータグループに設定を変更後、DBにログインしてSQLコマンドを実行します。
クラスターパラメータグループの変更項目
項目 | 値 | 詳細 |
---|---|---|
pgaudit.log | 'all, -misc' | 「all」から「vacuum等のメンテナンスの処理」のみを除外する設定 |
pgaudit.log_catalog | 0 | catalogテーブルへのアクセスをログと残すかどうか指定できます。これを有効としておくと、psqlやPgAdminでのアクセスが発生した都度に、ノイズなログがかなり出力されることになるので、無効(0)としておく。 |
pgaudit.log_level | log | 出力されるログレベルを指定 |
pgaudit.log_parameter | 1 | SQL内で変数を利用された場合、その変数に代入された値までロギングしてくれる設定 |
pgaudit.log_relation | 1 | 操作した対象のオブジェクト名を分かりやすく出力させてくれる設定 |
pgaudit.log_statement_once | 1 | Session Audit LoggingとObject Auditingを併用時、同じSQLログを複数回出力させない設定です。複数回出てくるのは煩わしいので、有効(1)としておく。 |
pgaudit.role | rds_pgaudit | AWSの場合、この値は rds_pgaudit 限定となる |
shared_preload_libraries | pg_stat_statements, pg_hint_plan, pgaudit |
pgAuditのライブラリを、共有メモリにロードするための設定 |
SQL
SQL
CREATE ROLE rds_pgaudit;
SHOW shared_preload_libraries;
CREATE EXTENSION pgaudit;
SHOW pgaudit.role;
手順
1. RDSのパラメータグループを作成するCloudFormationのテンプレートの一部
テンプレート.yml
Type: AWS::RDS::DBParameterGroup
Properties:
Parameters:
timezone: Asia/Tokyo
pgaudit.role: rds_pgaudit
shared_preload_libraries: pgaudit
pgaudit.log_level: log
pgaudit.log: 'all, -misc'
このパラメータグループをRDSにアタッチします。
2. SQLのシェルスクリプト
スクリプト
SSH_HOST=[踏み台サーバーのIPアドレス]
BASTION_SSHKEY=[踏み台サーバーの秘密鍵のパス]
BASTION_SSHUSER=[踏み台サーバーのユーザー]
DB_HOST=[DBのエンドポイント]
DB_NAME=[DB名]
DB_USER=[DBのユーザー名]
DB_PASSWORD=[DBのパスワード]
DBRESULT=`ssh -T -l ${BASTION_SSHUSER} -i ${BASTION_SSHKEY} ${SSH_HOST} <<EOC
export PGPASSWORD=${DB_PASSWORD}
psql -U ${DB_USER} -d ${DB_NAME} -h ${DB_HOST} << EOF
SHOW shared_preload_libraries;
SHOW pgaudit.role;
CREATE EXTENSION pgaudit;
EOF
exit $?
EOC
`
echo ${DBRESULT}
参考
PostgreSQL を実行している Amazon RDS DB インスタンスを pgaudit 拡張機能を使用して監査するにはどうすればよいですか?