동일한 호스트 이름으로 보안 및 비보안 콘텐츠 전송

Cloud CDN을 사용할 때는 동일한 호스트 이름으로 HTTP 및 HTTPS 콘텐츠를 제공하는 것이 일반적입니다. 대부분의 브라우저가 전송 계층 보안(TLS) 사용을 강제 적용하고 비보안 콘텐츠 전송을 허용하지 않지만 여전히 동일한 호스트 이름에 대해 비보안 전송 및 보안 전송을 허용해야 하는 사용 사례가 있습니다. 이 문서에서는 Cloud CDN을 사용하여 이 기능을 수행하는 방법을 설명합니다.

도전과제

클라이언트가 CDN 에지 서버와의 연결을 설정하면 최종 사용자 전송 프로토콜이 협상됩니다. 대부분의 기존 CDN 플랫폼은 다음 방법으로 트래픽을 각 전송 공간으로 보냅니다.

  1. DNS CNAME 레코드를 사용하여 CDN에 속한 도메인 이름을 가리킵니다.
  2. 해당 도메인 이름에 TLS 협상을 지원하는 서버 하위 집합으로 트래픽을 라우팅합니다.

Cloud CDN은 Cloud Load Balancing과 통합되므로 Cloud CDN의 접근 방식은 기존 CDN의 접근 방식과 다릅니다. Cloud CDN은 외부 애플리케이션 부하 분산기의 애니캐스트 IP 주소를 활용합니다. Cloud CDN을 구성할 때 트래픽을 전달할 특정 IP 주소가 있어야 합니다. 이렇게 하려면 DNS 레코드에 호스트 이름 값이 있는 CNAME 레코드가 아니라 A 레코드(IPv4의 경우) 또는 AAAA(IPv6의 경우) 레코드를 구성해야 합니다.

기본적으로 부하 분산기의 프런트엔드를 구성할 때 Google Cloud는 임시 IP 주소를 동적으로 할당합니다. HTTP 및 HTTPS 구성을 별도로 구성해야 하므로 Cloud CDN 인스턴스에 두 개의 IP 주소가 포함될 수 있습니다. 동일한 A 또는 AAAA 레코드 IP 주소는 HTTP와 HTTPS에 모두 사용되므로 DNS에서 이 사례를 올바르게 처리할 수 없습니다.

솔루션

동일한 호스트 이름으로 보안 콘텐츠와 비보안 콘텐츠를 모두 제공하는 경우 클라이언트는 HTTP 또는 HTTPS를 협상할 수 있는 에지 서버로 전달됩니다. Cloud CDN에서 작동하도록 하려면 IP 주소를 예약하고 외부 애플리케이션 부하 분산기의 HTTP 및 HTTPS 프런트엔드 구성에 예약된 IP 주소를 결합합니다.

동일한 도메인의 HTTP 및 HTTPS
동일한 도메인의 HTTP 및 HTTPS

다이어그램에서:

  • www.example.com에 대해 수신되는 요청은 HTTP/2, HTTPS, HTTP를 사용하는 클라이언트에서 발생합니다.
  • 2개의 IP 주소가 예약되며, 하나는 IPv4용이고 다른 하나는 IPv6용입니다.

    • 34.95.111.204
    • [2600:1901:0:b13e::]
  • 이 두 IP 주소는 Cloud DNS에서 www.example.com에 결합됩니다.

  • 외부 애플리케이션 부하 분산기를 구성할 때 프런트엔드 구성에는 예약된 IP 주소를 사용하는 4개의 전달 규칙이 포함됩니다.

    이름 프로토콜 IP:포트
    ipv4-http HTTP 34.95.111.204:80
    ipv4-https HTTPS 34.95.111.204:443
    ipv6-http HTTP [2600:1901:0:b13e::]:80
    ipv6-https HTTPS [2600:1901:0:b13e::]:443
  • Cloud CDN 캐시 부적중의 경우 부하 분산기는 부하 분산기의 URL 맵에 정의된 설정에 따라 백엔드 원본에 요청을 배포합니다.

1단계: 전역 외부 IP 주소 예약

