안녕하세요, 

베스핀글로벌 GCP Support팀입니다.


이번 아티클에서는 주제로 "Certificate Manager를 사용한 DNS 승인 구글관리형 인증서 배포 가이드"를 다루고자 합니다.



Certificate Manager


Certificate Manager는 단일 부하 분산기에 15개가 넘는 인증서를 할당하거나,  와일드 카드 도메인 이름을 사용해야하는 구글 관리형 인증서 생성 시 사용합니다.[1]

※ Certificate Manager는 부하 분산기당 최대 100만 개의 인증서를 지원합니다.


이 가이드에서는 인증서의 도메인 승인 방식으로 DNS 승인을 사용합니다.



Certificate Manager는 위 다이어그램과 같은 방식으로 동작합니다.

부하분산기의 타겟 프록시에 인증서 맵(Certificate Map)을 사용하도록 등록이되면, 인증서 맵은 인증서 맵 항목(Certificate Map Entry)을 참조하여 지정된 호스트 이름에 해당되는 인증서를 제공합니다.

  • 인증서 맵(Certificate Map) : 인증서 맵 항목을 참조하여 대상 프록시에 연결

  • 인증서 맵 항목(Certificate Map Entry) : 특정 도메인 이름에 제공되는 인증서 목록


DNS 승인 구글 관리 인증서 생성 및 적용


※ 일부 작업은 콘솔에서 지원되지 않으며,  gcloud 명령어로만 진행되는 점 참고하시기 바랍니다.


DNS 승인을 사용하여 Google 관리 인증서 생성


#DNS 승인 생성

$ gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \

   --domain="DOMAIN_NAME"

  • AUTHORIZATION_NAME: DNS 승인 이름
  • DOMAIN_NAME: 이 DNS 승인을 만들 도메인의 이름, ex : myorg.example.com

 


#생성한 DNS 승인 확인

$ gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME


이때 출력 되는 data 값을 저장해 둡니다.




Cloud DNS 공개 영역 생성


gcloud 명령어로 Cloud DNS 공개 영역을 생성합니다.(콘솔 작업 가능)[3]


# Cloud DNS 공개 영역 생성

$ gcloud dns managed-zones create NAME \

    --description=DESCRIPTION \

    --dns-name=DNS_SUFFIX \

    --labels=LABELS \

    --visibility=public

  • NAME: 영역 이름
  • DESCRIPTION(선택사항): 영역에 대한 설명
  • DNS_SUFFIX: 영역의 DNS 서픽스(예: example.com)
  • LABELS(선택사항) : 쉼표로 구분된 선택적인 키-값 쌍 목록


위 명령어로 공개 영역 생성 시 자동으로 DNS 이름에 대한 NS 레코드가 추가됩니다. 

생성된 Cloud DNS 공개 영역의 NS 값을 확인한 후 사용 중이신 도메인의 관리 사이트(ex : 가비아)에  해당 네임서버 값을 추가합니다.



DNS 구성에 CNAME 레코드 추가


gcloud 명령어로 DNS 구성에 CNAME 레코드를 추가합니다.


# DNS 트랜잭션 시작

$ gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"

  • DNS_ZONE_NAME : 2.3에서 생성한 DNS 영역 이름


# CNAME 레코드 추가하기

$ gcloud dns record-sets transaction add CNAME_RECORD \

      --name="_acme-challenge.DOMAIN_NAME." \

      --ttl="30" \

      --type="CNAME" \

      --zone="DNS_ZONE_NAME"

  • CNAME_RECORD : 2.2에 기록한 data 값
  • DOMAIN_NAME : 대상 도메인 이름
  • DNS_ZONE_NAME : 2.3에서 생성한 DNS 영역 이름




# DNS 레코드 저장하기

gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"



DNS 승인을 참조하는 구글 관리형 인증서 생성


gcloud 명령어로 DNS 승인을 참조하는 인증서를 생성합니다.(콘솔 작업 가능)


#인증서 생성

$ gcloud certificate-manager certificates create CERTIFICATE_NAME \

    --domains=DOMAIN_NAME \

    --dns-authorizations=AUTHORIZATION_NAME

  • CERTIFICATE_NAME : 인증서 이름
  • DOMAIN_NAME : 대상 도메인 이름
  • AUTHORIZATION_NAME : 2.2에서 생성한 DNS 승인 이름


