限定公開の Google アクセスの構成

デフォルトでは、Compute Engine VM がネットワーク インターフェースに割り当てられた外部 IP アドレスを持たない場合、他の内部 IP アドレスの宛先にのみパケットを送信できます。VM のネットワーク インターフェースが使用するサブネットで限定公開の Google アクセスを有効にすると、Google API とサービスで使用される一連の外部 IP アドレスに VM を接続できます。

限定公開の Google アクセスでは、App Engine で使用される外部 IP アドレス(サードパーティ App Engine ベースのサービスを含む)にもアクセスできます。

限定公開の Google アクセスで使用できる対象の API とサービスを確認するには、限定公開の Google アクセスの概要でサポート対象のサービスをご覧ください。

限定公開の Google アクセスや Google Cloud が提供するその他のプライベート接続オプションの背景情報については、サービスのプライベート アクセス オプションをご覧ください。

仕様

限定公開の Google アクセスの有効化は、サブネット単位で行います。サブネットの作成時に行うか、作成後にサブネットを編集して行います。

限定公開の Google アクセスがサブネットで有効で、VPC ネットワークの Google API とサービスに関するネットワーク要件を満たしている場合、Google Cloud は有効なサブネットにネットワーク インターフェースを持つ VM を許可します。これで、次のソースから、Google API とサービスの外部 IP アドレスにパケットを送信できるようになります。

  • 有効なサブネットにおける VM のネットワーク インターフェースのプライマリ内部 IP アドレス。ただしこのインターフェースに外部アドレスが割り当てられている場合は除きます。

  • 有効なサブネットにおける VM のネットワーク インターフェースのエイリアス IP 範囲からの内部 IP アドレス。

ネットワーク インターフェースに割り当てられた外部 IP アドレスを持つ VM には、Google API とサービスに接続する限定公開の Google アクセスは必要ありません。関連付けられた外部 IP アドレスを持つネットワーク インターフェースが、ネットワーク要件を満たす VPC ネットワーク内にある限り、この VM は Google API とサービスに接続できます。

ネットワークの要件

限定公開の Google アクセスには以下の要件があります。

  • 限定公開の Google アクセスはサブネットごとに有効になっているため、VPC ネットワークを使用する必要があります。レガシー ネットワークはサブネットに対応していないため、サポート対象外です。

  • 限定公開の 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 ドメイン名を使用する場合、ドメインごとに 1 つのルートのみが必要です。それ以外の場合は、複数のルートを作成する必要があります。詳細については、ルーティング オプションをご覧ください。

  • 下り(外向き)ファイアウォールでは、Google API とサービスによって使用される IP アドレス範囲へのトラフィックを許可する必要があります。暗黙の下り(外向き)許可ファイアウォール ルールがこの要件を満たしています。ファイアウォールの要件を満たすその他の方法については、ファイアウォールの構成をご覧ください。

権限

プロジェクト所有者、編集者、そしてネットワーク管理者のロールを持つ IAM メンバーがサブネットを作成または更新し、IP アドレスを割り当てることができます。

ロールの詳細については、IAM ロールのドキュメントをご覧ください。

ロギング

Cloud Logging は、限定公開の Google アクセスが有効になっているサブネット内の VM インスタンスからの API リクエストをすべてキャプチャします。ログエントリは、API リクエストのソースを呼び出し元インスタンスの内部 IP アドレスとして識別します。

日次使用状況レポートや月次ロールアップ レポートが Cloud Storage バケットに配信されるよう構成できます。詳細については、使用状況レポートを表示するページをご覧ください。

ネットワークの構成

このセクションでは、限定公開の Google アクセスを使用している、または外部 IP アドレスを持っている VPC ネットワーク内のすべての VM が、Google API とサービスにアクセスするために、満たしている必要がある基本的なネットワーク要件について説明します。

まず、Google API とサービスにアクセスするドメインを選択します。

