はじめに
Google Cloudにおいて、Cloud SQLを利用している方は多いでしょう。ただし、設定すべき項目が多いため、正しく設定できているか分からないと感じる方も同様に多いのではないでしょうか。
Google Cloudは、ユーザーがセキュリティ体制を強化するのを支援するために「Recommender」という強力なツール群を提供しています。「Cloud SQL セキュリティ Recommender」は、Cloud SQLインスタンスに潜むセキュリティ上のリスクを自動的に検出し、具体的な改善策を提案してくれる、非常に価値のある機能です。
本記事では、Cloud SQL セキュリティ Recommenderが提示する主要な推奨事項を網羅的に解説し、それらを活用してデータベースのセキュリティをいかに向上させるかについて、具体的な手順とともに説明します。
Cloud SQL セキュリティ Recommenderの確認
Recommenderの各推奨事項の詳細を見る前に、「今あるインスタンスがどうなっているか?」の確認方法を知っておきましょう。こちらは非常に簡単で、コンソールのCloud SQLページで見ることができます。
インスタンス一覧ページを開くと、以下のように出ています。
項目の隣にある数字は、一覧にあるインスタンスのうち、推奨事項が設定されていないインスタンスの数を示しています。また、個別のインスタンスごとでは「問題」として設定されていない推奨事項が示されます。
Cloud SQL セキュリティ Recommenderの主な推奨事項
具体的な項目をここから見ていきます。
パブリックIP関連の推奨事項
パブリック IP 接続を無効にする
内容
Cloud SQLインスタンスにパブリックIPアドレスが割り当てられていると、インターネット経由での接続が可能になります。しかし、多くのケースでは、VPC内のアプリケーションからのプライベートIP経由での接続で十分です。不要なパブリックIPを無効にすることは、攻撃対象領域を削減する上で最も効果的な対策の一つです。
対策
接続元がGKEやCompute Engineなど、同一VPC内に限定される場合は、パブリックIPを無効にし、プライベートIPのみを使用するように構成してください。Cloud SQL Auth ProxyとプライベートIPを組み合わせることで、安全な接続を確立できます。
広範なパブリック IP 範囲を削除する
内容
パブリックIPを利用する場合でも、承認済みネットワークに `0.0.0.0/0` を設定することは、インターネット全体からのアクセス試行を許可することを意味し、極めて危険です。これにより、ブルートフォース攻撃や未知の脆弱性を悪用した攻撃の標的となるリスクが大幅に高まります。
対策
承認済みネットワークには、アプリケーションサーバーのIPアドレスなど、接続を許可する送信元のIPアドレス範囲を具体的かつ最小限に指定してください。
承認済みネットワークを削除する
内容
Cloud SQL Auth Proxyを使用する場合、承認済みネットワークの設定は不要です。Auth ProxyはIAMによる認証と強力な暗号化を用いて安全な接続トンネルを確立するため、IPベースのアクセス制御は必要ありません。承認済みネットワークが設定されていると、意図しないアクセス経路が残る可能性があります。
対策
接続方法をCloud SQL Auth Proxyに一本化している場合は、承認済みネットワークのリストを空に設定し、Auth Proxy経由の接続のみを許可するようにしてください。
接続と認証に関する推奨事項
直接接続で SSL を必須にする
内容
データベースとクライアント間の通信が暗号化されていない場合、ネットワーク経路上でデータが盗聴される危険性があります。特に、認証情報や個人情報などの機密データが平文で送受信されることは、重大なセキュリティインシデントに直結します。
対策
Cloud SQLインスタンスの接続設定で「SSL接続のみを許可」を有効にしてください。これにより、すべての直接接続がSSL/TLSによって暗号化され、通信の安全性が確保されます。
サーバー証明書のローテーション
内容
サーバー証明書は、クライアントが接続先のサーバーの正当性を検証するために不可欠です。証明書の有効期限が切れると、SSL/TLS接続が確立できなくなり、アプリケーションがデータベースに接続できなくなる可能性があります。
対策
有効期限が切れる前に、計画的にサーバー証明書をローテーションしてください。新しい証明書を生成し、その証明書を信頼するようにクライアント側の設定(トラストストアなど)を更新した後、Cloud SQLインスタンスで新しい証明書への切り替えを実行します。
監査とパスワードポリシーに関する推奨事項
データベース監査を有効にする
内容
データベース監査は、「誰が、いつ、どのデータにアクセスし、何をしたか」を記録するプロセスです。これにより、不正アクセスの検知、インシデント発生時の原因究明、コンプライアンス要件への準拠が可能になります。
対策
Cloud SQLのデータベースフラグを使用して監査を有効にします。例えば、PostgreSQLでは cloudsql.enable_pgaudit を On に設定し、pgaudit.log フラグで記録したい操作(read, writeなど)を指定することで、詳細な監査ログを取得できます。
インスタンスのパスワード ポリシーを有効にする
内容
インスタンスレベルでパスワードポリシーを有効にすると、そのインスタンスで作成されるすべてのユーザー(一部の例外を除く)に対して、強力なパスワードを強制することができます。これにより、推測されやすい単純なパスワードが使われるのを防ぎます。
対策
Cloud SQL for PostgreSQLなどの対応エンジンで、インスタンスのフラグ(例: password_policy.complexity)を設定し、パスワードの複雑さの要件を有効にします。
ユーザー パスワード ポリシーを有効にする
内容
個別のデータベースユーザーに対して、より詳細なパスワードポリシー(パスワードの有効期限など)を設定することで、セキュリティをさらに強化できます。長期間変更されないパスワードは、漏洩した際のリスクが高まります。
対策
ユーザーアカウントの作成時または変更時に、パスワードの有効期限(VALID UNTIL句など)を設定し、定期的なパスワードの変更を強制するようにしてください。
まとめ
これらの推奨事項は、データベースセキュリティの基本であり非常に効果的ですが、すべて必ず設定しなければならないというものではありません。ご利用の環境によっては設定しないほうがよいケースなどもあるでしょう。設定されていないことによるリスクがどの程度あるかを把握したうえで、正しく取り入れていきましょう。
参考
Google Cloud、Google Workspace に関するご相談はXIMIXへ!
Google Cloud、Google Workspaceに関する お問い合わせはこちら