Google API 및 서비스로 비공개 연결 설정

VPC 서비스 제어를 사용하면 비공개 IP 주소를 사용하는 호스트에서 Google API와 서비스에 대한 액세스를 제어할 수 있습니다. 이러한 호스트는 VPC 네트워크의 VM 인스턴스 또는 온프레미스 네트워크의 클라이언트일 수 있습니다.

VPC 서비스 제어 지원 Google API와 서비스만 특정 서비스 경계 내 비공개 Google 액세스를 허용하려면 호스트가 *.googleapis.com 대신 restricted.googleapis.com 도메인 이름으로 요청을 보내야 합니다. restricted.googleapis.com 도메인은 VIP(가상 IP 주소) 범위 199.36.153.4/30으로 확인됩니다. 이 IP 주소 범위는 인터넷에 공개되지 않습니다.

다음 섹션에서는 VPC 네트워크 또는 온프레미스 네트워크의 호스트에 비공개 연결을 설정하는 방법을 설명합니다. 개요 및 토폴로지 예시 다이어그램은 VPC 서비스 제어에서 비공개 Google 액세스 사용을 참조하세요.

시작하기 전에

  • Google Cloud Console의 API 및 서비스 페이지를 통해 액세스하려는 API를 사용 설정해야 합니다.
  • 프로젝트 소유자, 편집자, 네트워크 관리자 역할을 갖는 IAM 구성원은 서브넷을 만들거나 업데이트하고 IP 주소를 할당할 수 있습니다. 역할에 대한 자세한 내용은 IAM 역할 문서를 참조하세요.
  • 비공개 Google 액세스와 온프레미스 호스트의 비공개 Google 액세스에는 VPC 네트워크가 필요합니다. 자동 모드와 커스텀 모드의 VPC 네트워크가 모두 지원됩니다. 기존 네트워크는 지원되지 않습니다.
  • VPC 네트워크의 VM 인스턴스에는 비공개 IP 주소만 있고 공개 IP 주소는 없어야 하고 이 인스턴스는 비공개 Google 액세스가 사용 설정된 서브넷에 있어야 합니다.
  • 온프레미스 호스트의 경우 VPC 네트워크에 대한 기존 Cloud VPN 터널 또는 Cloud Interconnect 연결이 있어야 합니다.

절차 개요

비공개 연결을 설정하려면 다음 태스크를 완료합니다.

  • 대상 199.36.153.4/30의 경로를 구성합니다. 자세한 내용은 경로 구성을 참조하세요.
  • 제한된 Google API IP 주소 범위에 적절한 트래픽이 허용되도록 방화벽 규칙을 구성합니다. 자세한 내용은 방화벽 규칙 구성을 참조하세요.
  • Google API에 대한 트래픽이 제한된 Google API IP 범위를 확인하도록 DNS를 구성합니다. 자세한 내용은 DNS 구성을 참조하세요.

restricted.googleapis.com에 대한 경로 구성

비공개 Google 액세스와 온프레미스 호스트의 비공개 Google 액세스 모두의 경우 VPC 네트워크에는 다음 홉이 기본 인터넷 게이트웨이인 199.36.153.4/30에 대한 대상이 있는 경로가 포함되어야 합니다. 다음 홉이 기본 인터넷 게이트웨이지만 199.36.153.4/30으로 전송된 트래픽은 Google의 네트워크에 남아 있습니다. VPC 네트워크에 기본 홉이 기본 인터넷 게이트웨이인 기본 경로가 이미 있을 수 있습니다. 그렇지 않으면 대상이 199.36.153.4/30이고 다음 홉이 기본 인터넷 게이트웨이인 커스텀 정적 경로를 만들 수 있습니다.

커스텀 정적 경로 외에 온프레미스의 비공개 Google 액세스에 커스텀 경로 공지가 있어야 온프레미스 네트워크의 호스트가 제한된 VIP를 알아볼 수 있습니다. Cloud Router를 사용하는 커스텀 동적 경로를 만들어 제한된 VIP를 알릴 수 있습니다.

