GCP Cloud SQL PostgreSQLのlog_planner_stats無効化について

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

ポリシーの説明
Cloud SQLのPostgreSQLインスタンスにおける「log_planner_stats」パラメータは、クエリプランナーの内部統計情報をログに出力する機能を制御します。このパラメータはデバッグ目的で使用されることがありますが、本番環境では無効化することが推奨されます。デフォルト値は「off」で、これにより通常のデータベース運用では不要な詳細なプランナー統計情報の出力を防ぎ、システムリソースの効率的な利用とログの肥大化防止を実現します。
関連する統計フラグの関係性
PostgreSQLには以下の4つの統計ログフラグが存在します:
log_planner_stats
: プランナーの統計情報log_parser_stats
: パーサーの統計情報log_executor_stats
: エグゼキューターの統計情報log_statement_stats
: 上記3つを統合した統計情報
重要: log_statement_stats
が有効な場合、他の3つの個別統計フラグは使用できません。
なぜ危険なのか?
log_planner_statsパラメータが有効化されている場合、以下のリスクと運用上の問題が発生する可能性があります:
- パフォーマンスの大幅な低下: プランナー統計の収集と出力により、各クエリの実行時にオーバーヘッドが発生し、データベース全体のパフォーマンスが著しく低下する可能性があります。
- ログストレージの枯渇: 大量の統計情報がログに記録されることで、ログファイルが急速に肥大化し、ストレージ容量を圧迫する可能性があります。
- 機密情報の漏洩リスク: プランナー統計にはクエリの詳細な実行計画が含まれるため、データベースの内部構造やアクセスパターンが露出し、攻撃者に有用な情報を提供する可能性があります。
修復方法
コンソールでの修復手順
Google Cloud コンソールを使用して、log_planner_statsパラメータを無効化します。
- Google Cloud Consoleにログイン
- Cloud SQLインスタンスページに移動します
- 対象のPostgreSQLインスタンスを選択
- 設定を変更したいPostgreSQLインスタンスをクリックします
- インスタンスの編集画面を開く
- インスタンス詳細ページで「編集」ボタンをクリックします
- フラグセクションまでスクロール
- 設定画面を下にスクロールし、「フラグ」セクションを見つけます
- log_planner_statsフラグを確認
- 「データベースフラグ」に「log_planner_stats」エントリがあるか確認します
- 存在する場合は、その値が「on」になっているはずです
- フラグを削除または無効化
- オプション1: フラグエントリの横にある削除/ゴミ箱アイコンをクリックして削除します
- オプション2: 値を「off」に変更します
- 関連する統計フラグも確認
- 同様に以下のフラグも無効化することを推奨します:
log_parser_stats
: 「off」に設定log_executor_stats
: 「off」に設定log_statement_stats
: 「off」に設定
- 同様に以下のフラグも無効化することを推奨します:
- 変更を保存
- ページ下部の「保存」ボタンをクリックして変更を適用します
- 注意: インスタンスが一時的に再起動される場合がありま
- 設定の確認
- インスタンスの概要ページに戻り、「データベースフラグ」セクションで設定が正しく適用されていることを確認します
Terraformでの修復手順
Cloud SQL PostgreSQLインスタンスのlog_planner_statsパラメータを無効化するTerraformコードと、主要な修正ポイントを説明します。
# Cloud SQL PostgreSQLインスタンスの設定
resource "google_sql_database_instance" "postgresql_optimized" {
>>>>>>> skip
settings {
# プランナー統計ログを明示的に無効化
database_flags {
name = "log_planner_stats"
value = "off" # 重要: 本番環境では必ず無効化
}
}
}
ベストプラクティス
パフォーマンス監視の代替手法
統計ログを無効化しても、以下の方法でパフォーマンス監視を実現できます:
- Query Insights: Cloud SQLの組み込み機能でクエリパフォーマンスを監視
- pg_stat_statements: クエリ統計情報を収集する拡張機能
- Cloud Monitoring: メトリクスとアラートで異常を検知
修復確認の方法
- コンソールでの確認
- Cloud SQLインスタンスの詳細ページ → 「設定」タブ → 「データベースフラグ」セクションで確認
- gcloud CLIでの確認
# フラグが正しく設定されているか確認 gcloud sql instances describe INSTANCE_NAME \ --format="value(settings.databaseFlags[?name=='log_planner_stats'].value)" # 出力が空または「off」であることを確認
- PostgreSQL内部での確認
-- Cloud SQL Proxyまたはプライベート接続経由で接続後 SHOW log_planner_stats; -- 結果が 'off' であることを確認 -- 全ての統計フラグを一度に確認 SELECT name, setting FROM pg_settings WHERE name IN ('log_planner_stats', 'log_parser_stats', 'log_executor_stats', 'log_statement_stats');
最後に
この記事では、GCP Cloud SQLのPostgreSQLインスタンスでlog_planner_statsパラメータが有効化されている問題について、リスクと対策を解説しました。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。