Google 관리형 SSL 인증서 사용

이 페이지에서는 Compute Engine Google 관리 SSL 인증서를 만들고 사용하는 방법을 설명합니다.

인증서 관리자를 사용하여 Google 관리 인증서를 만들려면 배포 개요를 참조하세요.

Google 관리형 SSL 인증서는 도메인에서 Google Cloud가 가져오고 관리하는 도메인 유효성 검사(DV) 인증서입니다. 각 인증서에서 여러 호스트 이름을 지원하며 Google은 인증서를 자동으로 갱신합니다.

Google 관리형 인증서는 다음 부하 분산기에서 지원됩니다.

  • 전역 외부 애플리케이션 부하 분산기
  • 기본 애플리케이션 부하 분산기
  • 외부 프록시 네트워크 부하 분산기(대상 SSL 프록시 사용)

Compute Engine Google 관리형 SSL 인증서는 리전 외부 애플리케이션 부하 분산기, 리전 내부 애플리케이션 부하 분산기 또는 리전 간 내부 애플리케이션 부하 분산기에서 지원되지 않습니다. 이러한 부하 분산기에는 Compute Engine 자체 관리형 SSL 인증서를 사용하거나 인증서 관리자를 대신 사용하는 것이 좋습니다.

Google Kubernetes Engine에서 관리형 SSL 인증서를 사용할 수도 있습니다. 자세한 내용은 Google 관리형 SSL 인증서 사용을 참조하세요.

부하 분산기를 만들기 전, 도중 또는 이후에 Google 관리형 인증서를 만들 수 있습니다. 이 페이지에서는 부하 분산기를 만드는 중이 아닌 만들기 전이나 후에 Compute Engine 인증서를 만든다고 가정합니다. 부하 분산기를 만드는 동안 인증서를 만들려면 부하 분산기 방법 페이지를 참조하세요.

시작하기 전에

권한

이 가이드를 따라하려면 프로젝트에서 SSL 인증서를 만들고 수정할 수 있어야 합니다. 다음 중 하나가 참일 때 이 작업을 수행할 수 있습니다.

  • 프로젝트 소유자 또는 편집자입니다(roles/owner 또는 roles/editor).
  • 프로젝트에서 Compute 보안 관리자 역할(compute.securityAdmin) 및 Compute 네트워크 관리자 역할(compute.networkAdmin)을 모두 갖고 있습니다.
  • 사용 중인 부하 분산기의 유형에 따라 프로젝트에서 compute.sslCertificates.* 권한과 compute.targetHttpsProxies.*compute.targetSslProxies.* 중 하나 또는 둘 다 포함하는 프로젝트의 커스텀 역할이 있습니다.

1단계: Google 관리형 SSL 인증서 만들기

부하 분산기를 만들기 전, 도중 또는 이후에 Google 관리형 인증서를 만들 수 있습니다. Google Cloud 콘솔에서 부하 분산기를 만드는 과정에서 Google Cloud 콘솔을 사용하여 인증서를 만들 수 있습니다. 또는 부하 분산기를 만들기 전후에 인증서를 만들 수 있습니다. 이 단계에서는 나중에 하나 이상의 부하 분산기에 추가할 수 있는 인증서를 만드는 방법을 보여줍니다.

이미 Google 관리형 SSL 인증서를 만든 경우 이 단계를 건너뛸 수 있습니다.

콘솔

인증서 관리자 페이지의 기본 인증서 탭에서 전역 SSL 인증서 작업을 할 수 있습니다.

  1. Google Cloud 콘솔에서 기본 인증서 탭으로 이동합니다.
    기본 인증서로 이동
  2. SSL 인증서 만들기를 클릭합니다.
  3. 인증서의 이름과 설명(선택사항)을 입력합니다.
  4. Google 관리형 인증서 만들기를 선택합니다.
  5. 도메인을 추가합니다.
  6. 만들기를 클릭합니다.

gcloud

전역 외부 애플리케이션 부하 분산기 또는 외부 프록시 네트워크 부하 분산기의 전역 Google 관리형 SSL 인증서를 만들려면 gcloud compute ssl-certificates create 명령어를 사용합니다.

