소비자 HTTP(S) 서비스 제어로 Private Service Connect를 사용하여 Google API 액세스

Private Service Connect를 사용하면 직접 정의한 내부 IP 주소를 사용하여 Virtual Private Cloud(VPC) 네트워크 외부의 서비스에 연결할 수 있습니다.

내부 HTTP(S) 부하 분산기를 사용해 소비자 HTTP(S) 서비스 제어로 Private Service Connect 엔드포인트를 만들면 여러 서비스 프로듀서 간에 일관된 정책을 유지할 수 있습니다.

자세한 내용은 Private Service Connect를 사용해 소비자 HTTP(S) 서비스 제어로 Google API에 액세스를 참조하세요.

Private Service Connect에 사용되는 내부 HTTP(S) 부하 분산기는 공유 VPC 네트워크연결된 네트워크에서 연결될 수 있습니다.

역할

Compute 부하 분산기 관리자 역할(roles/compute.loadBalancerAdmin)에는 이 가이드에서 설명하는 태스크를 수행하는 데 필요한 권한이 포함되어 있습니다.

지원되는 서비스

지원되는 리전 서비스 엔드포인트 목록을 참조하세요.

시작하기 전에

  • 프로젝트에서 Compute Engine API사용 설정합니다.

  • 서비스 디렉터리에서 부하 분산 전달 규칙을 등록하려면 프로젝트에서 Service Directory API사용 설정합니다. 서비스 디렉터리를 구성하려면 Google Cloud CLI 또는 API를 사용하여 전달 규칙을 만들어야 합니다.

  • 프록시 전용 서브넷이 아직 없으면 만듭니다. 내부 HTTP(S) 부하 분산기를 만들려는 VPC 네트워크 및 리전에 단일 프록시 전용 서브넷이 있어야 합니다. 이 서브넷은 네트워크 및 리전 내의 모든 내부 HTTP(S) 부하 분산기에 사용됩니다.

  • 아직 없으면 도메인에 대해 비공개 키 및 인증서를 만듭니다. 자체 관리형 SSL 인증서 사용 1단계를 참조하세요. 부하 분산기를 구성할 때 대상 HTTPS 프록시를 만들려면 비공개 키 및 인증서가 필요합니다.

네트워크 엔드포인트 그룹 만들기

부하 분산기를 사용하여 제공할 각 서비스에 대해 Private Service Connect 네트워크 엔드포인트 그룹(NEG)을 만듭니다.

Console

  1. Google Cloud Console의 네트워크 엔드포인트 그룹 페이지로 이동합니다.
    네트워크 엔드포인트 그룹으로 이동
  2. 네트워크 엔드포인트 그룹 만들기를 클릭합니다.
  3. 네트워크 엔드포인트 그룹의 이름을 입력합니다.
  4. 네트워크 엔드포인트 그룹 유형네트워크 엔드포인트 그룹(Private Service Connect)을 선택합니다.
  5. 네트워크 엔드포인트 그룹의 리전을 선택합니다.
  6. 네트워크 엔드포인트 그룹의 대상 서비스를 선택합니다.
  7. 만들기를 클릭합니다.

gcloud

gcloud compute network-endpoint-groups create NEG_NAME \
  --network-endpoint-type=private-service-connect \
  --psc-target-service=TARGET_SERVICE \
  --region=REGION

다음을 바꿉니다.

  • NEG_NAME: 네트워크 엔드포인트 그룹의 이름입니다.

  • TARGET_SERVICE: 연결할 대상 서비스입니다. 지원되는 리전 서비스 엔드포인트 목록을 참조하세요.

  • REGION: 네트워크 엔드포인트 그룹을 만들 리전입니다. 리전은 연결할 서비스와 동일한 리전이어야 합니다.

부하 분산기 구성

모든 부하 분산기 구성요소를 Private Service Connect 네트워크 엔드포인트 그룹과 동일한 리전에 만들어야 합니다.

Console

부하 분산기 유형 선택

  1. Google Cloud Console에서 부하 분산 페이지로 이동합니다.
    부하 분산으로 이동
  2. HTTP(S) 부하 분산 아래에서 구성 시작을 클릭합니다.
  3. VM 사이에서만 분산을 선택합니다. 이 설정은 부하 분산기가 내부용이라는 의미입니다.
  4. 계속을 클릭합니다.