VPC 경로 작업에 대한 자세한 내용은 VPC 문서의 경로 사용을 참조하세요.

VPC 네트워크에서 커스텀 정적 경로 구성

VPC 서비스 제어에서 지원하는 Google 관리 서비스에 액세스할 수 있도록 커스텀 정적 경로를 추가합니다.

  • VPC 서비스 제어로 보호되는 Google 관리형 서비스에만 액세스를 허용하는 커스텀 경로를 추가합니다.

    gcloud compute routes create ROUTE_NAME \
      --network=NETWORK_NAME \
      --destination-range=199.36.153.4/30 \
      --next-hop-gateway=default-internet-gateway
    

    각 항목의 의미는 다음과 같습니다.

    • ROUTE_NAME은 커스텀 경로의 이름입니다.

    • NETWORK_NAME은 VPC 네트워크의 이름입니다.

온프레미스 네트워크의 호스트에 대한 제한된 경로 알림

온프레미스 호스트에 비공개 Google 액세스를 사용하는 경우 Google API 트래픽이 Cloud VPN 또는 Cloud Interconnect 연결을 통해 전달되도록 경로를 구성합니다. 제한된 VIP(199.36.153.4/30)를 온프레미스 네트워크에 알리려면 Cloud Router 커스텀 경로 공지를 사용합니다. 이 IP 주소 범위는 비공개 IP 주소를 통해 VPC 네트워크에 연결할 수 있는 온프레미스 호스트에만 액세스할 수 있습니다.

Cloud Router(라우터의 모든 BGP 세션용) 또는 일부 BGP 세션(단일 Cloud VPN 터널 또는 VLAN 연결용)에 이 커스텀 경로 공지를 추가할 수 있습니다.

기존 Cloud Router의 모든 BGP 세션에 대한 제한된 범위의 커스텀 경로 공지를 만드는 방법은 다음과 같습니다.

Console


  1. Google Cloud Console의 Cloud Router 페이지로 이동합니다.
    Cloud Router 목록
  2. 업데이트할 Cloud Router를 선택합니다.
  3. Cloud Router의 세부정보 페이지에서 수정을 선택합니다.
  4. 공지된 경로 섹션을 펼칩니다.
  5. 경로커스텀 경로 만들기를 선택합니다.
  6. Cloud Router에서 사용할 수 있는 서브넷을 계속 공지하려면 Cloud Router에 표시되는 모든 서브넷 공지를 선택합니다. 이 옵션을 사용 설정하면 Cloud Router의 기본 동작을 모방합니다.
  7. 공지 경로를 추가하려면 커스텀 경로 추가를 선택합니다.
  8. 경로 공지를 구성합니다.
    • 소스 - 커스텀 IP 범위를 지정하려면 커스텀 IP 범위를 선택합니다.
    • IP 주소 범위 - 199.36.153.4/30을 지정합니다.
    • 설명 - Restricted Google APIs IPs 설명을 추가합니다.
  9. 경로 추가가 완료되면 저장을 선택합니다.

gcloud


update 명령어를 실행하고 --set-advertisement-ranges 플래그 또는 --add-advertisement-ranges 플래그를 사용하여 커스텀 IP 범위를 지정합니다.

  • 커스텀 IP 범위를 설정하려면 --set-advertisement-ranges 플래그를 사용합니다. 기존의 모든 커스텀 공지가 대체됩니다. 다음 예시에서는 my-router Cloud Router를 업데이트하여 모든 서브넷과 제한된 Google API IP 범위 199.36.153.4/30을 공지합니다.

    gcloud compute routers update my-router \
        --advertisement-mode CUSTOM \
        --set-advertisement-groups ALL_SUBNETS \
        --set-advertisement-ranges 199.36.153.4/30
    
  • 기존 공지에 커스텀 IP 범위를 추가하려면 --add-advertisement-ranges 플래그를 사용합니다. 이 플래그를 사용하려면 Cloud Router의 공지 모드가 이미 custom으로 설정되어 있어야 합니다. 다음 예시에서는 Restricted Google APIs IPs 커스텀 IP를 Cloud Router의 공지에 추가합니다.

    gcloud compute routers update my-router \
        --add-advertisement-ranges 199.36.153.4/30
    

