이 페이지에서는 Cloud SQL이 자체 관리형 보안 소켓 레이어(SSL)/전송 계층 보안(TLS) 인증서를 사용하여 Cloud SQL 인스턴스에 안전하게 연결하는 방법을 설명합니다.
개요
Cloud SQL은 전송 계층 보안(SSL/TLS) 프로토콜을 사용하여 인스턴스에 연결하도록 지원합니다. Google이나 Google 대리인이 통제하는 물리적 경계 내에서 전송 중 데이터는 일반적으로 인증되지만 기본적으로 암호화되지 않을 수 있습니다. 공개 IP 주소를 사용하여 인스턴스에 연결할 경우 데이터가 전송 중에 안전하게 보호되도록 SSL/TLS 인증서를 적용해야 합니다. SSL/TLS는 인터넷을 통해 전송되는 데이터를 암호화하는 표준 프로토콜입니다. 데이터가 암호화되지 않으면 누구나 패킷을 검사하여 기밀 정보를 읽을 수 있습니다.
가장 안전한 암호화 방법은 비대칭 암호화라고 합니다. 여기에는 공개 키와 비공개 키의 두 가지 암호화 키가 필요합니다. 기본적으로 공개 키를 사용하여 데이터를 암호화하고 비공개 키를 사용하여 데이터를 복호화합니다. 서버 머신과 클라이언트 머신 모두 동일한 클라이언트 키 집합을 가집니다.
Cloud SQL에서 공개 키 이름은 client-cert.pem
이고 비공개 키의 이름은 client-key.pem
입니다. 서버는 server-ca.pem
이라고 하는 자체 인증서도 생성합니다.
애플리케이션을 사용하려면 이러한 키 3개 모두 연결되어야 합니다.
이러한 키를 안전하게 저장합니다. 이러한 키에 액세스할 수 있는 사용자는 누구든지 데이터를 연결하거나 가로챌 수 있습니다. 나중에 서버에서 비공개 키를 검색할 수 없으므로 분실할 경우 이전에 사용했던 인증서를 대체할 새 클라이언트 인증서를 만들어야 합니다. 마찬가지로 서버에서 새로운 server-ca.pem
파일을 생성하면 이를 다운로드하여 MySQL 클라이언트의 호스트 머신에 저장하여 기존 파일을 바꿔야 합니다.
SSL/TLS 인증서
SSL 연결에는 서버 인증 기관(CA) 인증서가 필요합니다. 인스턴스를 만들면 Cloud SQL이 서버 인증서를 자동으로 생성합니다. 서버 인증서가 유효하면 개발자가 직접 서버 인증서를 관리할 필요가 없습니다. 그러나 인증서 만료일은 10년입니다. 만료일 이후에는 인증서가 더 이상 유효하지 않으며 클라이언트가 이 인증서를 사용하여 인스턴스에 보안 연결을 설정할 수 없습니다. 새로운 인증서를 수동으로 만들 수도 있습니다.
직접 클라이언트 인증서를 만듭니다. Cloud SQL 인스턴스당 클라이언트 인증서 수는 10개로 제한됩니다.서버 인증서 순환 작동 방식
Cloud SQL은 이전 인증서가 만료되기 전에 새 인증서가 원활하게 교체될 수 있도록 서버 인증서를 순환할 수 있게 해줍니다.
Cloud SQL 인스턴스의 서버 인증서가 만료되기 약 3개월 전에 Cloud SQL에서 프로젝트 소유자에게 해당 인스턴스에서 인증서 순환 프로세스가 시작되었음을 알리는 이메일을 발송합니다. 이 이메일은 인스턴스 이름을 제공하며 Cloud SQL이 프로젝트에 새 서버 인증서를 추가했음을 알립니다. 기존 서버 인증서는 계속 정상적으로 작동합니다. 사실상 이 기간 동안에는 인스턴스에 서버 인증서가 두 개 있습니다.
현재 인증서가 만료되기 전에 새 server-ca.pem
파일을 다운로드합니다. 이 파일에는 현재의 서버 인증서와 새 서버 인증서 모두에 대한 인증서 정보가 있습니다. MySQL 클라이언트를 업데이트하여 새 파일을 사용하려면 이 파일을 모든 MySQL 클라이언트 호스트 머신에 복사하여 기존 파일을 바꿉니다.
모든 MySQL 클라이언트가 업데이트되면 새 서버 인증서로 순환하라는 명령어를 Cloud SQL 인스턴스에 보냅니다. 이렇게 하면 기존 서버 인증서는 더 이상 인식되지 않고 새 서버 인증서만 사용할 수 있습니다.
클라이언트 인증서는 서버 인증서 순환의 영향을 받지 않습니다.SSL/TLS 암호화 적용
Cloud SQL 인스턴스가 SSL/TLS 연결을 수락하도록 구성하면 인스턴스에 SSL/TLS 연결이 사용 설정되지만 암호화되지 않고 안전하지 않은 연결도 수락됩니다. 모든 연결에 SSL/TLS를 요구하지 않으면 암호화되지 않은 연결이 계속 허용됩니다. 따라서 공개 IP를 사용하여 인스턴스에 액세스하는 경우에는 모든 연결에 SSL을 적용하는 것이 좋습니다.계정별 사용자 설정이 SSL을 적용하여 사용 설정 또는 중지된 전역 설정을 재정의할 수 있습니다. 사용자 계정의 SSL 상태는 mysql.user
표의 ssl_type
열에 표시됩니다. 자세한 내용은 암호화된 연결을 사용하도록 MySQL 구성을 참고하세요.
승인된 네트워크 사용
Cloud SQL 인스턴스에서 공개 IP 주소를 사용할 경우 SSL/TLS를 구성할 때 MySQL 클라이언트의 IP 주소를 승인된 네트워크로 추가해야 합니다.
이 경우 MySQL 클라이언트는 IP 주소가 이 목록에 추가된 경우에만 연결하도록 승인됩니다. IP 주소는 단일 엔드포인트로 제한되거나 CIDR 형식의 범위로 구성될 수 있습니다. 예를 들면 10.50.51.3
또는 10.50.51.0/26
입니다.
SSL 인증서 만료
Cloud SQL 인스턴스와 연결된 SSL 인증서의 유효 기간은 10년입니다. 만료되면 SSL 인증서 순환을 수행합니다. 또한 언제든지 Cloud SQL 인스턴스의 SSL 구성을 재설정할 수 있습니다.
다음 단계
Cloud SQL 인스턴스에서 SSL/TLS 구성
Google Cloud에서 암호화를 처리하는 방식 자세히 알아보기
- Cloud SQL 인스턴스에 SSL/TLS를 사용하여 연결
- Cloud SQL 인스턴스에서 SSL/TLS 관리
MySQL의 SSL/TLS 사용 방법 자세히 알아보기