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パラメータが有効化されている場合、以下のリスクと運用上の問題が発生する可能性があります:

  1. パフォーマンスの大幅な低下: プランナー統計の収集と出力により、各クエリの実行時にオーバーヘッドが発生し、データベース全体のパフォーマンスが著しく低下する可能性があります。
  2. ログストレージの枯渇: 大量の統計情報がログに記録されることで、ログファイルが急速に肥大化し、ストレージ容量を圧迫する可能性があります。
  3. 機密情報の漏洩リスク: プランナー統計にはクエリの詳細な実行計画が含まれるため、データベースの内部構造やアクセスパターンが露出し、攻撃者に有用な情報を提供する可能性があります。

修復方法

コンソールでの修復手順

Google Cloud コンソールを使用して、log_planner_statsパラメータを無効化します。

  1. Google Cloud Consoleにログイン
  2. 対象のPostgreSQLインスタンスを選択
    • 設定を変更したいPostgreSQLインスタンスをクリックします
  3. インスタンスの編集画面を開く
    • インスタンス詳細ページで「編集」ボタンをクリックします
  4. フラグセクションまでスクロール
    • 設定画面を下にスクロールし、「フラグ」セクションを見つけます
  5. log_planner_statsフラグを確認
    • 「データベースフラグ」に「log_planner_stats」エントリがあるか確認します
    • 存在する場合は、その値が「on」になっているはずです
  6. フラグを削除または無効化
    • オプション1: フラグエントリの横にある削除/ゴミ箱アイコンをクリックして削除します
    • オプション2: 値を「off」に変更します
  7. 関連する統計フラグも確認
    • 同様に以下のフラグも無効化することを推奨します:
      • log_parser_stats: 「off」に設定
      • log_executor_stats: 「off」に設定
      • log_statement_stats: 「off」に設定
  8. 変更を保存
    • ページ下部の「保存」ボタンをクリックして変更を適用します
    • 注意: インスタンスが一時的に再起動される場合がありま
  9. 設定の確認
    • インスタンスの概要ページに戻り、「データベースフラグ」セクションで設定が正しく適用されていることを確認します

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"  # 重要: 本番環境では必ず無効化
    }
  }
}

 

ベストプラクティス

パフォーマンス監視の代替手法

統計ログを無効化しても、以下の方法でパフォーマンス監視を実現できます:

  1. Query Insights: Cloud SQLの組み込み機能でクエリパフォーマンスを監視
  2. pg_stat_statements: クエリ統計情報を収集する拡張機能
  3. Cloud Monitoring: メトリクスとアラートで異常を検知

修復確認の方法

  1. コンソールでの確認
    • Cloud SQLインスタンスの詳細ページ → 「設定」タブ → 「データベースフラグ」セクションで確認
  2. gcloud CLIでの確認
    # フラグが正しく設定されているか確認
    gcloud sql instances describe INSTANCE_NAME \
      --format="value(settings.databaseFlags[?name=='log_planner_stats'].value)"
    # 出力が空または「off」であることを確認
    

     

  3. 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機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。

参考情報

この記事をシェアする

クラウドセキュリティ対策実践集一覧へ戻る

貴社の利用状況に合わせた見積もりを作成します。

料金プランを詳しく見る