gcloud compute ssl-certificates create CERTIFICATE_NAME \
    --description=DESCRIPTION \
    --domains=DOMAIN_LIST \
    --global

다음을 바꿉니다.

  • CERTIFICATE_NAME: 전역 SSL 인증서 이름입니다.
  • DESCRIPTION: 전역 SSL 인증서에 대한 설명입니다.
  • DOMAIN_LIST: 이 인증서에 사용할 단일 도메인 이름 또는 쉼표로 구분된 도메인 이름 목록입니다.

Terraform

Google 관리형 SSL 인증서를 만들려면 google_compute_managed_ssl_certificate 리소스를 사용하세요.

resource "google_compute_managed_ssl_certificate" "lb_default" {
  provider = google-beta
  name     = "myservice-ssl-cert"

  managed {
    domains = ["example.com"]
  }
}

api

Google 관리 인증서 리소스 sslCertificates.insert 메서드를 만들고 PROJECT_ID를 프로젝트 ID로 바꿉니다.

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/sslCertificates
{
  "name": "ssl-certificate-name",
  "managed": {
    "domains": [
      "www.example.com"
    ]
  },
  "type": "MANAGED"
}

Google 관리형 SSL 인증서 상태 확인

콘솔

인증서 관리자 페이지의 기본 인증서 탭에서 전역 SSL 인증서의 상태를 확인할 수 있습니다.

  1. Google Cloud 콘솔에서 기본 인증서 탭으로 이동합니다.
    기본 인증서로 이동
  2. 선택사항: SSL 인증서 목록을 필터링합니다.
  3. 상태 열을 확인합니다.
  4. 자세한 내용을 보려면 인증서 이름을 클릭합니다.

gcloud

gcloud compute 명령어를 사용하여 Google 관리형 인증서의 상태를 확인할 수 있습니다. 적절한 명령어를 실행한 후 다음을 확인합니다.

  • 관리 상태.
  • 도메인 상태.

Google 관리형 SSL 인증서를 나열하려면 gcloud compute ssl-certificates list 명령어를 --global 플래그와 함께 사용합니다.

gcloud compute ssl-certificates list \
   --global

gcloud compute ssl-certificates describe 명령어를 사용하여 CERTIFICATE_NAME을 바꿀 수 있습니다.

gcloud compute ssl-certificates describe CERTIFICATE_NAME \
   --global \
   --format="get(name,managed.status, managed.domainStatus)"

이 시점에 인증서 상태와 도메인 상태는 PROVISIONING입니다. 이 페이지의 단계를 완료하면 상태가 ACTIVE으로 변경됩니다.

상태에 대한 자세한 내용은 문제 해결 페이지를 참조하세요.

2단계: 부하 분산기 만들기 또는 업데이트

ACTIVE가 되려면 Google 관리형 SSL 인증서가 부하 분산기, 특히 부하 분산기의 대상 프록시와 연결되어야 합니다.

SSL 인증서를 만들고 PROVISIONING 상태인 경우 다음 안내 가이드에 설명된 대로 부하 분산기를 만드는 동안 사용할 수 있습니다.

또는 여기에 설명된 대로 이를 사용하여 기존 부하 분산기를 업데이트할 수 있습니다.

콘솔

Google Cloud 콘솔을 사용하여 전역 외부 애플리케이션 부하 분산기 또는 외부 프록시 네트워크 부하 분산기를 업데이트하면 Google Cloud가 SSL 인증서를 올바른 대상 프록시와 자동으로 연결합니다.

  1. Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
    부하 분산으로 이동
  2. 부하 분산기의 이름을 클릭합니다.
  3. 수정 을 클릭합니다.
  4. 프런트엔드 구성을 클릭합니다.
  5. 올바른 프런트엔드를 클릭합니다. HTTPS, HTTP/2, SSL이어야 합니다.
  6. 추가 인증서를 클릭하고 드롭다운 목록에서 Google 관리형 인증서를 선택합니다.
  7. 만들기를 클릭합니다.

gcloud

