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

이 문서에서는 VPC 네트워크나 온프레미스 네트워크의 호스트에서 VPC 서비스 제어가 지원하는 Google API 및 서비스로의 비공개 연결을 설정하는 방법을 설명합니다.

이 문서를 읽기 전에 먼저 비공개 Google 액세스 개념, 사양, 네트워크 구성을 숙지하는 것이 좋습니다. VPC 서비스 제어와 함께 비공개 Google 액세스 사용에 대해서는 예시 토폴로지 다이어그램을 참조하세요.

시작하기 전에

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

절차 개요

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

  • restricted.googleapis.com IP 주소 범위에 대한 경로를 구성합니다. 자세한 내용은 경로 구성을 참조하세요.
  • 적절한 트래픽이 restricted.googleapis.com IP 주소 범위에 도달하도록 방화벽 규칙을 구성합니다. 자세한 내용은 방화벽 규칙 구성을 참조하세요.
  • Google API에 대한 트래픽이 restricted.googleapis.com IP 주소 범위를 확인하도록 DNS를 구성합니다. 자세한 내용은 DNS 구성을 참조하세요.

restricted.googleapis.com에 대한 IPv6 지원

restricted.googleapis.com 도메인의 IPv6 주소 범위(2600:2d00:0002:1000::/64)를 사용하여 Google API에 액세스할 수 있습니다.

restricted.googleapis.com 도메인을 사용하고 IPv6 주소를 사용하는 클라이언트가 있는 경우 IPv6 주소를 구성하는 것이 좋습니다. IPv4 주소도 구성된 IPv6 클라이언트는 IPv4 주소를 사용하여 Google API 및 서비스에 연결할 수 있습니다. 일부 서비스는 IPv6 클라이언트의 트래픽을 허용하지 않습니다.

온프레미스 환경의 IPv6 클라이언트가 restricted.googleapis.com을 사용하여 Google API에 액세스하도록 허용하려면 IPv6를 지원하도록 VPC 네트워크에 대한 연결을 구성해야 합니다. 자세한 내용은 다음 페이지를 참조하세요.

온프레미스 클라이언트는 내부용으로 예약된 ULA 범위 fda3:e722:ac3:cc00::/64를 제외하고 모든 IPv6 GUA 또는 ULA 주소에서 요청을 보낼 수 있습니다.

restricted.googleapis.com VIP에 대한 자세한 내용은 비공개 Google 액세스 구성을 참조하세요.

API 및 서비스에 대한 직접 연결

일부 Google API 및 서비스는 Google 프런트엔드(GFE)를 우회하여 Compute Engine 가상 머신(VM) 인스턴스에서 직접 연결을 제공합니다. 이 트래픽을 허용하려면 경로 및 방화벽 규칙에서 이그레스 트래픽이 34.126.0.0/182001:4860:8040::/42에 도달하도록 허용되는지 확인해야 합니다. 이러한 주소에 대해서는 DNS 레코드를 만들 필요가 없습니다. 일부 Google Cloud 서비스는 직접 연결을 지원하여 Google gRPC API에 향상된 성능을 제공합니다. 이 향상된 성능을 사용 설정하려면 지정된 IP 주소 범위에 대한 액세스 권한을 제공해야 합니다.

직접 연결은 Google Cloud 리소스에서만 지원됩니다. 온프레미스 호스트에서는 직접 연결을 사용할 수 없습니다.

직접 연결을 제공하는 서비스는 VPC 서비스 제어를 지원합니다.

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

VPC 서비스 제어는 호환 가능하고 구성된 서비스에 적용되지만, restricted.googleapis.com은 사용하는 도메인에 관계없이 데이터 무단 반출 위험을 추가적으로 완화해 줍니다. restricted.googleapis.com은 VPC 서비스 제어에서 지원하지 않는 Google API 및 서비스에 대한 액세스를 거부합니다.

비공개 Google 액세스와 온프레미스 호스트의 비공개 Google 액세스 모두에서 VPC 네트워크에 다음 홉이 기본 인터넷 게이트웨이인 restricted.googleapis.com IP 주소 범위에 대한 경로가 포함되어야 합니다. 다음 홉이 기본 인터넷 게이트웨이지만 restricted.googleapis.com으로 전송된 트래픽은 Google 네트워크에 남아 있습니다.

VPC 네트워크에 다음 홉이 기본 인터넷 게이트웨이인 기본 경로가 없는 경우 대상이 restricted.googleapis.com IP 주소 범위이고 다음 홉이 기본 인터넷 게이트웨이인 커스텀 정적 경로를 만들 수 있습니다. 인터넷에 액세스하지 못하도록 하려면 다음 홉이 기본 인터넷 게이트웨이인 다른 경로를 삭제해야 합니다.

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

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

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

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