IPv4 또는 IPv6 주소(또는 둘 다)를 만듭니다. IPv4 및 IPv6 주소 지정을 지원하려면 IPv4 주소 1개와 IPv6 주소 1개를 만들어야 합니다.

DNS 레코드에서 이 예약된 IP 주소로 트래픽을 전달할 A(또는 AAAA) 레코드를 만듭니다.

콘솔

  1. Google Cloud 콘솔에서 외부 IP 주소 페이지로 이동합니다.

    외부 IP 주소 페이지로 이동

  2. 고정 주소 예약을 클릭하여 IPv4 주소를 예약합니다.
  3. ipv4-address이름을 할당합니다.
  4. 네트워크 등급을 프리미엄으로 설정합니다.
  5. IP 버전IPv4로 설정합니다.
  6. 유형전역으로 설정합니다.
  7. 예약을 클릭합니다.

Cloud CDN이 사용 설정된 경우 부하 분산기는 필요에 따라 프리미엄 등급 네트워킹을 사용합니다.

gcloud

gcloud compute addresses create ipv4-address \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

예약된 IPv4 주소를 확인합니다.

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

IPv6에 대해 이 단계를 반복합니다.

자세한 내용은 새 고정 외부 IP 주소 예약을 참조하세요.

2단계: 예약된 IP 주소를 부하 분산기에 결합

이 섹션에서는 IP 주소를 부하 분산기에 할당하는 방법을 보여줍니다. 부하 분산기 설정에 대한 엔드 투 엔드 지침은 이 문서에서 다루지 않습니다. 설정 예시는 HTTPS 부하 분산기 만들기를 참조하세요.

프런트엔드 구성 섹션에서는 클라이언트와 부하 분산기 간에 사용되는 프로토콜을 선택할 수 있습니다.

이 예시에서는 클라이언트와 부하 분산기 사이에 HTTP와 HTTPS를 모두 사용하므로 프록시를 구성하려면 하나 이상의 SSL 인증서 리소스가 필요합니다.

콘솔

HTTP 전달 규칙 구성

  1. Google Cloud Console에서 부하 분산 페이지로 이동합니다.

    부하 분산 페이지로 이동

  2. 부하 분산기를 선택하고 수정을 클릭합니다.
  3. 왼쪽 패널에서 프런트엔드 구성을 클릭합니다.
  4. 이름 필드에 ipv4-http을 입력합니다.
  5. 프로토콜 필드에서 HTTP를 선택합니다.
  6. IP 버전IPv4로 설정합니다.
  7. IP 주소에서 앞서 만든 ipv4-address을 선택합니다.
  8. HTTP 트래픽을 허용하도록 포트80으로 설정되어 있는지 확인합니다.
  9. 완료를 클릭합니다.

HTTPS 전달 규칙 구성

  1. Google Cloud Console에서 부하 분산 페이지로 이동합니다.

    부하 분산 페이지로 이동

  2. 부하 분산기를 선택하고 수정을 클릭합니다.
  3. 왼쪽 패널에서 프런트엔드 구성을 클릭합니다.
  4. 이름 필드에 ipv4-https을 입력합니다.
  5. 프로토콜 필드에서 HTTPS를 선택합니다.
  6. IP 버전IPv4로 설정합니다.
  7. IP 주소에서 앞서 만든 ipv4-address을 선택합니다.
  8. HTTP 트래픽을 허용하도록 포트443으로 설정되어 있는지 확인합니다.
  9. 인증서 드롭다운 목록을 클릭합니다.
    1. 이미 기본 SSL 인증서로 사용할 자체 관리형 SSL 인증서 리소스가 있다면 드롭다운 메뉴에서 선택합니다.
    2. 그 이외의 경우 새 인증서 만들기를 선택합니다.
    3. 인증서 업로드 또는 Google 관리형 인증서 만들기를 선택합니다.
    4. 인증서 업로드를 선택한 경우 다음 단계를 완료합니다.
      1. www-ssl-cert이름을 입력합니다.
      2. 해당 필드에 공개 키 인증서(.crt 파일), 인증서 체인(.csr 파일), 비공개 키(.key 파일)를 업로드합니다.
      3. 만들기를 클릭합니다.
    5. Google에서 관리하는 인증서 만들기를 선택한 경우 도메인을 입력합니다.
    6. 기본 SSL 인증서 리소스 외에 인증서 리소스를 추가하려면 다음 안내를 따르세요.
      1. 인증서 추가를 클릭합니다.
      2. 인증서 목록에서 인증서를 선택하거나 새 인증서 만들기를 클릭하고 위의 안내를 따릅니다.
  10. 완료를 클릭합니다.

