Cloud SQL 데이터베이스 연결의 암호화

데이터베이스 연결을 SSL/TLS로 보호하고 서버의 신원을 검증하세요. Cloud SQL의 엔진별 SSL 모드와 실제 연결 경로에 맞게 설정해야 합니다.

설명

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

참조