기존 Cloud Router의 특정 BGP 세션에 제한된 범위의 커스텀 경로 공지를 만드는 방법은 다음과 같습니다.

Console


  1. Google Cloud Console의 Cloud Router 페이지로 이동합니다.
    Cloud Router 목록
  2. 업데이트할 BGP 세션이 있는 Cloud Router를 선택합니다.
  3. Cloud Router의 세부정보 페이지에서 업데이트할 BGP 세션을 선택합니다.
  4. BGP 세션 세부정보 페이지에서 수정을 선택합니다.
  5. 경로의 경우 커스텀 경로 만들기를 선택합니다.
  6. Cloud Router에서 사용할 수 있는 서브넷을 계속 공지하려면 Cloud Router에 표시되는 모든 서브넷 공지를 선택합니다. 이 옵션을 사용 설정하면 Cloud Router의 기본 동작을 모방합니다.
  7. 공지 경로를 추가하려면 커스텀 경로 추가를 선택합니다.
  8. 경로 공지를 구성합니다.
    • 소스 - 커스텀 IP 범위를 지정하려면 커스텀 IP 범위를 선택합니다.
    • IP 주소 범위 - 199.36.153.4/30을 지정합니다.
    • 설명Restricted Google APIs IPs 설명을 추가합니다.
  9. 경로 추가가 완료되면 저장을 선택합니다.

gcloud


update-bgp-peer 명령어를 실행하고 --set-advertisement-ranges 플래그 또는 --add-advertisement-ranges 플래그를 사용하여 커스텀 IP 범위를 지정합니다.

  • 커스텀 IP 범위를 설정하려면 --set-advertisement-ranges 플래그를 사용합니다. 기존의 모든 커스텀 공지가 대체됩니다. 다음 예시에서는 모든 서브넷과 커스텀 IP 범위 199.36.153.4/30 및 을 공지하도록 my-router Cloud Router의 my-bgp-session BGP 세션을 업데이트합니다.

    gcloud compute routers update-bgp-peer my-router \
        --peer-name my-bgp-session \
        --advertisement-mode CUSTOM \
        --set-advertisement-groups ALL_SUBNETS \
        --set-advertisement-ranges 199.36.153.4/30
    
  • 기존 공지에 커스텀 IP 범위를 추가하려면 --add-advertisement-ranges 플래그를 사용합니다. 이 플래그를 사용하려면 Cloud Router의 공지 모드가 이미 custom으로 설정되어 있어야 합니다. 다음 예시에서는 제한된 Google API IP 199.36.153.4/30을 Cloud Router의 공지에 추가합니다.

    gcloud compute routers update-bgp-peer my-router \
        --peer-name my-bgp-session \
        --add-advertisement-ranges 199.36.153.4/30
    

    커스텀 공지에 대한 자세한 내용은 커스텀 경로 공지를 참조하세요.

방화벽 규칙 구성

비공개 Google 액세스의 경우 VM 인스턴스는 내부 IP 주소를 사용하며 보호된 Google API 리소스에 액세스하는 데 외부 IP 주소가 필요하지 않습니다. 하지만 VM 인스턴스가 외부 IP 주소를 소유하거나 인터넷 액세스 요구사항을 충족할 수 있습니다. 커스텀 경로 외에도 이그레스 트래픽을 거부하는 방화벽 규칙을 만들어 VPC 네트워크의 VM 인스턴스에서 이그레스 트래픽을 제한할 수 있습니다.