전역 외부 애플리케이션 부하 분산기의 대상 HTTPS 프록시와 SSL 인증서를 연결하려면 --global-ssl-certificates--global 플래그를 사용하여 gcloud compute target-https-proxies update 명령어를 사용합니다.

gcloud compute target-https-proxies update TARGET_PROXY_NAME \
    --ssl-certificates SSL_CERTIFICATE_LIST \
    --global-ssl-certificates \
    --global

외부 프록시 네트워크 부하 분산기의 대상 SSL 프록시에 SSL 인증서를 연결하려면 gcloud compute target-ssl-proxies update 명령어를 사용합니다.

gcloud compute target-ssl-proxies update TARGET_PROXY_NAME \
    --ssl-certificates SSL_CERTIFICATE_LIST

다음을 바꿉니다.

  • TARGET_PROXY_NAME: 부하 분산기의 대상 프록시 이름입니다.
  • SSL_CERTIFICATE_LIST: SSL 인증서 리소스의 쉼표로 구분된 목록입니다.

    참조된 인증서 목록에 기존의 모든 유효한 SSL 인증서와 새 SSL 인증서가 모두 포함되어 있는지 확인합니다. gcloud compute target-ssl-proxies update 명령어는 --ssl-certificates의 원래 값을 새 값으로 재정의합니다.

Terraform

대상 HTTPS 프록시를 만들려면 google_compute_target_https_proxy 리소스를 사용하세요.

대상 SSL 프록시를 만들려면 google_compute_target_ssl_proxy 리소스를 사용합니다.

resource "google_compute_target_https_proxy" "lb_default" {
  provider = google-beta
  name     = "myservice-https-proxy"
  url_map  = google_compute_url_map.lb_default.id
  ssl_certificates = [
    google_compute_managed_ssl_certificate.lb_default.name
  ]
  depends_on = [
    google_compute_managed_ssl_certificate.lb_default
  ]
}

각 대상 HTTPS 프록시 또는 대상 SSL 프록시는 하나 이상의 SSL 인증서를 참조해야 합니다. 대상 프록시는 둘 이상의 SSL 인증서를 참조할 수 있습니다. 자세한 내용은 부하 분산 리소스 할당량 및 한도의 대상 풀 및 대상 프록시를 참조하세요.

3단계: 대상 프록시 연결 확인

부하 분산기를 만들거나 업데이트한 후 SSL 인증서가 부하 분산기의 대상 프록시와 연결되어 있는지 확인할 수 있습니다.

대상 프록시의 이름을 모르는 경우 gcloud compute target-https-proxies listgcloud compute target-ssl-proxies list 명령어를 사용하면 프로젝트의 대상 프록시를 나열할 수 있습니다.

다음 명령어를 실행하여 SSL 인증서와 대상 프록시 사이의 연결을 확인합니다.

전역 외부 애플리케이션 부하 분산기:

gcloud compute target-https-proxies describe TARGET_HTTPS_PROXY_NAME \
    --global \
    --format="get(sslCertificates)"

외부 프록시 네트워크 부하 분산기:

gcloud compute target-ssl-proxies describe TARGET_SSL_PROXY_NAME \
    --format="get(sslCertificates)"

이 시점에서 Google 관리형 인증서 상태는 PROVISIONING일 수 있습니다. Google Cloud는 인증 기관과 협력하여 인증서를 발급합니다. Google 관리형 인증서를 프로비저닝하는 데 최대 60분이 걸릴 수 있습니다.

4단계: 부하 분산기의 IP 주소를 가리키도록 DNS A 및 AAAA 레코드 업데이트

DNS 레코드는 등록기관의 사이트, DNS 호스트 또는 ISP에서 관리할 수 있습니다.