ドメインと IP アドレス範囲 サポート対象のサービス 使用例
デフォルト ドメイン

private.googleapis.comrestricted.googleapis.com を除く、Google API とサービスのすべてのドメイン名。

さまざまな IP アドレス範囲 - デフォルト ドメインの IP アドレスを参照することにより、デフォルトド メインで使用される可能性のあるアドレスを含む IP 範囲のセットを決定できます。
VPC Service Controls でサポートされているかどうかにかかわらず、ほとんどの Google API とサービスへの API アクセスを有効にします。Google マップ、Google 広告、Google Cloud Platform、名前が googleapis.com で終わるほとんどの Google API への API アクセスが含まれます。G Suite ウェブ アプリケーションはサポートしていません。 デフォルトのドメインは、private.googleapis.comrestricted.googleapis.com の DNS レコードを構成していない場合に使用されます。
private.googleapis.com

199.36.153.8/30
VPC Service Controls でサポートされているかどうかにかかわらず、ほとんどの Google API とサービスへの API アクセスを有効にします。マップ、Google 広告、Google Cloud Platform、以下のリストを含むその他のほとんどの Google API への API アクセスが含まれます。G Suite ウェブ アプリケーションはサポートしていません。

末尾が次の表記のドメイン名
  • googleapis.com
  • googleadapis.com
  • ltsapis.goog
  • gcr.io
  • gstatic.com
  • appspot.com
  • cloudfunctions.net
  • pki.goog
  • cloudproxy.app
  • run.app
  • datafusion.googleusercontent.com
  • datafusion.cloud.google.com
一致するホスト / ドメイン名:
  • packages.cloud.google.com
  • gcr.io
  • appengine.google.com
  • pki.goog
private.googleapis.com を使用して、Google Cloud 内からのみルーティング可能な一連の IP アドレスを使用して Google API とサービスにアクセスします。次の状況では private.googleapis.com を選択します。
  • VPC Service Controls を使用しない。
  • VPC Service Controls を使用するものの、VPC Service Controls でサポートされていない Google API とサービスにもアクセスする必要がある。
restricted.googleapis.com

199.36.153.4/30
VPC Service Controls でサポートされている Google API およびサービスへの API アクセスを有効にします。

VPC Service Controls をサポートしない Google API とサービスへのアクセスをブロックします。G Suite ウェブ アプリケーションや G Suite API はサポートしていません。
restricted.googleapis.com を使用して、Google Cloud 内からのみルーティング可能な一連の IP アドレスを使用して Google API とサービスにアクセスします。VPC Service Controls でサポートされている Google API とサービスにアクセスする必要がある場合にのみ restricted.googleapis.com を選択します。restricted.googleapis.com は VPC Service Controls をサポートしていない Google API とサービスへのアクセスを許可しません。

DNS 構成

private.googleapis.com または restricted.googleapis.com を選択した場合は、VPC ネットワーク内の VM が *.googleapis.com へのリクエストを解決できるように DNS を構成する必要があります。

  1. googleapis.com の限定公開 DNS ゾーンを作成します。その場合は、Cloud DNS 限定公開ゾーンの作成を検討してください。
  2. 選択したドメインに応じて、googleapis.com ゾーンで次のいずれかの A レコードを作成します。

    • 次の IP アドレスを指す private.googleapis.comA レコード: 199.36.153.8199.36.153.9199.36.153.10199.36.153.11
    • 次の IP アドレスを指す restricted.googleapis.comA レコード: 199.36.153.4199.36.153.5199.36.153.6199.36.153.7

    Cloud DNS を使用している場合は、googleapis.com 限定公開ゾーンにレコードを追加します。

  3. googleapis.com ゾーンで、前の手順で作成した A レコードを指す *.googleapis.comCNAME レコードを作成します。

