SSL(TLS) 인증서 구성

Media CDN 서비스(또는 서비스)를 생성한 후에는 SSL(TLS) 인증서를 발급 및 연결하여 브라우저 및 모바일 애플리케이션에서 보안 연결을 지원할 수 있습니다.

관리형 인증서 발급

관리형 인증서를 만들고 Media CDN 서비스에 연결하려면 다음을 수행해야 합니다.

  1. 챌린지 토큰을 만들고 DNS 레코드를 추가하여 인증서를 발급하려는 도메인의 소유권("승인")을 표시합니다.
  2. 그러한 승인에 기반한 하나 이상의 도메인 이름을 사용하여 EDGE_CACHE 유형의 인증서를 만듭니다.
  3. 이 인증서를 하나 이상의 에지 캐시 서비스에 연결합니다.

에지 캐시 서비스에 대해 인증서를 승인, 생성, 연결하려면 다음 Identity and Access Management 권한이 있어야 합니다.

  • certificatemanager.certs.create
  • certificatemanager.certs.get
  • certificatemanager.certs.list
  • certificatemanager.certs.use
  • certificatemanager.dnsauthorizations.create
  • certificatemanager.dnsauthorizations.get
  • certificatemanager.dnsauthorizations.list
  • certificatemanager.dnsauthorizations.use

Media CDN 서비스에 기존 인증서를 연결하려는 사용자에게는 certificatemanager.certs.get, certificatemanager.certs.list, certificatemanager.certs.use IAM 권한이 필요합니다.

시작하기 전에

  • 공개 DNS 레코드를 업데이트할 수 있는 등록된 도메인 이름이 있어야 합니다.
  • SSL 인증서 개요를 읽습니다.

DNS 승인 만들기

인증서를 발급할 수 있으려면 먼저 도메인 소유권을 표시하기 위한 DNS 승인을 만들어야 합니다. DNS 승인은 DNS-01 ACME 챌린지를 사용하며, 에지 캐시 서비스로 사용자 대상 트래픽을 연결하기 전에 인증서를 발급할 수 있게 해줍니다.

다음과 같이 domain 값을 인증서를 만들려는 도메인 이름으로 설정합니다.

gcloud

gcloud certificate-manager dns-authorizations 명령어를 사용합니다.

gcloud certificate-manager dns-authorizations create DOMAIN_NAME_AUTH \
    --domain="DOMAIN_NAME"
gcloud certificate-manager dns-authorizations describe DOMAIN_NAME_AUTH

gcloud CLI는 추가하려는 DNS 레코드의 세부정보가 포함된 응답을 반환합니다.

createTime: '2022-01-14T13:35:00.258409106Z'
dnsResourceRecord:
  data: 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog.
  name: _acme-challenge.example.com.
  type: CNAME
domain: example.com
name: projects/myProject/locations/global/dnsAuthorizations/myAuthorization
updateTime: '2022-01-14T13:35:01.571086137Z'

Terraform

resource "google_certificate_manager_dns_authorization" "default" {
  name        = "example-dns-auth"
  description = "example dns authorization "
  domain      = "test.example.com"
}

도메인에 Cloud DNS를 사용하는 경우 호스트 도메인에 대한 새 레코드 추가 단계를 참조하세요. 다른 DNS 제공업체를 사용하는 경우 CNAME 레코드 추가 관련 문서를 참조하세요.

  • 인증서를 발급해야 하는 각 도메인에 대해 이 단계를 반복할 수 있습니다.
  • 인증서에 여러 도메인을 포함하거나 필요에 따라 도메인별로 인증서를 발급하도록 선택할 수 있습니다. 도메인의 승인을 얻었으면 이를 사용해서 인증서를 발급할 수 있습니다.
  • 서비스에 사용되는 모든 도메인 이름을 포함하여 생성하는 총 인증서 수를 줄이는 것이 좋습니다. 이렇게 하면 클라이언트가 TLS 재개를 더 자주 사용할 수 있기 때문에 여러 도메인을 사용할 때 클라이언트 성능이 향상됩니다.
  • 각 에지 캐시 서비스는 최대 5개의 인증서를 참조할 수 있습니다. 인증서 발급 수를 줄여서 이 한도 내로 유지할 수 있습니다.

