SSL/TLS 인증서 구성

이 페이지에서는 SSL/TLS를 사용하도록 인스턴스를 구성하는 방법을 설명합니다. Cloud SQL에서 SSL/TLS을 사용하는 방법을 자세히 알아보세요.

개요

Cloud SQL은 인스턴스를 만들 때 서버 인증서(server-ca.pem)를 자동으로 만듭니다.

SSL/TLS를 사용하려면 클라이언트 인증서를 만들고 PostgreSQL 클라이언트 호스트 머신에 다운로드해야 합니다.

SSL/TLS를 사용하여 연결하려면 모든 연결이 SSL/TLS를 사용하도록 설정하는 것이 좋습니다.

SSL/TLS 인증서를 변경한 후에 인스턴스를 다시 시작할 필요가 없습니다. 다시 시작해야 하는 경우 SSL 업데이트 이벤트 중에 자동으로 다시 시작됩니다.

SSL/TLS 필요

SSL/TLS 필요가 사용 설정되어 있으면 Cloud SQL 인증 프록시나 SSL/TLS 인증서를 사용하여 Cloud SQL 인스턴스에 연결할 수 있습니다. SSL/TLS가 필요하지 않으면 유효한 인증서가 없는 클라이언트를 연결할 수 있습니다.

SSL/TLS를 필요를 사용 설정하려면 다음 안내를 따르세요.

Console

  1. Google Cloud Console에서 Cloud SQL 인스턴스 페이지로 이동합니다.

    Cloud SQL 인스턴스로 이동

  2. 인스턴스 이름을 클릭하여 개요 페이지를 엽니다.
  3. SQL 탐색 메뉴에서 연결을 클릭합니다.
  4. 보안 섹션까지 아래로 스크롤합니다.
  5. SSL 연결만 허용을 클릭합니다.

gcloud

gcloud sql instances patch INSTANCE_NAME
--require-ssl
  

REST v1

  1. 요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • project-id: 프로젝트 ID
    • instance-id: 인스턴스 ID

    HTTP 메서드 및 URL:

    PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

    JSON 요청 본문:

    {
      "settings": {
        "ipConfiguration": {"requireSsl": "true"}
      }
    }
    

    요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

    다음과 유사한 JSON 응답이 표시됩니다.

REST v1beta4

  1. 요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • project-id: 프로젝트 ID
    • instance-id: 인스턴스 ID

    HTTP 메서드 및 URL:

    PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

    JSON 요청 본문:

    {
      "settings": {
        "ipConfiguration": {"requireSsl": "true"}
      }
    }
    

    요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

    다음과 유사한 JSON 응답이 표시됩니다.

서버 인증서

인스턴스를 만들면 Cloud SQL이 서버 인증서를 자동으로 만듭니다. 서버 인증서가 유효하면 개발자가 직접 서버 인증서를 관리할 필요가 없습니다. 그러나 인증서 만료일은 10년입니다. 만료일 이후에는 인증서가 더 이상 유효하지 않으며 클라이언트가 이 인증서를 사용하여 인스턴스에 대한 보안 연결을 설정할 수 없습니다. 서버 인증서가 곧 만료된다는 알림이 주기적으로 전송됩니다. 알림은 만료일 90, 30, 10, 2, 1일 전에 전송됩니다.

서버 인증서가 만들어진 시기 및 만료되는 시기 같은 서버 인증서 관련 정보를 가져오거나 수동으로 새 인증서를 만들 수 있습니다.

Console

  1. Google Cloud Console에서 Cloud SQL 인스턴스 페이지로 이동합니다.

    Cloud SQL 인스턴스로 이동

  2. 인스턴스 이름을 클릭하여 개요 페이지를 엽니다.
  3. SQL 탐색 메뉴에서 연결을 클릭합니다.
  4. 서버 인증서 관리 섹션까지 아래로 스크롤합니다.

    표에서 서버 인증서의 만료일을 확인할 수 있습니다.

gcloud

  1. 서비스 인증서에 대한 정보를 가져옵니다.
    gcloud beta sql ssl server-ca-certs list \
    --instance=INSTANCE_NAME
    
  2. 서버 인증서 만들기:
    gcloud beta sql ssl server-ca-certs create \
    --instance=INSTANCE_NAME
    
  3. 인증서 정보를 로컬 PEM 파일로 다운로드합니다.
    gcloud beta sql ssl server-ca-certs list \
    --format="value(cert)" \
    --instance=INSTANCE_NAME > \
    FILE_PATH/FILE_NAME.pem
    
  4. 다운로드된 파일을 클라이언트 호스트 머신에 복사하고 기존 server-ca.pem 파일을 대체하여 모든 클라이언트에서 새 정보를 사용하도록 업데이트합니다.

클라이언트 인증서

새 클라이언트 인증서 만들기