기본적으로 묵시적인 허용 이그레스 방화벽 규칙은 해당 경로가 있으면 VM 인스턴스가 모든 대상에 트래픽을 보낼 수 있도록 허용합니다. 이그레스 거부 트래픽 규칙을 만들어 모든 아웃바운드 트래픽을 차단한 후 VPC 네트워크에서 선택한 대상과 199.36.153.4/30(restricted.googleapis.com) IP 주소 범위로 트래픽을 허용하는 우선 순위가 높은 이그레스 허용 규칙을 만들 수 있습니다. restricted.googleapis.com에 대한 모든 통신은 TCP 포트 443에 있습니다.

VPC 방화벽 규칙 작업에 대한 자세한 내용은 VPC 문서의 방화벽 규칙 사용을 참조하세요.

온프레미스 네트워크의 방화벽 규칙

온프레미스 호스트에서 199.36.153.4/30에 도달하는 트래픽을 허용하려면 온프레미스 방화벽 규칙을 구성해야 합니다.

DNS 구성

제한된 Google API IP 주소를 사용하려면 *.googleapis.comrestricted.googleapis.com의 CNAME으로 확인되도록 DNS 서버를 구성하고 restricted.googleapis.com의 A 레코드를 구성합니다. VPC 서비스 제어를 일반적으로 사용하려면 VPC 네트워크에 Cloud DNS 관리형 비공개 영역을 사용하는 것이 좋습니다.

온프레미스 액세스의 경우 온프레미스 네임서버가 Cloud DNS 관리형 비공개 영역을 쿼리할 수 있도록 Cloud DNS 인바운드 전달 정책을 구성하거나 온프레미스 네임서버를 BIND를 사용하는 온프레미스 네임서버처럼 구성할 수 있습니다.

  • Cloud DNS 비공개 DNS 영역을 사용하여 승인된 VPC 네트워크 및 특정 온프레미스 네임서버에서(전달을 구성한 경우) 액세스 가능한 DNS 영역을 호스트할 수 있습니다. restricted.googleapis.com의 A 레코드와 *.googleapis.com 이름마다 적절한 CNAME 레코드를 사용하여 googleapis.com에 비공개 영역을 만들 수 있습니다. Cloud DNS 비공개 영역은 부분적인 재정의를 지원하지 않습니다. 즉, *.googleapis.com에 대한 모든 요청을 restricted.googleapis.com으로 리디렉션만 선택할 수 있습니다. 따라서 restricted.googleapis.com VIP 사용을 지원하지 않는 Google API와 서비스를 사용할 수 없습니다. 자세한 내용은 영역 관리를 참조하세요.
  • Dataflow를 사용할 때는 커스텀 BIND가 지원되지 않습니다. VPC 서비스 제어에 Dataflow를 사용할 때 DNS 확인을 맞춤설정하려면 커스텀 BIND 서버를 사용하는 대신 Cloud DNS 비공개 영역을 사용합니다. 고유한 온프레미스 DNS 확인을 사용하려면 Google Cloud DNS 전달 방법을 사용하는 것이 좋습니다.

Cloud DNS로 DNS 구성