이후 날짜에 DNS 레코드 값을 검색할 필요가 있으면 DNS 승인을 만들 때 제공한 authorizationName을 요청합니다.

인증서 만들기

인증서를 만들려는 도메인의 소유권을 표시하는 DNS 레코드를 추가한 후 인증서 만들기 요청을 실행할 수 있습니다.

dnsAuthorizations 목록은 이 프로세스에서 이전에 만든 기존 승인의 이름과 일치해야 합니다. 동일한 인증서에 여러 도메인을 추가하려면 요청을 수행할 때 domains[] 및 일치하는 dnsAuthorizations[] 목록을 제공합니다.

test.example.com에 대한 승인을 사용하여 test-example-com이라는 인증서를 만들려면 다음 안내를 따르세요.

gcloud

gcloud certificate-manager certificates 명령어를 사용합니다.

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="DOMAIN_NAME" \
    --dns-authorizations="DOMAIN_NAME_AUTH" \
    --scope=EDGE_CACHE

그러면 각 DNS 승인이 AUTHORIZING 상태인 인증서가 생성되고 PROVISIONING 상태의 인증서가 생성됩니다.

Create request issued for: [DOMAIN_NAME]
Waiting for operation [projects/my-project/locations/global/operations/operatio
n-1613425627385-5bb66ed644e91-3e2a2f1f-71979cf8] to complete...done.
Created certificate [CERTIFICATE_NAME].

Terraform

resource "google_certificate_manager_certificate" "default" {
  name        = "example-dns-cert"
  description = "example dns certificate"
  scope       = "EDGE_CACHE"
  managed {
    domains = [
      google_certificate_manager_dns_authorization.default.domain,
    ]
    dns_authorizations = [
      google_certificate_manager_dns_authorization.default.id,
    ]
  }
}

인증서 생성이 완료되려면 다음 조건에 따라 몇 분에서 최대 1시간 까지 걸릴 수 있습니다.

  • DNS 제공업체가 구성 변경을 전파하는 속도
  • 인증서 검증 및 생성을 시도하는 도메인 수

state 필드에는 인증서의 현재 상태가 표시됩니다.

  • PROVISIONING - 인증서가 아직 프로비저닝되는 중입니다. 인증서 만들기 요청이 최근에 수행되었기 때문일 수 있습니다.
  • FAILED - 도메인 검증 또는 인증서 발급 시도가 여러 번 수행된 후에 반환됩니다. 자세한 내용은 provisioning_issue, authorization_attempt_info, failure_reason 필드를 참조하세요.
  • ACTIVE - 도메인이 성공적으로 검증되었고 인증서가 프로비저닝되었습니다.

인증서 상태를 확인합니다.

gcloud

gcloud certificate-manager certificates 명령어를 사용합니다.

gcloud certificate-manager certificates describe CERTIFICATE_NAME

이 예시에서 DNS 승인은 AUTHORIZED이고 인증서 상태는 ACTIVE입니다.

createTime: '2021-02-07T20:03:39.867762684Z'
expireTime: '2021-03-09T19:20:41Z'
managed:
  authorizationAttemptInfo:
  - domain: DOMAIN_NAME
    state: AUTHORIZED
  dnsAuthorizations:
  - projects/111111111111/locations/global/dnsAuthorizations/test-example-com
  domains:
  - DOMAIN_NAME
  state: ACTIVE
name: projects/my-project/locations/global/certificates/test-example-com
scope: EDGE_CACHE
subjectAlternativeNames:
- DOMAIN_NAME
updateTime: '2021-02-07T20:03:40.297242738Z'

인증서가 ACTIVE가 되면 이를 에지 캐시 서비스에 연결할 수 있습니다.

서비스에 인증서 연결

관리형 인증서를 만든 후에는 하나 이상의 에지 캐시 서비스에 연결할 수 있습니다. 서비스에서 edgeSslCertificates 목록을 업데이트하여 기존 및 새로운 서비스에 인증서를 연결할 수 있습니다.

에지 캐시 서비스에 인증서를 연결하려면 다음 IAM 권한이 있어야 합니다.

  • certificatemanager.certs.get
  • certificatemanager.certs.list
  • certificatemanager.certs.use
  • networkservices.edgeCacheServices.get
  • networkservices.edgeCacheServices.list
  • networkservices.edgeCacheServices.update

