외부 IP 주소를 사용하여 VM에서 API에 액세스

네트워크 인터페이스에 할당된 외부 IP 주소가 있는 가상 머신(VM) 인스턴스는 이 페이지에 설명된 네트워크 요구사항이 충족되면 Google API 및 서비스에 연결할 수 있습니다. VM의 외부 IP 주소에서 연결이 생성되더라도 트래픽은 Google Cloud 내에 유지되며 공개 인터넷을 통해 전송되지 않습니다.

네트워크 요구사항

외부 IP 주소를 사용하여 VM에서 Google API 및 서비스에 액세스하려면 다음 요구사항을 충족해야 합니다.

  • 따라서 별도로 Google Cloud Console의 API 및 서비스 페이지에서 사용할 Google API를 사용 설정해야 합니다.

  • private.googleapis.com 또는 restricted.googleapis.com 도메인 이름을 사용하는 경우 트래픽을 해당 도메인과 연결된 IP로 전달하는 DNS 레코드를 만들어야 합니다. 자세한 내용은 네트워크 구성을 참조하세요.

  • 네트워크에는 Google API 및 서비스에서 사용되는 대상 IP 범위에 적절한 경로가 있어야 합니다. 이러한 경로는 기본 인터넷 게이트웨이 다음 홉을 사용해야 합니다. private.googleapis.com 또는 restricted.googleapis.com 도메인 이름을 사용하는 경우 도메인당 경로가 하나만 있으면 됩니다. 그렇지 않으면 경로를 여러 개 만들어야 합니다. 자세한 내용은 라우팅 옵션을 참조하세요.

  • 이그레스 방화벽은 Google API 및 서비스에서 사용되는 IP 주소 범위로 들어오는 트래픽을 허용해야 합니다. 묵시적인 이그레스 허용 방화벽 규칙은 이 요구사항을 충족합니다. 방화벽 요구사항을 충족하는 다른 방법은 방화벽 구성을 참조하세요.

네트워크 구성

이 섹션에서는 VPC 네트워크의 VM이 Google API 및 서비스에 액세스하기 위해 충족해야 하는 기본 네트워크 요구사항을 설명합니다.

먼저 Google API 및 서비스에 액세스할 도메인을 선택해야 합니다.

private.googleapis.comrestricted.googleapis.com VIP는 TCP(HTTP, HTTPS, HTTP/2)를 통해 HTTP 기반 프로토콜만 지원합니다. MQTT, ICMP를 비롯한 다른 모든 프로토콜은 지원되지 않습니다.

도메인 및 IP 주소 범위 지원되는 서비스 사용 예시
기본 도메인

private.googleapis.comrestricted.googleapis.com제외한 Google API 및 서비스의 모든 도메인 이름입니다.

다양한 IP 주소 범위 - 기본 도메인의 IP 주소를 참조하여 기본 도메인에서 사용 가능한 주소가 포함된 IP 범위 집합을 확인할 수 있습니다.
VPC 서비스 제어에서 지원하는지 여부에 관계없이 대부분의 Google API 및 서비스에 대한 API 액세스를 사용 설정합니다. Google 지도, Google Ads, Google Cloud에 대한 API 액세스 권한이 포함됩니다. Google Workspace 및 기타 웹 애플리케이션을 포함합니다. private.googleapis.comrestricted.googleapis.com의 DNS 레코드를 구성하지 않은 경우 기본 도메인이 사용됩니다.
private.googleapis.com

199.36.153.8/30
VPC 서비스 제어에서 지원하는지 여부에 관계없이 대부분의 Google API 및 서비스에 대한 API 액세스를 사용 설정합니다. 아래 목록을 포함하여 지도, Google Ads, Google Cloud, 다른 대부분의 Google API에 대한 API 액세스가 포함됩니다. Google Workspace 웹 애플리케이션은 지원하지 않습니다. 대화형 웹사이트를 지원하지 않습니다.

일치하는 도메인 이름:
  • accounts.google.com(OAuth 인증에 필요한 경로만)
  • appengine.google.com
  • *.appspot.com
  • *.cloudfunctions.net
  • *.cloudproxy.app
  • *.composer.cloud.google.com
  • *.composer.googleusercontent.com
  • *.datafusion.cloud.google.com
  • *.datafusion.googleusercontent.com
  • dl.google.com
  • gcr.io 또는 *.gcr.io
  • *.googleadapis.com
  • *.googleapis.com
  • *.gstatic.com
  • *.ltsapis.goog
  • *.notebooks.cloud.google.com
  • *.notebooks.googleusercontent.com
  • packages.cloud.google.com
  • pkg.dev 또는 *.pkg.dev
  • pki.goog 또는 *.pki.goog
  • *.run.app
  • source.developers.google.com