一部の Google API とサービスは、*.gcr.io*.gstatic.compki.goog などの追加ドメイン名を使用して提供されます。他のドメインのサービスに private.googleapis.com または restricted.googleapis.com を使用してアクセスできるかどうかは、ネットワークの要件のドメインと IP アドレス範囲の表をご覧ください。追加のドメインごとに次の手順を実施します。

  1. 追加のドメインの DNS ゾーンを作成します(例: gcr.io)。Cloud DNS を使用している場合は、このゾーンが googleapis.com 限定公開ゾーンと同じプロジェクトにあることを確認してください。
  2. この DNS ゾーンで次のことを行います。
    • ドメイン(ゾーン)名自体の A レコード(例: gcr.io)を作成します。この A レコードを、選択したカスタム ドメイン名(private.googleapis.com または restricted.googleapis.com)の 4 つの同じ IP アドレスにポイントします。
    • アスタリスクとドットの後にドメイン(ゾーン)名を付加して(例: *.gcr.io)、すべての追加ドメインのホスト名に CNAME レコードを作成します。この 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 ネットワーク内の VM または VPC ネットワークに接続されているオンプレミス システムの場合のみです。

ネクストホップがデフォルトのインターネット ゲートウェイであるデフォルト ルートが 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 アドレス範囲ごとに 1 つ)がないか確認します。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 アドレス範囲ごとに 1 つ)がないか確認します。private.googleapis.com または restricted.googleapis.com を選択した場合は、そのドメインの IP 範囲を探します。

ルートを作成する必要がある場合は、静的ルートの追加をご覧ください。

ファイアウォール構成

VPC ネットワークのファイアウォール構成では、VM から Google API とサービスによって使用される IP アドレスへのアクセスを許可する必要があります。暗黙の allow egress ルールは、この要件を満たしています。

一部のファイアウォール構成では、特定の下り(外向き)許可ルールを作成する必要があります。たとえば、すべての宛先(0.0.0.0)へのトラフィックをブロックする下り(外向き)拒否ルールを作成したとします。この場合、Google API とサービス用に、選択したドメインで使用される各 IP アドレス範囲の下り(外向き)拒否ルールよりも優先順位が高い下り(外向き)許可のファイアウォール ルールを 1 つ作成する必要があります。

ファイアウォール ルールを作成するには、ファイアウォール ルールの作成をご覧ください。各下り(外向き)許可ルールのターゲットを定義するときに、ファイアウォール ルールが適用される VM を制限できます。

デフォルト ドメインの IP アドレス

*.googleapis.com*.gcr.io など、デフォルトのドメインで使用される IP アドレス範囲を確認するには、次の手順に従います。

  • Google では、インターネットに発表する IP 範囲の完全なリストを goog.json に公開しています。
  • さらに、Google Cloud のお客様が使用できるグローバルおよびリージョンの外部 IP アドレス範囲のリストを cloud.json に公開しています。

Google API とサービスのデフォルトのドメインで使用される IP アドレスは、goog.json の範囲から cloud.json のすべての範囲を除いて計算された範囲のリスト内に収まります。次の例では、Python を使用してこの範囲を取得しています。

Python

次の Python スクリプトを使用すると、Google API とサービスのデフォルト ドメインで使用される IP アドレス範囲のリストを作成できます。

#!/usr/bin/env python3

import json
import netaddr
import urllib.request

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