서비스에 인증서를 연결하려면 다음 단계를 완료합니다.

gcloud

gcloud edge-cache services export 명령어를 실행하여 서비스의 YAML 파일을 내보냅니다.

gcloud edge-cache services export MY_SERVICE \
    --destination=my-service.yaml

내보낸 YAML 파일을 수정하여 인증서를 추가합니다.

name: MY_SERVICE
edgeSslCertificates:
- projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME

gcloud edge-cache services import 명령어를 실행합니다.

gcloud edge-cache services import MY_SERVICE \
    --source=my-service.yaml

출력:

Request issued for: [MY_SERVICE]
Updated service [MY_SERVICE]

이 명령어는 이제 연결된 edgeSslCertificates 목록을 포함하여 서비스에 대한 설명을 반환합니다.

  name: MY_SERVICE
  edgeSslCertificates:
  - projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME

구성을 업데이트하면 인증서가 몇 분 내에 모든 에지 위치에 전파됩니다. DNS를 변경하기 전에 인증서가 에지 캐시 서비스와 연결되어 있는지 테스트하려면 서비스와 연결된 IPv4 또는 IPv6 주소에 대해 요청을 실행하면 됩니다.

인증서 교체 및 삭제

인증서 목록을 업데이트하여 인증서를 추가하고 삭제할 수 있습니다.

gcloud CLI의 --edge-ssl-certificate 플래그를 사용할 때는 인증서가 기존 인증서 목록에 추가만 되고 대체되지는 않습니다. 이렇게 하면 유효한 활성 인증서를 실수로 삭제하는 것을 방지할 수 있습니다.

다음 예시에서 서비스로부터 test-example-com 인증서를 삭제하려면 가져오기 및 내보내기 명령어를 사용하여 YAML에 서비스를 내보낼 수 있습니다.

  name: my-service
  edgeSslCertificates:
  - projects/PROJECT_ID/locations/global/certificates/test-example-com
  - projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME

다음 명령어는 서비스 내보내기, 인증서 참조 삭제, 업데이트된 서비스 가져오기 방법을 보여줍니다.

gcloud

gcloud edge-cache services 명령어를 사용합니다.

gcloud edge-cache services export MY_SERVICE --destination=my-service.yaml
Exported [projects/my-project/locations/global/edgeCacheServices/MY_SERVICE] to 'my-service.yaml'.

원하는 텍스트 편집기를 사용하여 서비스를 더 이상 사용하지 않으려는 인증서를 삭제합니다.

  name: MY_SERVICE
  edgeSslCertificates:
  - projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME

수정된 파일을 저장한 후 업데이트된 서비스를 가져옵니다.

gcloud

gcloud edge-cache services 명령어를 사용합니다.

gcloud edge-cache services import MY_SERVICE --source=my-service.yaml
Request issued for: [MY_SERVICE]
Updated service [MY_SERVICE].

인증서를 연결할 수 있는 서비스 수에는 한도가 없으며 각 에지 캐시 서비스는 최대 5개까지 인증서를 참조할 수 있습니다.

자체 관리형 인증서

필요한 특정 사용 사례가 있으면 Media CDN에 자체 인증서를 업로드할 수 있습니다.

인증서 및 연결된 키를 인증서 관리자에 업로드하려면 다음 안내를 따르세요.

gcloud

gcloud certificate-manager certificates 명령어를 사용합니다. Media CDN과 연결된 인증서에 대해 --scope=EDGE_CACHE를 지정해야 합니다.

gcloud certificate-manager certificates create stream-example-com \
    --certificate-file=CERT.pem \
    --private-key-file=PRIVATE_KEY.pem \
    --scope=EDGE_CACHE
Create request issued for: [stream-example-com]
Created certificate [stream-example-com].

인증서를 업로드한 후 관리형 인증서와 마찬가지로 EdgeCacheService에 연결할 수 있습니다.

인증서 발급 문제 해결

일반적인 인증서 승인 및 발급 오류를 해결하는 방법은 문제 해결 가이드를 참조하세요.

다음 단계