IPv6에 대해 이 단계를 반복합니다.

검토 및 완료

  1. 왼쪽 패널에서 검토 및 완료를 클릭합니다.
  2. 만들려던 설정과 현재 설정을 비교합니다.
  3. 모든 설정이 올바른 것으로 확인되면 업데이트를 클릭합니다.

gcloud

  1. 대상 HTTP 프록시를 만들어 URL 맵에 요청을 라우팅합니다.

    gcloud compute target-http-proxies create http-lb-proxy \
      --url-map=web-map
    
  2. 대상 HTTPS 프록시를 만들어 요청을 URL 맵으로 라우팅합니다. 프록시는 HTTPS 부하 분산을 위해 SSL 인증서를 포함하는 부하 분산기의 일부분이므로 이 단계에서 인증서도 로드합니다.

    gcloud compute target-https-proxies create https-lb-proxy \
      --url-map=web-map --ssl-certificates=www-ssl-cert
    
  3. 생성한 IP 주소 각각에 대해 하나씩 두 개의 전역 전달 규칙을 만들어 수신되는 요청을 프록시로 라우팅합니다.

    • 전역 외부 애플리케이션 부하 분산기의 경우 gcloud CLI 명령어를 load-balancing-scheme=EXTERNAL_MANAGED와 함께 사용합니다. 이 설정은 고급 트래픽 관리 기능을 제공합니다.
    • 기본 애플리케이션 부하 분산기의 경우 load-balancing-scheme=EXTERNAL을 사용합니다.
    gcloud compute forwarding-rules create ipv4-http \
      --load-balancing-scheme=LOAD_BALANCING_SCHEME \
      --network-tier=PREMIUM \
      --address=ipv4-address \
      --global \
      --target-http-proxy=http-lb-proxy \
      --ports=80
    
    gcloud compute forwarding-rules create ipv4-https \
      --load-balancing-scheme=LOAD_BALANCING_SCHEME \
      --network-tier=PREMIUM \
      --address=ipv4-address  \
      --global \
      --target-https-proxy=https-lb-proxy \
      --ports=443
    

전역 전달 규칙을 만든 후에 구성이 전역적으로 적용되는 데 몇 분 정도 걸릴 수 있습니다.

3단계: DNS 영역 파일에 A 또는 AAAA 레코드 만들기

프로세스의 마지막 단계는 부하 분산기에 할당한 예약된 IP 주소로 호스트 이름 값이 응답하는 Cloud CDN을 가리키도록 DNS 영역 파일에 A 및/또는 AAAA 레코드를 만드는 것입니다.

이제 Cloud CDN을 통해 동일한 호스트 이름으로 HTTP와 HTTPS를 모두 제공할 수 있습니다.

선택사항: HTTP를 HTTPS로 리디렉션

HTTP 요청을 HTTPS 부하 분산기로 리디렉션하려면 프런트엔드가 있지만 백엔드는 없는 부분 HTTP 부하 분산기를 추가해야 합니다. 프런트엔드는 요청을 수신한 후 HTTPS 부하 분산기로 리디렉션합니다. 이 작업은 다음을 사용하여 수행합니다.

  • 이 페이지에 나와 있는 것처럼 HTTPS 부하 분산기에서 사용하는 것과 동일한 예약된 외부 IP 주소가 있는 전달 규칙
  • 이 페이지에 나와 있는 대상 HTTP 프록시
  • HTTPS 부하 분산기로 트래픽을 리디렉션하는 URL 맵

지원 받기

Google Cloud 및 Cloud CDN에 대해 궁금한 점이 있으면 Google Cloud 영업팀에 문의하거나 Google Cloud 커뮤니티 Slack 채널을 통해 #cloud-cdn 채널에 메모를 게시하세요.

다음 단계