다음을 바꿉니다.

  • ROUTE_NAME: 커스텀 경로의 이름입니다.
  • NETWORK_NAME: VPC 네트워크의 이름입니다.
  • DESTINATION_RANGE: 경로의 대상 범위입니다.
    • 트래픽을 restricted.googleapis.com VIP로 라우팅하려면 다음 범위를 사용합니다.
      • IPv4 트래픽: 199.36.153.4/30
      • IPv6 트래픽: 2600:2d00:0002:1000::/64
    • 직접 연결을 허용하는 API로 트래픽을 라우팅하려면 다음 범위를 사용합니다.
      • IPv4 트래픽: 34.126.0.0/18
      • IPv6 트래픽: 2001:4860:8040::/42

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

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

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

IPv6 경로는 IPv6가 사용 설정된 BGP 세션에서만 공지됩니다.

기존 Cloud Router에 모든 BGP 세션의 제한된 범위에 대한 커스텀 공지 경로를 만들려면 다음 단계를 수행합니다.

콘솔

  1. Google Cloud 콘솔에서 Cloud Router 페이지로 이동합니다.

    Cloud Router로 이동

  2. 업데이트할 Cloud Router를 선택합니다.

  3. Cloud Router의 세부정보 페이지에서 수정을 선택합니다.

  4. 공지된 경로 섹션을 펼칩니다.

  5. 경로의 경우 커스텀 경로 만들기를 선택합니다.

  6. 서브넷 공지가 Cloud Router에 계속 제공되도록 하려면 Cloud Router에 표시되는 모든 서브넷 공지를 선택합니다. 이 옵션을 사용 설정하면 Cloud Router의 기본 동작을 모방합니다.

  7. 공지된 경로를 추가하려면 커스텀 경로 추가를 선택합니다.

  8. 경로 공지를 구성합니다.

    • 소스: 커스텀 IP 범위를 선택합니다.
    • IP 주소 범위:
      • IPv4 연결: 199.36.153.4/30
      • IPv6 연결: 2600:2d00:0002:1000::/64
    • 설명: Restricted Google APIs IPs 설명을 추가합니다.
  9. 경로를 추가한 후 저장을 선택합니다.

gcloud

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

  • 커스텀 IP 범위를 설정하려면 --set-advertisement-ranges 플래그를 사용합니다. 기존 커스텀 공지 경로가 모두 대체됩니다. 다음 예시에서는 my-router Cloud Router를 업데이트하여 모든 서브넷과 restricted.googleapis.com IP 주소 범위를 공지합니다.

    gcloud compute routers update my-router \
        --advertisement-mode CUSTOM \
        --set-advertisement-groups ALL_SUBNETS \
        --set-advertisement-ranges RANGES
    

    RANGES를 사용하려는 범위로 바꿉니다.

    • IPv4 연결: 199.36.153.4/30
    • IPv6 연결: 2600:2d00:0002:1000::/64
    • IPv4 및 IPv6 연결: 199.36.153.4/30,2600:2d00:0002:1000::/64

  • 기존 공지에 커스텀 IP 범위를 추가하려면 --add-advertisement-ranges 플래그를 사용합니다. 이 플래그를 사용하려면 Cloud Router의 공지 모드가 이미 custom으로 설정되어 있어야 합니다. 다음 예시에서는 restricted.googleapis.com IP 주소 범위를 Cloud Router의 공지에 추가합니다.

    gcloud compute routers update my-router \
        --add-advertisement-ranges RANGES
    

    RANGES를 사용하려는 범위로 바꿉니다.

    • IPv4 연결: 199.36.153.4/30
    • IPv6 연결: 2600:2d00:0002:1000::/64
    • IPv4 및 IPv6 연결: 199.36.153.4/30,2600:2d00:0002:1000::/64

기존 Cloud Router의 특정 BGP 세션에 제한된 범위의 커스텀 공지 경로를 만들려면 다음 단계를 수행합니다.

콘솔

  1. Google Cloud 콘솔에서 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 주소 범위:
      • IPv4 연결: 199.36.153.4/30
      • IPv6 연결: 2600:2d00:0002:1000::/64
    • 설명: Restricted Google APIs IPs 설명을 추가합니다.
  9. 경로 추가가 완료되면 저장을 선택합니다.

gcloud

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

  • 커스텀 IP 범위를 설정하려면 --set-advertisement-ranges 플래그를 사용합니다. 기존 커스텀 공지 경로가 모두 대체됩니다.

    IPv6 커스텀 범위를 추가하고 BGP 세션에 IPv6 트래픽이 사용 중지된 경우 --enable-ipv6 플래그를 사용하여 사용 설정할 수 있습니다.

    다음 예시에서는 모든 서브넷과 커스텀 IP 범위를 공지하도록 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 RANGES
    

    RANGES를 사용하려는 범위로 바꿉니다.

    • IPv4 연결: 199.36.153.4/30
    • IPv6 연결: 2600:2d00:0002:1000::/64
    • IPv4 및 IPv6 연결: 199.36.153.4/30,2600:2d00:0002:1000::/64

  • 기존 공지에 커스텀 IP 범위를 추가하려면 --add-advertisement-ranges 플래그를 사용합니다. 이 플래그를 사용하려면 Cloud Router의 공지 모드가 이미 custom으로 설정되어 있어야 합니다.

    IPv6 커스텀 범위를 추가하고 BGP 세션에 IPv6 트래픽이 사용 중지된 경우 --enable-ipv6 플래그를 사용하여 사용 설정할 수 있습니다.

    다음 예시에서는 제한된 VIP 주소 범위를 Cloud Router의 공지에 추가합니다.

    gcloud compute routers update-bgp-peer my-router \
        --peer-name my-bgp-session \
        --add-advertisement-ranges RANGES
    

    RANGES를 사용하려는 범위로 바꿉니다.

    • IPv4 연결: 199.36.153.4/30
    • IPv6 연결: 2600:2d00:0002:1000::/64
    • IPv4 및 IPv6 연결: 199.36.153.4/30,2600:2d00:0002:1000::/64

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