레코드를 관리할 때는 다음 사항에 유의하세요.

  • 도메인과 모든 하위 도메인에 DNS A 레코드(IPv4용) 및 DNS AAAA 레코드(IPv6용)가 부하 분산기의 전달 규칙 또는 규칙과 연결된 IP 주소를 가리키는지 확인합니다.

    SSL 인증서를 프로비저닝하려면 A 및 AAAA 레코드가 공개 DNS의 부하 분산기 IP 주소를 가리키는지 확인합니다.

  • Cloud DNS를 사용하는 경우 도메인을 설정하고 네임서버를 업데이트합니다.

  • Google 관리형 인증서에 여러 도메인이 있으면 부하 분산기의 IP 주소를 가리키도록 모든 도메인과 하위 도메인에 대해 DNS 레코드를 추가하거나 업데이트합니다. Google 관리형 인증서의 도메인 및 하위 도메인이 부하 분산기의 전달 규칙 IP 주소가 아닌 다른 IP를 가리키면 인증서 검증이 실패합니다.

다음 조건을 충족하는 경우 관리형 인증서가 성공적으로 프로비저닝합니다.

  • 도메인의 DNS 레코드는 다른 도메인을 가리키는 CNAME 레코드를 사용합니다.
  • 다른 도메인에는 부하 분산기의 IP 주소를 가리키는 A 또는 AAAA 레코드가 포함되어 있습니다.

dig 명령어를 실행하여 설정을 확인할 수 있습니다. 예를 들어 도메인이 www.example.com이라고 가정해 보겠습니다. 다음 dig 명령어를 실행합니다.

dig www.example.com
; <<>> DiG 9.10.6 <<>> www.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31748
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.example.com.           IN  A

;; ANSWER SECTION:
www.example.com. 1742    IN      CNAME   example.net.
example.net.      12     IN      A       34.95.64.10

;; Query time: 43 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Jun 03 16:54:44 PDT 2020
;; MSG SIZE  rcvd: 193

이 예시에서 34.95.64.10는 부하 분산기의 IP 주소입니다.

인터넷의 DNS 리졸버는 Google Cloud를 제어할 수 없습니다. TTL(수명)에 따라 리소스 레코드 집합을 캐시합니다. 즉, dig 명령어나 nslookup 명령어에서 캐시된 값을 반환할 수 있습니다. Cloud DNS를 사용하는 경우 변경사항 전파를 참조하세요.

DNS 레코드 전파 시간

새로 업데이트된 DNS A 및 AAAA 레코드가 완전히 전파되는 데 상당한 시간이 걸릴 수 있습니다. 인터넷에서 전파하는 데 전 세계적으로 최대 72시간까지 걸릴 때도 있지만 일반적으로 몇 시간 정도 소요됩니다.

다음 명령어를 다시 실행합니다.

gcloud compute ssl-certificates describe CERTIFICATE_NAME \
    --format="get(managed.domainStatus)"

도메인 상태가 FAILED_NOT_VISIBLE인 경우 전파가 완료되지 않았기 때문일 수 있습니다.

자세한 내용은 문제 해결 페이지에서 Google 관리형 SSL 인증서 도메인 상태 섹션을 참조하세요.

5단계: OpenSSL로 테스트

인증서 및 도메인 상태가 활성화된 후 부하 분산기가 Google 관리 SSL 인증서를 사용하는 데 최대 30분이 걸릴 수 있습니다.

테스트하려면 다음 OpenSSL 명령어를 실행하여 DOMAIN을 DNS 이름으로, IP_ADDRESS를 부하 분산기의 IP 주소로 바꿉니다.

echo | openssl s_client -showcerts -servername DOMAIN -connect IP_ADDRESS:443 -verify 99 -verify_return_error

이 명령어는 부하 분산기가 클라이언트에 제공하는 인증서를 출력합니다. 출력에는 세부정보와 함께 인증서 체인과 Verify return code: 0 (ok)가 포함됩니다.

추가 절차

이 섹션에는 인증서 관리를 위한 추가적인 절차가 포함되어 있습니다.

Google 관리형 SSL 인증서로 여러 도메인 지원

여러 주체 대체 이름이 지원됩니다. 각 Google 관리형 SSL 인증서는 Google 관리형 SSL 인증서당 최대 도메인 수를 지원합니다.

최대 도메인 수보다 많다면 여러 개의 Google 관리형 인증서를 요청해야 합니다. 예를 들어 (최대 개수 +1)개의 도메인이 있는 Google 관리형 인증서를 만들고자 한다면 Google에서는 그러한 인증서를 발급하지 않습니다. 대신 두 개 이상의 Google 관리형 인증서를 만들고 각 인증서에 연결되는 도메인을 명시적으로 지정해야 합니다.

