Google Cloud SQL PostgreSQLでロック待機ログ(log_lock_waits)の有効化について

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

ポリシーの説明
log_lock_waitsパラメータは、PostgreSQLデータベースでdeadlock_timeout
パラメータで指定された時間(デフォルト: 1秒)以上ロックを待機したセッションの詳細情報をpostgresql.log
に記録する重要なパフォーマンス監視機能です。
Cloud SQLでは、これらのログはCloud Loggingに自動的に統合され、以下の情報が記録されます:
- ロック待機しているプロセスIDとセッション情報
- ロックを保持しているプロセスの情報
- 待機しているロックの種類とモード
- 待機時間と実行中のSQL文
リスクの詳細
log_lock_waitsパラメータが無効化されている場合、パフォーマンス監視がしにくくなります。
- ロック競合の検出不能: トランザクション間のロック競合を特定できず、アプリケーションの応答時間が劣化
- デッドロックの見逃し: 複数のトランザクションが相互にロックを待つデッドロック状態を早期発見できない
- ボトルネックの特定困難: システム全体のパフォーマンスを低下させるロック待機のホットスポットを特定できない
修復方法
前提条件
- Cloud SQL Admin役割(
roles/cloudsql.admin
)または同等の権限 - 対象のCloud SQL PostgreSQLインスタンスへのアクセス権
- インスタンスの再起動は不要(オンラインで設定変更可能)
コンソールでの修復手順
Google Cloud コンソールを使用した修復方法:
- Google Cloud Consoleにアクセスし、ナビゲーションメニューから「SQL」を選択

- 対象のPostgreSQLインスタンスをクリック

- 「構成の編集」ボタンをクリック

- 「フラグとパラメータ」セクションまでスクロールし、以下のフラグを設定する
- フラグ:
log_lock_waits
値:on

- 必要に応じて以下のフラグも追加(推奨):
deadlock_timeout
:1s
(デフォルト値、必要に応じて調整)log_checkpoints
:on
log_connections
:on
- 「保存」をクリックして変更を適用
Terraformでの修復手順
Infrastructure as Codeを使用した本番環境向けの包括的な実装例です。
resource "google_sql_database_instance" "postgresql" {
>>> skip
settings {
# ロック待機ログの有効化(必須)
database_flags {
name = "log_lock_waits"
value = "on"
}
}
}
まとめ
この記事では、Google Cloud SQL PostgreSQLインスタンスでlog_lock_waitsパラメータを有効化する包括的な方法を解説しました。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。