방화벽 규칙 구성

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

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

Google Cloud의 트래픽이 restricted.googleapis.com VIP에 도달하도록 하려면 다음 대상에 대한 방화벽 규칙을 추가합니다.

  • IPv4 트래픽: 199.36.153.4/30
  • IPv6 트래픽: 2600:2d00:0002:1000::/64

Google Cloud의 트래픽이 직접 연결을 허용하는 API 및 서비스에 도달하도록 허용하려면 다음 대상에 대한 방화벽 규칙을 추가합니다.

  • IPv4 트래픽: 34.126.0.0/18
  • IPv6 트래픽: 2001:4860:8040::/42

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

온프레미스 호스트의 트래픽이 restricted.googleapis.com IP 주소 범위에 도달하도록 온프레미스 방화벽 규칙을 구성합니다.

  • IPv4 트래픽: 199.36.153.4/30
  • IPv6 트래픽: 2600:2d00:0002:1000::/64

온프레미스 네트워크에서는 Google API 및 서비스에 대한 직접 연결이 지원되지 않습니다.

DNS 구성

VPC 네트워크에 관리형 비공개 영역을 사용할 수 있습니다. Cloud DNS 비공개 DNS 영역을 사용하면 승인된 VPC 네트워크에서 액세스할 수 있는 DNS 영역을 호스팅할 수 있습니다. 특정 온프레미스 네임서버에서 전달을 구성하려면 restricted.googleapis.com IP 주소 범위를 사용하면 됩니다. 그런 후 각 *.googleapis.com 이름에 대해 restricted.googleapis.com 및 적합한 CNAME 레코드를 매핑하는 DNS A 레코드를 사용하여 googleapis.com에 대해 비공개 영역을 만들 수 있습니다. 자세한 내용은 영역 관리를 참조하세요.

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

Cloud DNS로 DNS 구성하기

VPC 네트워크의 VM 인스턴스, 온프레미스 네트워크의 호스트 또는 둘 다에 DNS 변환을 사용 설정하려면 Cloud DNS를 사용합니다. 공유 VPC를 사용하는 경우 Cloud DNS 문서의 비공개 영역 및 공유 VPC를 참조하세요. 또한 공유 VPC를 사용하는 경우 네트워크에 연결된 프로젝트와 동일한 서비스 경계에 공유 VPC 네트워크 호스트 프로젝트를 포함하는 것이 좋습니다.

비공개 영역을 사용하여 Cloud DNS 구성

비공개 영역을 사용하여 Cloud DNS를 구성할 수 있습니다.

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

    gcloud 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을 첫 단계에서 만든 영역의 이름으로 바꿉니다.

    restricted.googleapis.com에 대한 IPv6 주소를 구성하는 경우 다음 레코드 세트도 만듭니다.

    gcloud dns record-sets transaction add --name=restricted.googleapis.com. \
        --type=AAAA 2600:2d00:0002:1000:: \
        --zone=ZONE_NAME \
        --ttl=300
    
  4. 트랜잭션을 실행합니다.

    gcloud dns record-sets transaction execute --zone=ZONE_NAME
    

    ZONE_NAME을 첫 단계에서 만든 영역의 이름으로 바꿉니다.

  5. 선택사항입니다. 온프레미스 호스트가 제한된 VIP에 도달하도록 하려면 다음 단계를 완료합니다.

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

      gcloud 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.

특수 경우의 DNS 구성

특수한 사례의 DNS를 구성해야 하는 경우 다음 사항에 유의하세요.

  • Dataflow를 사용할 때는 커스텀 BIND가 지원되지 않습니다. VPC 서비스 제어에 Dataflow를 사용할 때 DNS 확인을 맞춤설정하려면 커스텀 BIND 서버를 사용하는 대신 Cloud DNS 비공개 영역을 사용합니다. 고유한 온프레미스 DNS 확인을 사용하려면 Google Cloud DNS 전달 방법을 사용하는 것이 좋습니다.
  • 예를 들어 Google Kubernetes Engine(GKE)을 사용하는 경우 gcr.io에 DNS를 구성해야 할 수도 있습니다. 자세한 내용은 GKE 비공개 클러스터용 Container Registry 설정을 참조하세요.