와일드 카드 도메인 이름으로 사용하려면 아래 명령어를 사용합니다.

$ gcloud certificate-manager certificates create CERTIFICATE_NAME \

    --domains="*.DOMAIN_NAME,DOMAIN_NAME" \

    --dns-authorizations=AUTHORIZATION_NAME

※ 리전간 내부 Application LB에서 사용시에는 --scope=all-regions 플래그를 추가합니다.


생성 후 아래 명령어로 인증서의 상태를 확인합니다.(상태가 Active면 인증서를 사용할 수 있습니다)


#인증서 상태 확인

$ gcloud certificate-manager certificates describe CERTIFICATE_NAME



부하 분산기에 인증서 배포


인증서 상태가 Active가 되면, 아래 명령어로 인증서 맵을 생성하여 프록시 연결합니다.


#인증서 맵 생성

$ gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

  • CERTIFICATE_MAP_NAME : 사용할 인증서 맵 이름


#인증서 맵 항목 만들기(Host name 별로 개별로 만들어야 합니다)

$ gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \

   --map="CERTIFICATE_MAP_NAME" \

   --certificates="CERTIFICATE_NAME" \

   --hostname="HOSTNAME"

  • CERTIFICATE_MAP_ENTRY_NAME : 사용할 인증서 맵 항목의 이름
  • CERTIFICATE_MAP_NAME : 인증서 맵 이름
  • CERTIFICATE_NAME : 인증서 이름
  • HOSTNAME : 하나의 Hostname만 추가


#인증서 맵 항목 상태 확인

gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \

    --map="CERTIFICATE_MAP_NAME"


인증서 맵 항목 상태가 Active가 되면 아래 명령어를 사용해서 프록시를 새로 생성하여 연결하거나 기존 프록시를 업데이트합니다.


방안 1) 신규 프록시 생성


# 신규 타겟 프록시 생성

$ gcloud compute target-https-proxies create PROXY_NAME \

--global \

--url-map URL_MAP \

--global-url-map \

--certificate-map="CERTIFICATE_MAP_NAME"

  • PROXY_NAME : 신규 프록시 이름
  • URL_MAP : LB의 URL_MAP 이름
  • CERTIFICATE_MAP_NAME : 인증서 맵의 이름


# 타겟 프록시를 사용하는 전달규칙 생성

$ gcloud compute forwarding-rules create FORWARDING_RULE_NAME \

--load-balancing-scheme=EXTERNAL_MANAGED \

--network-tier=PREMIUM \

--global \

--target-https-proxy=PROXY_NAME \

--ports=443

  • FORWARDING_RULE_NAME : 전달규칙 이름
  • PROXY_NAME : 신규 프록시 이름


방안 2) 기존 프록시 업데이트


$ gcloud compute target-https-proxies update PROXY_NAME \

      --certificate-map="CERTIFICATE_MAP_NAME" \

      --global

  • PROXY_NAME : 대상 프록시 이름
  • CERTIFICATE_MAP_NAME : 인증서 맵의 이름


프록시에 적용된 것은 아래 경로에서 확인하실 수 있습니다.

  • 콘솔 > Network Services > Load Balancing > 하단의 load balancing components view 클릭 > Target Proxies 탭 > 연결한 프록시 선택
  • 예시 이미지



콘솔의 LB 화면에는 인증서가 - 로 표시됩니다.





도메인 주소로 접속 테스트


LB 프론트엔드 IP를 Cloud DNS Zone의 A레코드로 입력하고 도메인 주소로 접속 시 정상적으로 서비스에 접근이 되는 것을 확인하실 수 있습니다. 

  • 콘솔 > Cloud DNS > 생성한 공개 영역 선택 > Record Sets > + ADD STANDARD > LB의 IP를 A 레코드로 추가




  • 도메인 접근 테스트





참조 링크


[1] 인증서 관리자 개요

https://cloud.google.com/certificate-manager/docs/overview

[2] DNS 승인을 사용하여 전역 Google 관리형 인증서 배포

https://cloud.google.com/certificate-manager/docs/deploy-google-managed-dns-auth

[3] Cloud DNS 공개 영역 생성

https://cloud.google.com/dns/docs/zones#create-pub-zone



관련 문의사항이 있으시면 Support Portal에 문의해 주시기 바랍니다.


감사합니다.