private.googleapis.com에서 Google Cloud 내에서만 라우팅할 수 있는 IP 주소 집합을 사용하여 Google API 및 서비스에 액세스합니다.

다음과 같은 상황에서 private.googleapis.com을 선택합니다.

  • VPC 서비스 제어를 사용하지 않는 경우
  • VPC 서비스 제어를 사용하지만 VPC 서비스 제어에서 지원하지 않는 Google API 및 서비스에도 액세스해야 하는 경우

restricted.googleapis.com

199.36.153.4/30
VPC 서비스 제어가 지원하는 Google API 및 서비스에 대한 API 액세스를 사용 설정합니다.

VPC 서비스 제어를 지원하지 않는 Google API 및 서비스에 대한 액세스를 차단합니다. Google Workspace 웹 애플리케이션 또는 Google Workspace API를 지원하지 않습니다.

restricted.googleapis.com에서 Google Cloud 내에서만 라우팅할 수 있는 IP 주소 집합을 사용하여 Google API 및 서비스에 액세스합니다.

VPC 서비스 제어에서 지원하는 Google API 및 서비스에 액세스해야 하는 경우에만 restricted.googleapis.com을 선택합니다. restricted.googleapis.com은 VPC 서비스 제어를 지원하지 않는 Google API 및 서비스에 대한 액세스를 허용하지 않습니다.

DNS 구성

private.googleapis.com 또는 restricted.googleapis.com을 선택하는 경우 VPC 네트워크의 VM이 *.googleapis.com에 대한 요청을 확인하도록 DNS를 구성해야 합니다.

  1. googleapis.com의 비공개 DNS 영역을 만듭니다. 이 경우에는 Cloud DNS 비공개 영역 만들기를 참조하세요.
  2. googleapis.com 영역에서 선택한 도메인에 따라 다음 A 레코드 중 하나를 만듭니다.

    • 199.36.153.8, 199.36.153.9, 199.36.153.10, 199.36.153.11 IP 주소를 가리키는 private.googleapis.comA 레코드
    • 199.36.153.4, 199.36.153.5, 199.36.153.6, 199.36.153.7 IP 주소를 가리키는 restricted.googleapis.comA 레코드

    Cloud DNS를 사용하는 경우 googleapis.com 비공개 영역에 레코드를 추가합니다.

  3. googleapis.com 영역에서 이전 단계에서 만든 A 레코드를 가리키는 *.googleapis.comCNAME 레코드를 만듭니다.

일부 Google API 및 서비스는 *.gcr.io, *.gstatic.com, pki.goog 등의 추가 도메인 이름을 사용하여 제공됩니다. private.googleapis.com 또는 restricted.googleapis.com을 사용하여 추가 도메인의 서비스에 액세스할 수 있는지 확인하려면 네트워크 요구사항도메인 및 IP 주소 범위 표를 참조하세요. 그런 다음 각 추가 도메인에 대해 다음을 수행하세요.

  1. 추가 도메인의 DNS 영역(예: gcr.io)을 만듭니다. Cloud DNS를 사용하는 경우 이 영역이 googleapis.com 비공개 영역과 동일한 프로젝트에 있는지 확인합니다.
  2. 이 DNS 영역에서 다음을 수행합니다.
    • 도메인(영역) 이름 자체에 대한 A 레코드를 만듭니다. 예를 들면 gcr.io입니다. 선택한 커스텀 도메인 이름(private.googleapis.com 또는 restricted.googleapis.com)에 대해 이 A 레코드가 동일한 4개의 IP 주소를 가리키도록 합니다.
    • 별표와 점, 도메인(영역) 이름을 차례로 사용하여 추가 도메인의 가능한 모든 호스트 이름에 대한 CNAME 레코드를 만듭니다(예: *.gcr.io). 이 CNAME 레코드가 동일한 영역의 A 레코드를 가리키도록 합니다. 예를 들어 *.gcr.iogcr.io를 가리키도록 합니다.

라우팅 옵션

