Cloud SQL PostgreSQLインスタンスでlog_parser_statsパラメータの無効化について

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、 「どうやって直すのか?」 という具体的な修復手順(コンソール、Google Cloud CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、Cloud SQL PostgreSQLインスタンスのパーサー統計ログ無効化手順について、リスクと対策を解説します。

ポリシーの説明
Cloud SQLのPostgreSQLインスタンスでlog_parser_statsパラメータが有効になっていると、SQLステートメントのパース(構文解析)に関する詳細な統計情報がログに記録されます。
このパラメータは、SQLステートメントの構文解析にかかった時間、使用されたメモリ、構文解析ルールの適用回数などの統計情報を出力します。デフォルト値は「off」で、本番環境では無効化された状態を維持することが強く推奨されます。
リスク
- パフォーマンスへの影響: パーサー統計情報を記録することで、各SQLステートメントの実行時に追加のオーバーヘッドが発生します。高頻度でクエリが実行される環境では、クエリのレスポンス時間が数ミリ秒から数十ミリ秒増加し、全体的なスループットが低下する可能性があります。
- ログストレージの圧迫: 詳細な統計情報が継続的に記録されることで、ログファイルのサイズが急速に増大します。アクティブなシステムでは大量の追加ログが生成され、Cloud Loggingのストレージコストとログの取り込みコストが大幅に増加する可能性があります。
- 統計フラグの競合: log_parser_statsはlog_statement_statsと同時に有効化できません。両方を有効化しようとするとPostgreSQLインスタンスの起動に失敗し、サービス停止を引き起こす可能性があります。
修復方法
コンソールでの修復手順
Google Cloud コンソールを使用して、Cloud SQL PostgreSQLインスタンスのlog_parser_statsパラメータを無効化します。
- Google Cloud Consoleにログイン
- Cloud SQLインスタンスページに移動します
- 対象のPostgreSQLインスタンスを選択
- 設定を変更したいPostgreSQLインスタンスをクリックします
- インスタンスの編集画面を開く
- インスタンス詳細ページで「編集」ボタンをクリックします
- フラグセクションまでスクロール
- 設定画面を下にスクロールし、「フラグ」セクションを見つけます
- log_parser_statsフラグの確認と変更
- 「データベースフラグ」に「log_parser_stats」エントリがあるか確認します
- 「on」になっている場合は、ドロップダウンから「off」を選択します
- フラグが存在しない場合は、デフォルトで無効になっているため対応不要です
- 関連する統計フラグの確認
- 以下のフラグも同様に「off」に設定されていることを確認します:
log_planner_stats
log_executor_stats
log_statement_stats
- 以下のフラグも同様に「off」に設定されていることを確認します:
- 変更の保存と適用
- ページ下部の「保存」ボタンをクリックします
- 「変更を保存しますか?」という確認ダイアログが表示されたら、「保存」をクリックします
- インスタンスが再起動され、新しい設定が適用されます(数分かかる場合があります)
Terraformでの修復手順
Cloud SQL PostgreSQLインスタンスのlog_parser_statsを無効化するTerraformコードと、主要な修正ポイントを説明します。
resource "google_sql_database_instance" "postgresql" {
>>> Skip
settings {
# データベースフラグの設定
database_flags {
name = "log_parser_stats"
value = "off"
}
}
}
ベストプラクティス
統計フラグの互換性に注意する
log_parser_stats
、log_planner_stats
、log_executor_stats
はlog_statement_stats
と同時に有効化できません- これらのフラグはすべて無効化することを推奨します(デフォルト値: off)
- フラグを有効化しようとした際にエラーが発生する場合は、競合するフラグが有効化されていないか確認してください。
代替のパフォーマンス監視方法
- Query Insights: Cloud SQLの標準機能でクエリパフォーマンスを可視化(オーバーヘッドが最小)
- 有効化:
insights_config { query_insights_enabled = true }
- メリット: リアルタイム分析、統合されたUI、低オーバーヘッド
- 有効化:
- pg_stat_statements: クエリ統計を収集するPostgreSQL拡張(軽量で実用的)
- 有効化:
shared_preload_libraries='pg_stat_statements'
- メリット: 標準的なPostgreSQL機能、詳細な統計情報
- 有効化:
- Cloud Monitoring: CPU、メモリ、ディスクI/Oのメトリクスを監視
- 自動的に有効化済み
- メリット: インフラレベルの包括的な監視
- auto_explain: 特定の遅いクエリのみ実行計画をログに出力
- 設定例:
auto_explain.log_min_duration = '1s'
- メリット: 問題のあるクエリのみをターゲット
- 設定例:
環境別の推奨設定
- 開発環境/ステージング環境:
- デバッグ時のみ一時的に有効化する
- 使用後は必ず無効化
- EXPLAIN (ANALYZE, BUFFERS) の使用を推奨
- 設定例:
log_parser_stats=off
(通常時)
- 本番環境:
- 無効化を維持する
- Query Insightsをメインに使用
- 重要なパフォーマンス問題はステージング環境で再現
- 設定例:
log_parser_stats=off
,query_insights_enabled=true
,pg_stat_statements.track=all
最後に
この記事では、Cloud SQL PostgreSQLインスタンスのパーサー統計ログ無効化手順について、リスクと対策を解説しました。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。