Google Cloud는 RFC 6066에 정의된 대로 서버 이름 표시(SNI)를 구현합니다.

관리형 인증서의 도메인 또는 하위 도메인이 부하 분산기의 IP 주소를 가리키지 않거나 부하 분산기의 IP와 함께 IP를 가리키면 갱신 프로세스가 실패합니다. 갱신 실패를 방지하려면 모든 도메인과 하위 도메인이 부하 분산기의 IP 주소를 가리키는지 확인하세요.

Google 관리형 SSL 인증서 갱신

Google Cloud는 90일 동안 유효한 관리형 인증서를 프로비저닝합니다. 만료 1개월 전에 인증서 갱신 프로세스가 자동으로 시작됩니다. 이를 위해 도메인의 인증 기관 승인(CAA) DNS 레코드와 CA 목록 모두에 있는 인증 기관(CA)이 선택됩니다.

갱신에 사용되는 CA는 Google 관리형 인증서의 이전 버전을 발급하는 데 사용한 CA와 다를 수 있습니다. 도메인의 인증 기관 승인(CAA) DNS 레코드로 Google 관리형 인증서가 사용하는 CA 목록에서 단일 CA를 지정하여 Google Cloud가 갱신에 사용하는 CA를 제어할 수 있습니다.

관리형 인증서의 도메인 또는 하위 도메인이 부하 분산기의 IP 주소를 가리키지 않거나 부하 분산기의 IP와 함께 IP를 가리키면 갱신 프로세스가 실패합니다. 갱신 실패를 방지하려면 모든 도메인과 하위 도메인이 부하 분산기의 IP 주소를 가리키는지 확인하세요.

Google 관리형 인증서를 발급할 수 있는 CA 지정

DNS 소프트웨어에서 Google 관리형 인증서를 발급하도록 허용하려는 CA를 명시적으로 승인하는 것이 좋습니다. 모든 시나리오에 필수는 아니지만 특정 상황에서 필요합니다.

예를 들어 외부 DNS 서비스를 사용 중이고 Google 관리형 인증서가 취소되었으면 하나 이상의 특정 CA에서 발급된 새 인증서만 서비스에서 검증할 수 있습니다.

이를 위해 pki.goog, letsencrypt.org 또는 둘 다를 포함하도록 CAA 레코드를 만들거나 수정합니다. CAA 레코드가 없는 경우 기본 동작은 pki.googletsencrypt.org를 모두 허용하는 것입니다.

DOMAIN. CAA 0 issue "pki.goog"
DOMAIN. CAA 0 issue "letsencrypt.org"

letsencrypt.org 인증서 지원은 최선을 다해 제공됩니다. 안정성을 높이려면 pki.googletsencrypt.org를 모두 허용합니다. 여러 CA 중 하나만 지정하면 오직 해당 CA만 인증서를 만들고 갱신하는 데 사용됩니다. 이 접근 방식은 권장되지 않습니다.

인증서를 처음 만들면 Google Cloud에서 pki.goog 또는 letsencrypt.org를 선택하고 이를 사용하여 인증서를 발급합니다. Google에서 인증서를 갱신할 때 CAA 레코드에 지정한 CA(만든 경우)에 따라 다른 CA에서 인증서를 발급할 수 있습니다. 다음 중 하나에 해당하는 경우 인증서가 다른 CA에 의해 갱신될 수 있습니다.

  • 도메인에 DNS CAA 레코드가 없습니다.
  • DNS CAA 레코드에 두 CA를 모두 포함했습니다.

자세한 내용은 RFC, CAA DNS 레코드를 참조하세요.

letsencrypt.org국제화된 도메인 이름(IDN)을 발급합니다. pki.goog는 현재 IDN을 지원하지 않습니다.

Cloud DNS를 사용할 경우 레코드를 추가하는 방법을 알아보고 --type 플래그를 CAA로 설정해야 합니다.

기존 SSL 인증서 교체