기본 구성

  1. 부하 분산기의 이름을 입력합니다.
  2. 부하 분산기의 리전을 선택합니다.
  3. 부하 분산기의 네트워크를 선택합니다.

    네트워크에는 NEG 및 부하 분산기를 만들려는 리전의 프록시 전용 서브넷이 포함되어야 합니다. 서브넷이 없으면 서브넷 예약을 클릭하여 서브넷을 만들 수 있습니다.

  4. 계속하려면 창을 열어둡니다.

백엔드 구성

Private Service Connect 네트워크 엔드포인트 그룹은 부하 분산기 백엔드 유형입니다. 구성하려는 백엔드마다 백엔드 서비스를 만듭니다.

  1. 백엔드 구성을 클릭합니다.
  2. 구성하려는 Private Service Connect 네트워크 엔드포인트 그룹마다 백엔드 서비스를 만듭니다.

    1. 백엔드 서비스 만들기 또는 선택 메뉴에서 백엔드 서비스 만들기를 선택합니다.
    2. 백엔드 서비스의 이름을 입력합니다.
    3. 백엔드 유형Private Service Connect 네트워크 엔드포인트 그룹으로 설정합니다.
    4. 프로토콜에 HTTPS를 선택합니다.

      이 부하 분산기 구성에는 이름이 지정된 포트 설정이 사용되지 않습니다. 이름이 지정된 기본 포트 설정을 유지합니다.

    5. 백엔드 섹션에서 새 백엔드 메뉴를 클릭하고 Private Service Connect 네트워크 엔드포인트 그룹을 선택합니다.

      새 Private Service Connect 네트워크 엔드포인트 그룹을 만들어야 하는 경우 Private Service Connect 네트워크 엔드포인트 그룹 만들기를 클릭합니다.

라우팅 규칙