인스턴스당 최대 10개의 클라이언트 인증서를 만들 수 있습니다. 인증서의 비공개 키를 분실한 경우 새 키를 만들어야 합니다. 비공개 키는 복구할 수 없기 때문입니다. 기본적으로 클라이언트 인증서의 만료일은 10년입니다. 클라이언트 인증서 만료가 가까워지면 알림이 발송되지 않습니다.

Console

  1. Google Cloud Console에서 Cloud SQL 인스턴스 페이지로 이동합니다.

    Cloud SQL 인스턴스로 이동

  2. 인스턴스 이름을 클릭하여 개요 페이지를 엽니다.
  3. SQL 탐색 메뉴에서 연결을 클릭합니다.
  4. 보안 섹션까지 아래로 스크롤합니다.
  5. 클라이언트 인증서 만들기를 클릭합니다.
  6. 클라이언트 인증서 만들기 대화상자에서 고유 이름을 추가합니다.
  7. 만들기를 클릭합니다.
  8. 새 SSL 인증서가 생성됨 대화상자의 첫 번째 섹션에서 client-key.pem 다운로드를 클릭하여 비공개 키를 client-key.pem 파일에 다운로드합니다.
  9. 두 번째 섹션에서 client-cert.pem 다운로드를 클릭하여 클라이언트 인증서를 client-cert.pem 파일에 다운로드합니다.
  10. 세 번째 섹션에서 server-ca.pem 다운로드를 클릭하여 서버 인증서를 server-ca.pem 파일에 다운로드합니다.
  11. 닫기를 클릭합니다.

gcloud

  1. ssl client-certs create 명령어를 사용하여 클라이언트 인증서를 만듭니다.

    gcloud sql ssl client-certs create CERT_NAME client-key.pem \
    --instance=INSTANCE_NAME
    
  2. ssl client-certs describe명령어를 사용하여 방금 만든 인증서의 공개 키를 검색하여 client-cert.pem 파일에 복사합니다.

    gcloud sql ssl client-certs describe CERT_NAME \
    --instance=INSTANCE_NAME \
    --format="value(cert)" > client-cert.pem
    
  3. instances describe 명령어를 사용하여 서버 인증서를 server-ca.pem 파일에 복사합니다.

    gcloud sql instances describe INSTANCE_NAME \
    --format="value(serverCaCert.cert)" > server-ca.pem
    

REST v1

  1. SSL/TLS 인증서를 만들어 이 인스턴스의 고유한 이름을 지정합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • project-id: 프로젝트 ID
    • instance-id: 인스턴스 ID
    • client-cert-name: 클라이언트 인증서 이름

    HTTP 메서드 및 URL:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts

    JSON 요청 본문:

    {
      "commonName" : "client-cert-name"
    }
    

    요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

    다음과 유사한 JSON 응답이 표시됩니다.

  2. 다음과 같이 응답에서 따옴표 안에 있는 모든 인증서 콘텐츠(따옴표는 제외)를 로컬 파일로 복사합니다.
    1. serverCaCert.certserver-ca.pem에 복사합니다.
    2. clientCert.certclient-cert.pem에 복사합니다.
    3. certPrivateKeyclient-key.pem에 복사합니다.

REST v1beta4

  1. SSL/TLS 인증서를 만들어 이 인스턴스의 고유한 이름을 지정합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • project-id: 프로젝트 ID
    • instance-id: 인스턴스 ID
    • client-cert-name: 클라이언트 인증서 이름

    HTTP 메서드 및 URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts

    JSON 요청 본문:

    {
      "commonName" : "client-cert-name"
    }
    

    요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

    다음과 유사한 JSON 응답이 표시됩니다.

  2. 다음과 같이 응답에서 따옴표 안에 있는 모든 인증서 콘텐츠(따옴표는 제외)를 로컬 파일로 복사합니다.
    1. serverCaCert.certserver-ca.pem에 복사합니다.
    2. clientCert.certclient-cert.pem에 복사합니다.
    3. certPrivateKeyclient-key.pem에 복사합니다.

여기까지 실행하면 다음을 보유하게 됩니다.

  • server-ca.pem으로 저장된 서버 인증서
  • client-cert.pem으로 저장된 클라이언트 공개 키 인증서
  • client-key.pem으로 저장된 클라이언트 비공개 키
연결에 사용할 도구에 따라 이 세 가지 항목이 서로 다른 방식으로 지정됩니다. 예를 들어 psql 명령줄 클라이언트를 사용하여 연결할 경우 이 세 개 파일은 psql 연결 문자열의 sslrootcert, sslcert, sslkey 매개변수 값입니다. psql 클라이언트와 SSL/TLS를 사용한 연결 예시는 psql 클라이언트로 연결을 참조하세요.

다음 단계