설명
암호화되지 않은 데이터베이스 연결은 통신 경로에 접근할 수 있는 공격자에게 자격 증명, 쿼리와 결과 데이터를 노출할 수 있습니다. 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 모드를 선택하고, 필요한 경우 클라이언트 인증서를 준비한 뒤 실제 인스턴스에 적용된 설정을 확인하세요.