Cloud SQLインスタンスのSSL証明書定期ローテーションについて

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

ポリシーの説明
Cloud SQLインスタンスのSSL/TLS証明書は、クライアントとデータベース間の通信を暗号化し、中間者攻撃(MITM)やデータの盗聴から保護するために使用されます。Cloud SQLでは、サーバー証明書とクライアント証明書の両方をサポートしており、これらの証明書には有効期限があります。
証明書を長期間使用し続けると、以下のリスクが発生します:
- 証明書の秘密鍵が漏洩した場合の影響期間が長期化
- 暗号化アルゴリズムの脆弱性が発見された場合の露出期間が延長
- 証明書の有効期限切れによる予期せぬサービス停止
Google Cloudでは、サーバー証明書は10年間有効ですが、セキュリティベストプラクティスとして、より短い周期(90日〜1年)でのローテーションが推奨されています。
リスク
- 証明書の秘密鍵漏洩リスク: 長期間同じ証明書を使用していると、秘密鍵が漏洩した際の影響期間が長くなり、過去の通信内容も復号される可能性があります(Forward Secrecyが実装されていない場合)
- 暗号強度の低下: 時間の経過とともに暗号化アルゴリズムの脆弱性が発見される可能性があり、古い証明書は新しい攻撃手法に対して脆弱になります
- コンプライアンス違反: PCI DSS 4.0(要件4.2.1)、SOC 2、ISO 27001などの多くのセキュリティ規格では、証明書の定期的な更新と適切な暗号化強度の維持が要求されています
一方で運用リスクが高まる事は見過ごせないと考えます。手動で運用する場合には証明書の有効期限切れによるサービス停止や、緊急時の更新作業による予期せぬダウンタイムのリスクが高まることも事実です。
また、アプリケーション側での処理も工夫が必要です。
定期的なローテーションを行うのであれば、Secret Managerなどを利用し、自動更新の仕組みを取り入れる必要があると考えられます。
修復方法
前提条件の確認
修復を行う前に、以下を確認してください:
- 現在使用中のクライアント証明書とその利用箇所
- アプリケーションの証明書更新プロセス
- 証明書の配布方法(Secret Manager、構成管理ツールなど)
コンソールでの修復手順
- Google Cloud Consoleにアクセス
- Cloud Consoleにログイン
- ナビゲーションメニューから「SQL」を選択
- 対象のインスタンスを選択
- Cloud SQLインスタンスの一覧から、証明書を更新したいインスタンス名をクリック
- インスタンスの詳細画面が表示されることを確認
- 接続設定の確認
- 左側のメニューから「接続」を選択
- 「セキュリティ」セクションで現在のSSL設定を確認
- 「SSL接続のみを許可」が有効になっていることを確認(無効の場合は有効化)
- サーバー証明書の確認とローテーション
- 「接続」ページの「SSL」タブを選択
- 現在のサーバー証明書の有効期限を確認
- 必要に応じて「サーバー証明書をローテーション」をクリック
- 確認ダイアログで「ローテーション」をクリック
- ローテーションが完了するまで待機(数分程度)
- クライアント証明書の作成
- 「SSL」タブの「クライアント証明書」セクションで「証明書を作成」をクリック
- 証明書の名前を入力(例:client-cert-2024-01-15)
- 「作成」をクリック
- 証明書作成ダイアログが表示されたら、以下をダウンロード:
- クライアント証明書(client-cert.pem)
- クライアント秘密鍵(client-key.pem)
- サーバーCA証明書(server-ca.pem)
- 証明書の有効期限確認
- 作成された証明書の一覧で、各証明書の作成日と有効期限を確認
- 有効期限をカレンダーに記録し、次回のローテーション時期を計画
- 古い証明書の削除スケジュール設定
- 新しい証明書での接続が安定していることを確認後(1-2週間後)
- 古い証明書を選択し、「削除」ボタンをクリック
- 削除の確認ダイアログで証明書名を入力して削除
ベストプラクティス
- 証明書ローテーションの自動化
- 90日ごとの自動ローテーションを設定
- Secret Managerを使用した証明書の一元管理
- Cloud Functionsによる自動化プロセス
- 監視とアラート
- 証明書有効期限の30日前と7日前にアラート
- ローテーション実行の成功/失敗を監視
- 証明書使用状況のダッシュボード作成
- アプリケーション側の対応
- 証明書の自動リロード機能の実装
- 複数の証明書を並行して使用できる設計
- グレースフルな証明書切り替え
- セキュリティ強化
- TLS 1.2以上の使用を強制
- 強力な暗号スイートのみを許可
- 証明書へのアクセスを最小権限で管理
- 運用プロセス
- 証明書ローテーションの手順書作成
- 定期的な訓練とテスト
- インシデント対応計画の策定
まとめ
Cloud SQLインスタンスのSSL証明書の定期的なローテーションは、データベース通信のセキュリティを維持するために不可欠です。
重要なポイント:
- 90日ごとの証明書ローテーションを推奨
- Secret Managerによる証明書の安全な管理
- 自動化による運用負荷の軽減
- 有効期限の監視とアラート設定
一方で自動化されたローテーションプロセスが必要となります。本内容については出来ればもちろんより良い内容ではありますが、運用上大きな負荷がかかる内容であるとも言えるため、自社に求められるセキュリティレベルを考慮した上で導入可否を決めるようにしましょう。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。