부하 분산기에 백엔드 서비스 하나만 구성하는 경우 기본 라우팅 규칙으로 충분하며 프런트엔드 구성으로 건너뛸 수 있습니다.

  1. 백엔드 서비스가 2개 이상 있으면 라우팅 규칙을 클릭합니다.
  2. 단순한 호스트 및 경로 규칙을 선택합니다.
  3. 각 백엔드에서 다음을 수행합니다.
    1. 호스트 및 경로 규칙 추가
    2. 호스트에 이 서비스에 요청을 보내는 데 사용할 호스트 이름을 입력합니다(예: cloudkms.example.com).
    3. 경로에 경로를 입력합니다(예: /*).
    4. 백엔드에 백엔드 서비스를 선택합니다.

프런트엔드 구성

  1. 프런트엔드 구성을 클릭합니다.
  2. 프런트엔드 IP 및 포트 추가를 클릭합니다.
  3. 부하 분산기의 이름을 입력합니다.
  4. 프로토콜 필드에서 HTTPS(HTTP/2 포함)를 선택합니다.
  5. 부하 분산기의 서브네트워크를 선택합니다.
  6. HTTPS 트래픽을 허용하도록 포트443으로 설정되어 있는지 확인합니다.
  7. IP 주소에 메뉴에서 IP 주소를 선택합니다.

    새 IP 주소를 예약하려면 IP 주소 만들기를 클릭합니다.

  8. 인증서 드롭다운 목록을 클릭합니다.

    1. 사용할 자체 관리형 SSL 인증서 리소스가 이미 있으면 메뉴에서 이를 선택합니다.
    2. 그 이외의 경우 새 인증서 만들기를 선택합니다.
    3. 인증서 이름을 입력합니다.
    4. 해당 필드에 다음 PEM 형식의 파일을 업로드합니다.
      • 인증서
      • 비공개 키
    5. 만들기를 클릭합니다.
  9. 완료를 클릭합니다.

검토 및 완료

  1. 검토 및 완료를 클릭하여 구성을 검토합니다.
  2. 만들기를 클릭합니다.

gcloud

  1. 만든 네트워크 엔드포인트 그룹마다 백엔드 서비스를 만듭니다.

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
     --load-balancing-scheme=INTERNAL_MANAGED \
     --protocol=HTTPS \
     --region=REGION
    

    다음을 바꿉니다.

    • BACKEND_SERVICE_NAME: 백엔드 서비스 이름입니다.
    • REGION: 백엔드 서비스를 만들 리전입니다.
  2. 생성된 백엔드 서비스마다 해당하는 NEG를 백엔드 서비스에 추가합니다.

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
     --network-endpoint-group=NEG_NAME \
     --region=REGION
    

    다음을 바꿉니다.

    • BACKEND_SERVICE_NAME: 백엔드 서비스 이름입니다.
    • NEG_NAME: 네트워크 엔드포인트 그룹의 이름입니다.
    • REGION: 백엔드의 리전입니다.
  3. 부하 분산기의 URL 맵을 만듭니다.

    URL 맵은 기본 백엔드 서비스를 참조해야 합니다. 하나의 백엔드 서비스로 부하 분산기를 구성하는 경우 백엔드 서비스를 기본값으로 설정합니다. 다음 단계에서 만드는 호스트 규칙 및 경로 일치자에서 참조되는 여러 백엔드 서비스를 사용하도록 부하 분산기를 구성하는 경우 URL 맵 기본값으로 사용할 백엔드 서비스 중 하나를 선택합니다.

    gcloud compute url-maps create URL_MAP_NAME \
     --default-service=DEFAULT_BACKEND_SERVICE_NAME \
     --region=REGION
    

    다음을 바꿉니다.

    • URL_MAP_NAME: URL 맵의 이름입니다.

    • DEFAULT_BACKEND_SERVICE_NAME: 부하 분산기의 기본값 이름입니다. 기본값은 호스트 규칙이 요청된 호스트 이름과 일치할 때 사용됩니다.

    • REGION: URL 맵을 만들 리전입니다.

  4. URL 맵에 백엔드 서비스를 더 추가합니다.

    URL 맵에서 둘 이상의 백엔드 서비스를 참조해야 하는 경우 다음 단계를 완료합니다. URL 맵이 하나의 백엔드 서비스만 참조하는 경우에는 이 단계를 건너뜁니다.

    1. 백엔드 서비스마다 경로 일치자를 추가합니다. 경로 일치자를 백엔드 서비스당 하나씩 만들어야 합니다.
    gcloud compute url-maps add-path-matcher URL_MAP_NAME \
     --path-matcher-name=PATH_MATCHER \
     --default-service=BACKEND_SERVICE_NAME \
     --region=REGION
    

    다음을 바꿉니다.

    • URL_MAP_NAME: URL 맵의 이름입니다.
    • PATH_MATCHER: 경로 일치자의 이름입니다.
    • BACKEND_SERVICE_NAME: 백엔드 서비스 이름입니다.
    • REGION: URL 맵의 리전입니다.
    1. 각 호스트 이름에 대해 호스트 규칙을 추가합니다.

      호스트 규칙마다 경로 일치자를 하나씩 참조할 수 있지만 2개 이상의 호스트 규칙이 동일한 경로 일치자를 참조할 수 있습니다.

      gcloud compute url-maps add-host-rule URL_MAP_NAME \
      --hosts=HOST \
      --path-matcher-name=PATH_MATCHER \
      --region=REGION
      

      다음을 바꿉니다.

      • URL_MAP_NAME: URL 맵의 이름입니다.
      • HOST: 이 호스트에 대해 요청을 전송할 호스트 이름입니다. 예를 들면 cloudkms.example.com입니다.
      • PATH_MATCHER: 경로 일치자의 이름입니다.
      • REGION: URL 맵의 리전입니다.
  5. 대상 HTTPS 프록시를 만듭니다.

    gcloud compute ssl-certificates create 명령어를 사용하여 리전별 SSL 인증서 리소스를 만듭니다. 내부 HTTP(S) 부하 분산기에서는 Google 관리 인증서가 지원되지 않습니다.

    gcloud compute ssl-certificates create CERTIFICATE \
     --certificate=LB_CERT \
     --private-key=LB_PRIVATE_KEY \
     --region=REGION
    

    다음을 바꿉니다.

    • CERTIFICATE: 인증서의 이름입니다.

    • LB_CERT: 자체 관리형 인증서에 대한 PEM 형식 인증서의 경로입니다.

    • LB_PRIVATE_KEY: 자체 관리형 인증서에 대한 PEM 형식 비공개 키 파일의 경로입니다.

    • REGION: 인증서의 리전입니다.

    리전별 SSL 인증서 리소스를 사용해서 gcloud compute target-https-proxies create 명령어로 대상 HTTPS 프록시를 만듭니다.

    gcloud compute target-https-proxies create PROXY_NAME \
       --url-map=URL_MAP_NAME \
       --region=REGION \
       --ssl-certificates=CERTIFICATE
    

    다음을 바꿉니다.

    • PROXY_NAME: 대상 HTTPS 프록시의 이름입니다.
    • URL_MAP_NAME: URL 맵의 이름입니다.
    • REGION: 인증서 리소스의 리전입니다.
    • CERTIFICATE: 인증서 리소스의 이름입니다.
  6. 전달 규칙에 리전 내부 IPv4 주소를 예약합니다.

    gcloud compute addresses create ADDRESS_NAME \
     --ip-version=IPV4 \
     --region=REGION \
     --subnet=SUBNETWORK
    

    다음을 바꿉니다.

    • ADDRESS_NAME: IP 주소 리소스의 이름입니다.
    • REGION: IP 주소를 만들 리전입니다.
    • SUBNET: IP 주소를 만들 서브넷입니다.

    다음 명령어를 실행하여 예약된 IP 주소를 봅니다. 부하 분산기를 만든 후에는 IP 주소를 사용하여 구성을 확인할 수 있습니다.

    gcloud compute addresses describe ADDRESS_NAME \
     --format="get(address)" --region=REGION
    
  7. 전달 규칙을 만듭니다.

    gcloud compute forwarding-rules create 명령어를 사용하여 전달 규칙을 만듭니다.

    gcloud compute forwarding-rules create FWD_RULE \
     --load-balancing-scheme=INTERNAL_MANAGED \
     --network=NETWORK \
     --address=ADDRESS_NAME \
     --ports=443 \
     --region=REGION \
     --target-https-proxy=PROXY_NAME \
     --target-https-proxy-region=PROXY_REGION \
     [--service-directory-registration=SD_SERVICE_NAME]
    

    다음을 바꿉니다.

    • FWD_RULE: 전달 규칙의 이름입니다.

    • NETWORK: 전달 규칙을 만들 리전입니다.

    • ADDRESS_NAME: 예약된 IP 주소입니다.

    • REGION: 전달 규칙의 리전입니다.

    • PROXY_NAME: 대상 HTTPS 프록시의 이름입니다.

    • PROXY_REGION: 대상 HTTPS 프록시의 리전입니다.

    • SD_SERVICE_NAME: 부하 분산기를 등록하려는 서비스 디렉터리 서비스의 URI입니다. 형식은 projects/PROJECT/locations/REGION/namespaces/NAMESPACE_NAME/services/SERVICE_NAME입니다. --service-directory-registration 지정은 선택사항입니다.

DNS 레코드 구성

전달 규칙의 IP 주소를 가리키도록 URL 맵에 추가한 각 호스트의 DNS 레코드를 구성합니다.

예를 들어 다음 구성으로 HTTP(S) 소비자 서비스 제어를 사용해서 Private Service Connect를 구성했다고 가정해보세요.

  • 대상 서비스 asia-east1-cloudkms.googleapis.com을 사용하는 Private Service Connect NEG

  • Private Service Connect NEG를 백엔드로 사용하는 내부 HTTP(S) 부하 분산기

  • cloudkms.example.com의 호스트 규칙을 정의하는 URL 맵

이 구성이 제대로 작동하려면 cloudkms.example.com이 전달 규칙의 IP 주소를 가리키도록 DNS 레코드를 만들어야 합니다.

cloudkms.example.com으로 전송된 요청은 부하 분산기로 전송되어 asia-east1-cloudkms.googleapis.com으로 전달됩니다.

Cloud DNS를 사용하여 DNS를 관리하는 경우 DNS 레코드 추가를 참조하세요.

구성 확인

  1. VM 인스턴스를 만듭니다.

    gcloud compute instances create VM_NAME \
       --network=NETWORK \
       --image-project=debian-cloud --image-family=debian-9 \
       --zone=ZONE
    

    다음을 바꿉니다.

    • VM_NAME: 가상 머신의 이름입니다.

    • NETWORK: VM의 네트워크입니다.

    • ZONE: VM의 영역입니다.

  2. VM에 연결합니다.

    gcloud compute ssh VM_NAME --zone=ZONE
    
  3. curl를 사용하여 구성을 확인합니다. 이 명령어는 Host 헤더를 설정하고 사용자 정의 IP 주소를 지정하여 DNS 변환을 우회합니다. HTTPS에 포트 443을 사용하는 것처럼 프로토콜의 기본 포트를 사용하는 경우 포트를 생략할 수 있습니다.

    필요한 경우 -k 플래그를 사용하면 인증서 유효성 검사를 건너뛸 수 있습니다. 자체 서명된 인증서를 사용해 대상 HTTPS 프록시를 구성했거나 인증서에 서명한 인증 기관의 인증서가 VM에 없는 경우 유효성 검사를 건너뛰어야 할 수 있습니다.

    curl [-k] -s 'https://HOST:443/RESOURCE_URI' \
       -H 'Host: HOST' \
       --connect-to HOST:443:FWD_RULE_IP_ADDRESS:443
    

    다음을 바꿉니다.

    • HOST: URL 맵에 구성된 호스트 이름입니다.

    • RESOURCE_URI: 인증에 사용할 리소스의 나머지 URI입니다. 예를 들어 부하 분산기에서 요청을 Cloud Key Management Service 리전 엔드포인트로 전달하는 경우 v1/projects/<var>PROJECT_ID</var>/locations를 사용할 수 있습니다.

    • FWD_RULE_IP_ADDRESS: 전달 규칙 구성에 사용되는 예약된 IP 주소 리소스인 ADDRESS_NAME에 할당된 IP 주소입니다.

온프레미스 호스트에서 Private Service Connect 사용

온프레미스 네트워크가 VPC 네트워크에 연결된 경우 소비자 HTTP(S) 서비스 제어를 사용하여 Private Service Connect를 제공하는 내부 HTTP(S) 부하 분산기에 연결할 수 있습니다.

  • 온프레미스 네트워크가 내부 HTTP(S) 분산기와 동일한 리전의 Cloud VPN 터널 또는 Cloud Interconnect 연결(VLAN)을 사용하는 내부 HTTP(S) 부하 분산기를 포함한 VPC 네트워크에 연결되어야 합니다.

  • 온프레미스 네트워크에는 내부 HTTP(S) 부하 분산기에 대해 적절한 경로가 있어야 합니다. Cloud VPN 터널 또는 Cloud Interconnect 연결(VLAN)에 대해 BGP 세션을 관리하는 각 Cloud Router가 내부 HTTP(S) 부하 분산기 전달 규칙에 사용되는 서브넷의 기본 IP 주소 범위를 공지하도록 구성되었는지 확인합니다. Cloud Router는 기본적으로 서브넷 경로를 공지합니다.

  • 내부 HTTP(S) 부하 분산기의 URL 맵에서 호스트 이름이 내부 HTTP(S) 부하 분산기 전달 규칙 IP 주소로 변환되도록 온프레미스 시스템을 구성해야 합니다. 온프레미스 네임서버에서 DNS 레코드를 만들거나 Cloud DNS를 사용할 수 있습니다.

    Cloud DNS 관리 비공개 영역을 사용하여 DNS 레코드를 만든 경우 다음 단계를 수행합니다.

    • 온프레미스 네트워크가 연결되는 VPC 네트워크에 인바운드 서버 정책을 만듭니다.

    • Cloud VPN 터널 및 Cloud Interconnect 연결(VLAN)이 있는 리전 및 온프레미스 네트워크가 연결되는 VPC 네트워크에서 인바운드 전달자 진입점을 식별합니다.

    • URL 맵의 호스트 이름에 대한 DNS 요청을 Cloud DNS 인바운드 전달자 진입점에 전달하도록 온프레미스 DNS 네임서버를 구성합니다.

그림 1. Private Service Connect, Cloud Router, 온프레미스 호스트를 구성하면 리전 서비스 엔드포인트를 사용하여 Google API 및 서비스에 연결할 수 있습니다.