def read_url(url, fallback_to_http=False,attempts=2):
   if fallback_to_http:
      url = "http://" + url
   else:
      url = "https://" + 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 {}
   except urllib.error.URLError:
      if attempts > 1:
         url = url.replace("https://","").replace("http://","")
         attempts -=1
         print("Error opening URL; trying HTTP instead of HTTPS.")
         return read_url(url,fallback_to_http=True,attempts=attempts)
      else:
         print("Error opening 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()

限定公開の Google アクセスの構成

限定公開の Google アクセスは、VPC ネットワーク内のネットワーク要件を満たした後で有効にできます。

限定公開の Google アクセスを有効にする

以下の手順に従って限定公開の Google アクセスを有効にします。

Console

  1. Google Cloud Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. 限定公開の Google アクセスを有効にするサブネットが含まれるネットワークの名前をクリックします。
  3. 既存のサブネットの場合:
    1. サブネットの名前をクリックします。[サブネットの詳細] ページが表示されます。
    2. [編集] をクリックします。
    3. [限定公開の Google アクセス] セクションで、[オン] を選択します。
    4. [保存] をクリックします。
  4. 新しいサブネットの場合:
    1. [サブネットを追加] をクリックします。
    2. 新しいサブネットの [名前] と [リージョン] を指定します。
    3. サブネットの [IP アドレス範囲] を指定します。この範囲は、現在の VPC ネットワーク内、または VPC ネットワーク ピアリングや VPN を介して接続されているネットワーク内のサブネットと重複することはできません。
    4. ニーズに合わせて新しいサブネットを適切に選択します。たとえば、セカンダリ サブネットの IP 範囲の作成や、VPC フローログの有効化が必要になる場合があります。
    5. [限定公開の Google アクセス] セクションで [オン] を選択します。
    6. [追加] をクリックします。

gcloud

既存のサブネットの場合:

  1. サブネットの名前とリージョンを特定します。次のコマンドで特定のネットワークのサブネットを一覧表示します。

    gcloud compute networks subnets list --filter=network-name
    
  2. 次のコマンドを実行して、限定公開の Google アクセスを有効にします。

    gcloud compute networks subnets update subnet-name \
    --region=region \
    --enable-private-ip-google-access
    
  3. 次のコマンドで、限定公開の Google アクセスが有効になっていることを確認します。

    gcloud compute networks subnets describe subnet-name \
    --region=region \
    --format="get(privateIpGoogleAccess)"
    

上記のコマンドすべてで、以下の値を有効な値に置き換えます。

  • subnet-name: サブネットの名前
  • region: サブネットのリージョン
  • network-name: サブネットを含む VPC ネットワークの名前

新しいサブネットを作成するときは、--enable-private-ip-google-access フラグを使用して限定公開の Google アクセスを有効にします。

gcloud compute networks subnets create subnet-name \
    --region=region \
    --network=network-name \
    --range=primary-ip-range \
    --enable-private-ip-google-access

次の変数を有効な値に置き換えます。

  • subnet-name: サブネットの名前
  • region: サブネットのリージョン
  • network-name: サブネットを含む VPC ネットワークの名前
  • primary-ip-range: サブネットのプライマリ IP アドレス範囲

限定公開の Google アクセスを無効にする

以下の手順に従って、既存のサブネットの限定公開の Google アクセスを無効にします。

Console

  1. Google Cloud Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. 限定公開の Google アクセスを無効にするサブネットが含まれているネットワークの名前をクリックします。
  3. 既存のサブネットの名前をクリックします。[サブネットの詳細] ページが表示されます。
  4. [編集] をクリックします。
  5. [限定公開の Google アクセス] セクションで、[オフ] を選択します。
  6. [保存] をクリックします。

gcloud

  1. サブネットの名前とリージョンを特定します。次のコマンドで特定のネットワークのサブネットを一覧表示します。

    gcloud compute networks subnets list \
        --filter=network-name
    
  2. 次のコマンドを実行して、限定公開の Google アクセスを無効にします。

    gcloud compute networks subnets update subnet-name \
        --region=region \
        --no-enable-private-ip-google-access
    
  3. 次のコマンドで、限定公開の Google アクセスが無効になっていることを確認します。

    gcloud compute networks subnets describe subnet-name \
        --region=region \
        --format="get(privateIpGoogleAccess)"
    

上記のコマンドすべてで、以下の値を有効な値に置き換えます。

  • subnet-name: サブネットの名前
  • region: サブネットのリージョン
  • network-name: サブネットを含む VPC ネットワークの名前

次のステップ