説明
暗号化されていないデータベース接続では、通信経路にアクセスできる攻撃者に認証情報、クエリ、結果データが漏れるおそれがあります。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.cloud1.14.0のSQLインスタンスモジュールはrequire_sslを提供しますが、ssl_modeは提供せず、既存オブジェクトを更新できません。既存インスタンスのモードを変更する場合は、対応する別の管理方法を使用してください。- アプリケーションからインスタンスまでの接続経路全体を確認してください。Cloud SQL Auth Proxyはプロキシとインスタンス間を暗号化しますが、アプリケーションとプロキシ間まで自動的に暗号化するわけではありません。必要な接続が動作し、許可しない平文接続が拒否されることを確認してください。
例
以下の例は、従来のrequire_sslオプションを比較しています。エンジンとSSLモードが省略されているため、実際の環境との互換性を確認してください。8.8.8.8/32とgoogle dns serverは、実際のデータベースクライアントの許可リストに使う値ではありません。
最初の設定
- 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にも依存します。
比較用の設定
- 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モードを選び、必要な場合はクライアント証明書を準備したうえで、実際のインスタンスに適用された設定を確認してください。