본문 바로가기
GCP

GCP 도메인 구매 및 인증서 구성

by study4me 2024. 9. 13.
반응형

1. GCP 도메인 구매

1. Cloud Domain > 도메인 등록
2. 구매하고자하는 도메인 검색 후 선택
본 게시글에서 구매하는 도메인은 example.com으로 가정한다.
3. DNS 제공업체는 Cloud DNS 사용
  별도로 네임 서버를 소유하고 있다면 커스텀 네임서버를 사용해도되나 일반적으로 네임서버가 없을테니 GCP에서 제공하는 DNS를 사용하는 Cloud DNS 사용(권장)을 선택한다.
4. 개인정보 보호
  도메인을 구입할 때, 구매자의 정보를 입력하는데 보통 누가 구매했는지 공개된다. 이러한 정보를 비공개로 하고 싶으면 비공개 신청을 할 수 있는데 일부 도메인 업체는 유료로 비공개 서비스를 제공한다. GCP는 무료로 제공하기 때문에 "공개될 정보 제한"을 선택한다.
5. 연락처 세부정보
  구매자의 정보를 입력한다.
6. 등록 완료

 

 

GCP Domain 특징

1년 후 자동 갱신되며 자동으로 요금 청구. 자동 갱신을 Stop할 수도 있음.
GCP Domain에서는 도메인 등록자 연락처, 네임서버 정보 확인 가능
레코드 등록은 GCP Domain이 아니라 Cloud DNS에서 작업 가능
Domain을 생성하며 Cloud DNS에 Public DNS Zone 자동 생성



2. 인증서 등록

GCP Managed 인증서를 생성하기 위해서 다음 절차를 진행한다.

1. DNS Authorizations 생성(DNS 승인 생성)
2. 승인을 위한 Record 등록
3. Certificate 생성(인증서 생성)



2.1 DNS Authorizations 생성(DNS 승인 생성)

DNS Authorizations 생성
DNS Authorizations 생성 gcloud

GCP Console에서 생성이 불가한 것 같음.(2024.08.30 기준)
Cloud Shell에서 gcloud를 사용하여 생성 진행.

# Authorizations 생성
gcloud certificate-manager dns-authorizations create {AUTHORIZATION_NAME} --domain="{DOMAIN_NAME}"
# Authorizations 조회
gcloud certificate-manager dns-authorizations describe {AUTHORIZATION_NAME}

# 설명
AUTHORIZATION_NAME: GCP의 DNS Authorization 리소스의 이름
DOMAIN_NAME: Authorization에 사용할 도메인을 의미하며 구매한 도메인이나 서브 도메인을 입력한다.

[예시]

# Create 예시1
gcloud certificate-manager dns-authorizations create example-authorization --domain="example.com"
# Create 예시2
gcloud certificate-manager dns-authorizations create example-authorization --domain="host.example.com"
# Describe
gcloud certificate-manager dns-authorizations describe example-authorization
# 응답 예시
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'




2.2 승인을 위한 Record 등록

Record 등록
생성한 DNS Authorization의 dnsResourceRecord:data의 값을 DNS Zone에 Record로 등록한다.
GCP Console에서 작업 가능: Cloud DNS > example.com > 레코드 모음 > 표준 추가

본 게시글에서는 gcloud로 진행한다.

# 트랜잭션 시작
gcloud dns record-sets transaction start --zone="{DNS_ZONE_NAME}"
# 레코드 추가
gcloud dns record-sets transaction add {CNAME_RECORD} \
  --name="_acme-challenge.{DOMAIN_NAME}." \
  --ttl="30" \
  --type="CNAME" \
  --zone="{DNS_ZONE_NAME}"
# 트랜잭션 실행
gcloud dns record-sets transaction execute --zone="{DNS_ZONE_NAME}"

#설명
DNS_ZONE_NAME: Cloud DNS에서 확인 가능한 DNS Zone Name. GCP Domain에서 도메인 생성 시 자동으로 Public DNS Zone이 생성됨.
CNAME_RECORD: 생성한 DNS Authorization의 dnsResourceRecord:data의 값
DOMAIN_NAME: 2.1 DNS Authorizations에서 사용한 도메인. 대상 도메인 이름 뒤에 후행 마침표도 포함해야 함.

[예시]

# 트랜잭션 시작
gcloud dns record-sets transaction start --zone="example-com"
# 레코드 추가
gcloud dns record-sets transaction add 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. \
  --name="_acme-challenge.example.com." \
  --ttl="30" \
  --type="CNAME" \
  --zone="example-com"
# 트랜잭션 실행
gcloud dns record-sets transaction execute --zone="example-com"

[결과]

 

 

 

2.3 Certificate 생성(인증서 생성)

DNS Authorization을 참조하는 Google 관리형 인증서 만들기

# Case 1
# For a Global external Application Load Balancer, a Classic Application Load Balancer, or a Global external proxy Network Load Balancer:
# 본 실습에서는 아래 명령어를 사용함.
gcloud certificate-manager certificates create {CERTIFICATE_NAME} \
   --domains="*.{DOMAIN_NAME},{DOMAIN_NAME}" \
   --dns-authorizations={AUTHORIZATION_NAME}