VPC 네트워크에는 다음 홉이 기본 인터넷 게이트웨이인 적절한 경로가 있어야 합니다. Google Cloud는 다른 VM 인스턴스 또는 커스텀 다음 홉을 통해 Google API 및 서비스로 트래픽을 라우팅하지 않습니다. 기본 인터넷 게이트웨이로 불리지만 VPC 네트워크의 VM에서 Google API 및 서비스로 전송된 패킷은 Google 네트워크에 그대로 머무릅니다.

  • 기본 도메인을 선택하면 VM 인스턴스가 Google 외부 IP 주소의 하위 집합을 사용하여 Google API 및 서비스에 연결됩니다. 이러한 IP 주소는 공개적으로 라우팅할 수 있지만 VPC 네트워크의 VM에서 해당 주소로 이동하는 경로는 Google의 네트워크 내에 그대로 남게 됩니다.

  • Google은 private.googleapis.com 또는 restricted.googleapis.com 도메인에서 사용하는 IP 주소에 대한 경로를 인터넷에 게시하지 않습니다. 따라서 이러한 도메인은 VPC 네트워크 또는 VPC 네트워크에 연결된 온프레미스 시스템의 VM에서만 액세스할 수 있습니다.

VPC 네트워크에 다음 홉이 기본 인터넷 게이트웨이인 기본 경로가 있으면 커스텀 경로를 만들지 않고도 기본 경로를 사용하여 모든 도메인의 Google API 및 서비스에 액세스할 수 있습니다. 자세한 내용은 기본 경로를 사용한 라우팅을 참조하세요.

기본 경로를 대상이 0.0.0.0/0이고 다음 홉이 기본 인터넷 게이트웨이가 아닌 커스텀 정적 경로로 바꿨다면 커스텀 라우팅을 사용하여 Google API 및 서비스에 대한 라우팅 요구사항을 충족할 수 있습니다. 다음과 같은 경우 커스텀 라우팅 사용을 고려하세요.

  • 대상이 0.0.0.0/0이고 다음 홉이 Cloud VPN 터널, 내부 TCP/UDP 부하 분산기 또는 다른 VM 인스턴스인 커스텀 정적 경로가 있는 경우
  • Cloud Router를 사용하여 대상 위치가 0.0.0.0/0인 커스텀 동적 경로를 허용하는 경우

기본 경로를 사용한 라우팅

각 VPC 네트워크에는 생성 시 기본 경로가 포함됩니다. 이 경로의 다음 홉은 기본 인터넷 게이트웨이이며 기본 도메인인 private.googleapis.comrestricted.googleapis.com의 경로를 제공합니다.

특정 네트워크에서 기본 경로의 구성을 확인하려면 다음 안내를 따르세요.

Console

  1. Google Cloud Console의 경로 페이지로 이동합니다.
    경로 페이지로 이동
  2. 경로 목록을 필터링하여 확인해야 하는 네트워크의 경로만 표시합니다.
  3. 대상 위치가 0.0.0.0/0이고 다음 홉이 기본 인터넷 게이트웨이인 경로를 찾습니다.

gcloud

다음 gcloud 명령어를 사용하되, NETWORK_NAME을 검사할 네트워크의 이름으로 바꾸고

gcloud compute routes list \
    --filter="default-internet-gateway NETWORK_NAME"

다른 기본 경로를 만들어야 하는 경우 정적 경로 추가를 참조하세요.

커스텀 라우팅

기본 경로 대신 커스텀 정적 경로를 사용할 수 있습니다. 이때 각 경로에는 보다 구체적인 대상이 있으며 각각 기본 인터넷 게이트웨이 다음 홉을 사용합니다. 필요한 경로 수와 대상 IP 주소는 선택한 도메인에 따라 다릅니다.

특정 네트워크의 Google API 및 서비스에 대한 커스텀 경로 구성을 확인하려면 다음 안내를 따르세요.

Console

  1. Google Cloud Console의 경로 페이지로 이동합니다.
    경로 페이지로 이동
  2. 필터 테이블 텍스트 필드를 사용하여 다음 기준을 사용하는 경로 목록을 필터링합니다. 여기서 NETWORK_NAME을 VPC 네트워크의 이름으로 바꿉니다.
    • 네트워크: NETWORK_NAME
    • 다음 홉 유형: default internet gateway
  3. 각 경로의 대상 IP 범위 열을 확인합니다. 기본 도메인을 선택한 경우 기본 도메인에서 사용하는 각 IP 주소 범위별로 하나씩, 여러 개의 커스텀 정적 경로를 확인합니다. private.googleapis.com 또는 restricted.googleapis.com을 선택한 경우에는 해당 도메인의 IP 범위를 찾습니다.

gcloud

다음 gcloud 명령어를 사용하되, NETWORK_NAME을 검사할 네트워크의 이름으로 바꾸고

gcloud compute routes list \
    --filter="default-internet-gateway NETWORK_NAME"