Cloud DNS를 사용하여 VPC 네트워크, 온프레미스 네트워크의 호스트 또는 둘 다에서 VM 인스턴스의 DNS 확인을 사용 설정합니다. 공유 VPC를 사용하는 경우 Cloud DNS 문서의 비공개 영역 및 공유 VPC를 참조하세요. 또한 공유 VPC를 사용할 경우 공유 VPC 네트워크 호스트 프로젝트가 네트워크에 연결된 프로젝트와 동일한 서비스 경계에 포함되어 있는지 확인합니다.

  1. VPC 네트워크의 관리형 비공개 영역을 만듭니다.

    gcloud beta dns managed-zones create ZONE_NAME \
     --visibility=private \
     --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \
     --description=DESCRIPTION \
     --dns-name=googleapis.com
    
    • ZONE_NAME은 만들려는 영역의 이름입니다. 예를 들면 vpc입니다. 이 이름은 다음과 같은 각 단계에서 사용됩니다.

    • PROJECT_ID는 VPC 네트워크를 호스팅하는 프로젝트의 ID입니다.

    • NETWORK_NAME은 VPC 네트워크의 이름입니다.

    • DESCRIPTION은 관리되는 영역에 대한 사람이 읽을 수 있는 설명입니다(선택사항).

  2. 트랜잭션을 시작합니다.

    gcloud dns record-sets transaction start --zone=ZONE_NAME
    
    • ZONE_NAME은 첫 번째 단계에서 생성한 영역의 이름입니다.
  3. DNS 레코드를 추가합니다.

    gcloud dns record-sets transaction add --name=*.googleapis.com. \
        --type=CNAME restricted.googleapis.com. \
        --zone=ZONE_NAME \
        --ttl=300
    
    • ZONE_NAME은 첫 번째 단계에서 생성한 영역의 이름입니다.
    gcloud dns record-sets transaction add --name=restricted.googleapis.com. \
        --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
        --zone=ZONE_NAME \
        --ttl=300
    
    • ZONE_NAME은 첫 번째 단계에서 생성한 영역의 이름입니다.
  4. 트랜잭션을 실행합니다.

    gcloud dns record-sets transaction execute --zone=ZONE_NAME
    
    • ZONE_NAME은 첫 번째 단계에서 생성한 영역의 이름입니다.
  5. 선택사항. 온프레미스 호스트가 제한된 VIP에 도달하도록 하려면 다음 단계를 완료합니다.

    1. VPC 네트워크의 이름 확인 서비스가 외부에서 온프레미스 네트워크의 시스템을 사용하도록 DNS 정책을 만들고 인바운드 DNS 전달을 사용 설정합니다.

      gcloud beta dns policies create POLICY_NAME \
       --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \
       --enable-inbound-forwarding \
       --description=DESCRIPTION
      
      • POLICY_NAME은 만들려는 정책의 이름입니다. 예를 들면 apipolicy입니다.

      • PROJECT_ID는 VPC 네트워크를 호스팅하는 프로젝트의 ID입니다.

      • NETWORK_NAME은 VPC 네트워크의 이름입니다.

      • DESCRIPTION은 관리되는 영역에 대한 사람이 읽을 수 있는 설명입니다(선택사항).

    2. 온프레미스 네트워크에서 온프레미스 DNS를 Cloud DNS 전달자 IP 주소로 지정합니다. 전달자 IP 주소를 찾으려면 compute addresses list 명령어를 사용합니다.

      gcloud compute addresses list --filter='name ~ ^dns-forwarding.*' \
       --format='csv[no-heading](address, subnetwork)'
      

BIND로 DNS 구성

BIND를 DNS 확인에 사용할 경우 제한된 Google API에 대한 Google API 요청을 확인하도록 구성할 수 있습니다. 응답 정책 영역(RPZ)을 사용하여 이 동작을 수행하는 다음 예시 BIND 구성을 사용합니다.

  1. /etc/bind/named.conf에 다음 줄을 추가합니다.

    include "/etc/bind/named.conf.options";
    include "/etc/bind/named.conf.local";
    
  2. /etc/bind/named.conf.options에 다음 줄을 추가합니다.

    options {
      directory "/var/cache/bind";
    
      dnssec-validation no;
    
      auth-nxdomain no;    # conform to RFC 1035
      listen-on-v6 { any; };
      listen-on { any; };
      response-policy { zone "googleapis.zone"; };
      allow-query { any;};
    };
    
  3. /etc/bind/named.conf.local에 다음 줄을 추가합니다.

    include "/etc/bind/named.conf.default-zones";

    zone "googleapis.zone" { type master; file "/etc/bind/db.googleapis.zone"; allow-query {none;}; };

  4. /etc/bind/db.googleapis.zone에 다음 줄을 추가합니다.

    $TTL 1H
    @                       SOA LOCALHOST. noreply.localhost(1 1h 15m 30d 2h)
                            NS  LOCALHOST.

    *.googleapis.com CNAME restricted.googleapis.com. restricted.googleapis.com CNAME rpz-passthru.