# Case 2
# For a Cross-region internal Application Load Balancer:
# 본 실습에서는 아래 명령어를 사용하지 않음.
gcloud certificate-manager certificates create {CERTIFICATE_NAME} \
   --domains="*.{DOMAIN_NAME},{DOMAIN_NAME}" \
   --dns-authorizations={AUTHORIZATION_NAME} \
   --scope=all-regions
     
# 인증서 상태 확인
# 인증서를 서비스에 배포하기 전, ACTIVE 상태인지 확인 필요
# 응답에서 managed: state: ACTIVE 확인하기
gcloud certificate-manager certificates describe {CERTIFICATE_NAME}

# 설명
CERTIFICATE_NAME: 생성할 인증서의 이름
DOMAIN_NAME: 인증서의 Target Domain. *.은 와일드 카드 인증서를 나타냄.
AUTHORIZATION_NAME: 인증서에서 사용할 DNS 승인 이름으로 2.1에서 생성한 DNS 승인을 의미함.

[예시]

# 인증서 생성
gcloud certificate-manager certificates create example-certificate \
   --domains="*.example.com,example.com" \
   --dns-authorizations=example-authorization
   
# 인증서 상태 확인
gcloud certificate-manager certificates describe example-certificate



3. 부하 분산기에 인증서 배포

부하 분산기에 인증서 배포

부하 분산기 종류에 따라 인증서 배포 방법이 다르다.

인증서 맵을 사용하여 인증서를 배포
- 전역 외부 애플리케이션 부하 분산기
- 전역 외부 프록시 네트워크 부하 분산기
- 기본 애플리케이션 부하 분산기

대상 프록시에 직접 연결하여 인증서를 배포
- 리전 간 내부 애플리케이션 부하 분산기

 

3.1 인증서 맵을 사용하여 인증서 배포

# 인증서 맵 생성
gcloud certificate-manager maps create {CERTIFICATE_MAP_NAME}

# 인증서 맵 항목 생성
gcloud certificate-manager maps entries create {CERTIFICATE_MAP_ENTRY_NAME} \
  --map="{CERTIFICATE_MAP_NAME}" \
  --certificates="{CERTIFICATE_NAME}" \
  --hostname="{HOSTNAME}"

# 인증서 맵 항목 상태 확인
# state: ACTIVE 확인
gcloud certificate-manager maps entries describe {CERTIFICATE_MAP_ENTRY_NAME} \
   --map="{CERTIFICATE_MAP_NAME}"
  
# 대상 프록시에 인증서 맵 연결
# 기존 TLS(SSL) 인증서가 프록시에 직접 연결되어 있으면 프록시는 직접 연결된 TLS(SSL) 인증서보다 인증서 맵에서 참조하는 인증서를 우선시합니다.
gcloud compute target-https-proxies update {PROXY_NAME} \
   --certificate-map="{CERTIFICATE_MAP_NAME}" \
   --global



[예시]

# 인증서 맵 생성
gcloud certificate-manager maps create example-certificate-map

# 인증서 맵 항목 생성
gcloud certificate-manager maps entries create example-certificate-map-entry \
  --map="example-certificate-map" \
  --certificates="example-certificate" \
  --hostname="example.com"
gcloud certificate-manager maps entries create example-certificate-map-entry-wildcard \
  --map="example-certificate-map" \
  --certificates="example-certificate" \
  --hostname="*.example.com"

# 인증서 맵 항목 상태 확인
# state: ACTIVE 확인
gcloud certificate-manager maps entries describe example-certificate-map-entry \
   --map="example-certificate-map"
gcloud certificate-manager maps entries describe example-certificate-map-entry-wildcard \
   --map="example-certificate-map"
  
# 대상 프록시에 인증서 맵 연결
# 기존 TLS(SSL) 인증서가 프록시에 직접 연결되어 있으면 프록시는 직접 연결된 TLS(SSL) 인증서보다 인증서 맵에서 참조하는 인증서를 우선시합니다.
gcloud compute target-https-proxies update example-proxy \
   --certificate-map="example-certificate-map" \
   --global
대상 프록시를 어떻게 찾는지 잘 모르겠음...
[대상 프록시로 이동](https://cloud.google.com/certificate-manager/docs/deploy-google-managed-dns-auth?hl=ko#attach_the_certificate_map_to_the_target_proxy)
위 링크에 대상 프록시로 이동이라는 버튼이 있어서 눌렀더니 GCP 화면으로 이동할 수 있는데
GCP 콘솔에서는 어떻게 들어갈 수 있는지 잘 모르겠음...
암튼 프록시는 아래 이 리소스 이름 쓰면됨..

 

 

 

3.2 대상 프록시에 인증서 직접 연결

# 본 실습에서는 아래 명령어 사용 안함.
gcloud compute target-https-proxies update {PROXY_NAME} \
   --url-map={URL_MAP} \
   --global \
   --certificate-manager-certificates={CERTIFICATE_NAME}

 

 

4. 번외

리소스 삭제



참고

- 와일드 카드 도메인 이름(예: `*.myorg.example.com`)에 DNS 승인과 함께 Google 관리형 인증서를 사용합니다.
부하 분산기 승인을 사용하는 Google 관리형 인증서는 와일드 카드 도메인 이름을 지원하지 않는다.출처
위 실습은 DNS 승인을 사용함.
관련 게시글 : 베스핀글로벌 작성
- certificate-manager map 생성 예시

반응형