Cloud SQLのデータベース接続の暗号化

データベース接続をSSL/TLSで保護し、サーバーの身元を検証してください。Cloud SQLのエンジンと実際の接続経路に合った設定が必要です。

説明

暗号化されていないデータベース接続では、通信経路にアクセスできる攻撃者に認証情報、クエリ、結果データが漏れるおそれがあります。Cloud SQLへの接続にSSL/TLSを適用し、クライアントがサーバーの身元を検証するように構成してください。

Cloud SQLでは、従来のrequireSslよりsslModeが優先されます。MySQLとPostgreSQLでは、ENCRYPTED_ONLYとrequireSsl: falseの組み合わせでも暗号化された接続だけが許可されます。SQL Serverでは、ENCRYPTED_ONLYをrequireSsl: trueと組み合わせます。クライアント証明書も要求するTRUSTED_CLIENT_CERTIFICATE_REQUIREDはMySQLとPostgreSQLで利用できますが、SQL Serverでは利用できません。

想定される影響

  • 暗号化されていない接続から、認証情報や業務データが漏れる可能性があります。
  • サーバーの身元を検証しないクライアントは、意図しないサーバーへ接続する危険があります。

対処方法

  • Cloud SQLコンソールや対応する管理ツール/APIで、エンジンに適したSSL/TLSモードを適用してください。従来のrequireSslも使う場合は、互換性のある値を選択してください。クライアントのTLS設定と必要な証明書は事前に準備してください。
  • google.cloud 1.14.0のSQLインスタンスモジュールはrequire_sslを提供しますが、ssl_modeは提供せず、既存オブジェクトを更新できません。既存インスタンスのモードを変更する場合は、対応する別の管理方法を使用してください。
  • アプリケーションからインスタンスまでの接続経路全体を確認してください。Cloud SQL Auth Proxyはプロキシとインスタンス間を暗号化しますが、アプリケーションとプロキシ間まで自動的に暗号化するわけではありません。必要な接続が動作し、許可しない平文接続が拒否されることを確認してください。

例

以下の例は、従来のrequire_sslオプションを比較しています。エンジンとSSLモードが省略されているため、実際の環境との互換性を確認してください。8.8.8.8/32とgoogle dns serverは、実際のデータベースクライアントの許可リストに使う値ではありません。

最初の設定

yaml
- name: create a forth instance
  google.cloud.gcp_sql_instance:
    name: "{{ resource_name }}-2"
    settings:
      ip_configuration:
        require_ssl: no
        authorized_networks:
        - name: google dns server
          value: 8.8.8.8/32
      tier: db-n1-standard-1
    region: us-central1
    project: test_project
    auth_kind: serviceaccount
    service_account_file: "/tmp/auth.pem"
    state: present

require_ssl: noは、この従来のオプションでは暗号化を要求しない設定です。現在の構成が暗号化接続を必須にするかどうかは、併せて適用されるsslModeにも依存します。

比較用の設定

yaml
- name: create a instance
  google.cloud.gcp_sql_instance:
    name: '{{ resource_name }}-2'
    settings:
      ip_configuration:
        require_ssl: yes
        authorized_networks:
        - name: google dns server
          value: 8.8.8.8/32
      tier: db-n1-standard-1
    region: us-central1
    project: test_project
    auth_kind: serviceaccount
    service_account_file: /tmp/auth.pem
    state: present

require_ssl: yesで従来のオプションを有効にする設定です。エンジンに適合するSSLモードを選び、必要な場合はクライアント証明書を準備したうえで、実際のインスタンスに適用された設定を確認してください。

参考資料