기존 SSL 인증서를 교체하려면 다음 안내를 따르세요.

  1. 대체 Google 관리형 SSL 인증서를 만드는 프로세스를 시작합니다. 이 인증서는 현재 ACTIVE 상태가 되지 않습니다.

  2. 참조된 인증서 목록에 현재 SSL 인증서와 함께 대체 SSL 인증서가 포함되도록 대상 프록시를 업데이트합니다. 대상 프록시를 업데이트하는 단계는 다음과 같이 다양합니다.

  3. 대체 SSL 인증서가 프로비저닝을 완료할 때까지 기다립니다. 프로비저닝에는 최대 60분이 걸릴 수 있습니다. 프로비저닝이 완료되면 인증서 상태ACTIVE로 바뀝니다.

  4. 모든 Google 프런트엔드(GFE)에서 대체 인증서를 사용할 수 있도록 30분 더 기다립니다.

  5. 참조하는 인증서 목록에서 대체할 SSL 인증서를 삭제하려면 대상 프록시를 업데이트합니다. 대상 프록시를 업데이트하는 단계는 다음과 같이 다양합니다.

  6. 10분 동안 기다렸다가 부하 분산기가 이전 인증서 대신 대체 SSL 인증서를 사용하고 있는지 확인합니다.

  7. 대상 프록시를 다시 업데이트하고, 이전 SSL 인증서 리소스는 삭제합니다. 대상 프록시에서 더 이상 참조되지 않으면 SSL 인증서 리소스를 삭제할 수 있습니다.

이전 SSL 인증서를 삭제하지 않으면 인증서가 만료될 때까지 ACTIVE 상태로 유지됩니다.

자체 관리형 SSL 인증서에서 Google 관리형 SSL 인증서로 마이그레이션

부하 분산기가 자체 관리형 SSL 인증서를 사용하다가 Google 관리형 SSL 인증서로 마이그레이션할 때는 다음 단계를 이 순서대로 수행해야 합니다.

  1. 새 Google 관리형 인증서를 만듭니다.
  2. 새 Google 관리형 인증서와 올바른 대상 프록시를 연결하면서 대상 프록시와 기존 자체 관리형 인증서의 연결은 유지합니다.
  3. Google 관리형 인증서 상태ACTIVE가 될 때까지 기다립니다.
  4. 새 인증서가 Google 프런트엔드(GFE)에 제공되도록 30분 동안 기다립니다.
  5. 대상 프록시를 다시 업데이트하여 자체 관리형 인증서 리소스를 제거합니다. 대상 프록시에서 더 이상 참조되지 않으면 자체 관리형 SSL 인증서 리소스를 삭제할 수 있습니다.

SSL 인증서 삭제

SSL 인증서를 삭제하기 전에 이 인증서를 참조하는 HTTPS 또는 SSL 대상 프록시가 없는지 확인하세요. 여기에는 두 가지 방법이 있습니다.

SSL 인증서를 하나 이상 삭제하려면 다음 안내를 따르세요.

콘솔

인증서 관리자 페이지의 기본 인증서 탭에서 전역 SSL 인증서를 삭제할 수 있습니다.

  1. Google Cloud 콘솔에서 기본 인증서 탭으로 이동합니다.
    기본 인증서로 이동
  2. 삭제할 SSL 인증서를 선택합니다.
  3. 삭제를 클릭합니다.
  4. 확인하려면 삭제를 다시 클릭합니다.

gcloud

전역 SSL 인증서(전역 외부 애플리케이션 부하 분산기 또는 외부 프록시 네트워크 부하 분산기용)를 삭제하려면 gcloud compute ssl-certificates delete 명령어를 --global 명령어와 함께 사용합니다.

gcloud compute ssl-certificates delete CERTIFICATE_NAME \
    --global

다음을 바꿉니다.

  • CERTIFICATE_NAME: SSL 인증서의 이름

다음 단계

  • SSL 인증서 문제를 해결하려면 SSL 인증서 문제 해결을 참조하세요.
  • Google 관리형 인증서를 만드는 Terraform 스크립트를 사용하려면 외부 애플리케이션 부하 분산기에 대한 Terraform 모듈 예시 페이지에서 Cloud Run 예시를 참조하세요.