--format 플래그로 명령어를 맞춤설정하지 않는 한 표 형식으로 경로가 나열됩니다. DEST_RANGE 열에서 각 경로의 대상을 찾습니다. 기본 도메인을 선택한 경우 기본 도메인에서 사용하는 각 IP 주소 범위별로 하나씩, 여러 개의 커스텀 정적 경로를 확인합니다. private.googleapis.com 또는 restricted.googleapis.com을 선택한 경우에는 해당 도메인의 IP 범위를 찾습니다.

경로를 만들어야 하는 경우 정적 경로 추가를 참조하세요.

방화벽 구성

VPC 네트워크 방화벽은 VM에서 Google API 및 서비스에서 사용되는 IP 주소로의 액세스를 허용하도록 구성해야 합니다. 묵시적인 allow egress 규칙은 이러한 요구사항을 충족합니다.

일부 방화벽 구성에서는 특정 이그레스 허용 규칙을 만들어야 합니다. 예를 들어 모든 대상(0.0.0.0)에 대한 트래픽을 차단하는 이그레스 거부 규칙을 만들었다고 가정해 보겠습니다. 이 경우 Google API 및 서비스에 선택한 도메인에서 사용되는 각 IP 주소 범위에 대한 이그레스 거부 규칙보다 우선순위가 높은 이그레스 허용 방화벽 규칙을 하나 만들어야 합니다.

방화벽 규칙을 만들려면 방화벽 규칙 만들기를 참조하세요. 각 이그레스 허용 규칙의 대상을 정의할 때 방화벽 규칙이 적용되는 VM을 제한할 수 있습니다.

기본 도메인의 IP 주소

*.googleapis.com*.gcr.io와 같은 기본 도메인에서 사용되는 IP 주소 범위를 확인하려면 다음 단계를 따르세요.

  • Google은 인터넷 사용자에게 제공되는 IP 범위의 전체 목록을 goog.json에 게시합니다.

  • 또한 Google은 고객이 Google Cloud 리소스에 사용할 수 있는 전역 및 리전별 외부 IP 주소 범위 목록을 cloud.json에 게시합니다.

Google API 및 서비스의 기본 도메인에서 사용되는 IP 주소는 goog.json의 범위에서 cloud.json의 모든 범위를 삭제하여 계산한 범위 목록에 포함됩니다. 다음 예시에서는 Python을 사용하여 이 범위를 가져오는 확인하는 방법을 보여줍니다.

Python

다음 Python 스크립트를 사용하여 Google API 및 서비스의 기본 도메인에서 사용되는 IP 주소 범위의 목록을 만들 수 있습니다.

macOS에서 이 스크립트를 사용하려면 다음과 같이 구성된 Python 3 런타임이 필요합니다.

  • macOS용 Python 3 런타임 최신 버전을 설치합니다.
  • Applications 폴더에 있는 Python 폴더에서 포함된 Install Certificates.command를 실행하여 Python 런타임이 사용할 신뢰할 수 있는 루트 인증서(cert.pem) 목록을 설치합니다. VERSION을 설치된 Python 버전(예: 3.8)으로 바꿉니다.
    sudo "/Applications/Python VERSION/Install Certificates.command"
  • 다음을 실행하여 netaddr 모듈을 설치합니다.
    sudo pip3 install netaddr
#!/usr/bin/env python3

import json
import netaddr
import urllib.request

goog_url="https://www.gstatic.com/ipranges/goog.json"
cloud_url="https://www.gstatic.com/ipranges/cloud.json"

def read_url(url):
   try:
      s = urllib.request.urlopen(url).read()
      return json.loads(s)
   except urllib.error.HTTPError:
      print("Invalid HTTP response from %s" % url)
      return {}
   except json.decoder.JSONDecodeError:
      print("Could not parse HTTP response from %s" % url)
      return {}

def main():
   goog_json=read_url(goog_url)
   cloud_json=read_url(cloud_url)

   if goog_json and cloud_json:
      print("{} published: {}".format(goog_url,goog_json.get('creationTime')))
      print("{} published: {}".format(cloud_url,cloud_json.get('creationTime')))
      goog_cidrs = netaddr.IPSet()
      for e in goog_json['prefixes']:
         if e.get('ipv4Prefix'):
            goog_cidrs.add(e.get('ipv4Prefix'))
      cloud_cidrs = netaddr.IPSet()
      for e in cloud_json['prefixes']:
         if e.get('ipv4Prefix'):
            cloud_cidrs.add(e.get('ipv4Prefix'))
      print("IP ranges for Google APIs and services default domains:")
      for i in goog_cidrs.difference(cloud_cidrs).iter_cidrs():
         print(i)

if __name__=='__main__':
   main()