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

限定公開の Google アクセスを使用すると、内部(プライベート)IP アドレスしか持たない(外部 IP アドレスを持たない)VM インスタンスが、Google API とサービスのパブリック IP アドレスにアクセスできます。パケットのソース IP アドレスは、ネットワーク インターフェースのプライマリ内部 IP アドレスまたはインターフェースに割り当てられたエイリアス IP アドレスです。

限定公開の Google アクセスは、Google API やサービスに加えて、App Engine でホストされるサードパーティのサービスへのアクセスも許可します。これにより、VM は App Engine ベースのサービスと通信できます。

限定公開の Google アクセスは、サブネット レベルで有効にします。そうすると、サブネット内でプライベート IP アドレスしか持たないインスタンスが、デフォルト ルート(0.0.0.0/0)を通じて Google API とサービスにトラフィックを送信できるようになります。このとき、デフォルト インターネット ゲートウェイへのネクストホップを使用します。

限定公開の Google アクセスでは、内部 IP アドレスしか持たない VM インスタンスから特定の Google Cloud サービスにアクセスできます。限定公開の Google アクセスや他のプライベート アクセス オプションの詳細については、サービスのプライベート アクセス オプションをご覧ください。

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

仕様

権限

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

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

Logging

Stackdriver Logging は、限定公開の Google アクセスが有効になっているサブネット内の VM インスタンスからの API リクエストをすべてキャプチャします。ログエントリは、インスタンスのプライベート IP を使用して API リクエストのソースを特定します。

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

要件

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

  • 限定公開の Google アクセスでは API は自動的に有効になりません。Google Cloud Console の [API とサービス] ページで、使用する Google API を個別に有効にする必要があります。

  • 限定公開の Google アクセスでは VPC ネットワークが必要です。自動およびカスタムモードの VPC ネットワークがサポートされています。レガシー ネットワークはサポートされていません。

  • 限定公開の Google アクセスが適用されるのは、内部 IP アドレスのみを持つインスタンスに限られます。限定公開の Google アクセスを有効または無効にしても、外部 IP アドレスを持つインスタンスには影響ありません。

  • 限定公開の Google アクセスの有効化は、サブネットを作成するときに、または後からサブネットを編集することで、サブネット単位で行います。限定公開の Google アクセスをサブネットで有効にすると、そのサブネット内の新規および既存の、外部 IP アドレスを持たない VM インスタンスに適用されます。

  • 限定公開の Google アクセスには、Google API とサービスによって使用される、パブリック IP アドレスへのルートが必要です。デフォルト ルートは通常、このパスを提供します。詳細については、ルーティングのセクションをご覧ください。

API とサービスの DNS 解決

*.googleapis.comgcr.io など、Google の API やサービスに関連するドメインの DNS 解決は、限定公開の Google アクセスがサブネットで有効になっても変わりません。Google API とサービスの DNS レコードは、常に外部 IP アドレスを指し示します。このとき使用される外部 IP アドレスのプールは変更される可能性がありますが、_spf.google.com とそれが参照する TXT レコードを照会することで調べることができます。

例:

    dig -t TXT _spf.google.com
    

限定公開の Google アクセスは適切なルートと連携して動作することで、内部 IP アドレスしか持たない VM インスタンスが Google API とサービスの外部 IP アドレスにアクセスできるようにします。限定公開の Google アクセスは、_spf.google.com からの外部 IP を持つ Google API とサービスをサポートしていますが、_spf.google.com からの外部 IP はすべてサポートしていません。たとえば、smtp.gmail.com の外部 IP はサポートされていません。

限定公開の Google アクセス固有のドメインと仮想 IP アドレス(VIP)

標準のパブリック IP アドレスを使用する代わりに、DNS を構成して *.googleapis.com を明確に定義された範囲にマッピングできます。具体的には、*.googleapis.com を Google 提供の次のドメインのエイリアスとしてマークする CNAME レコードを挿入します。

ドメインと VIP サポート対象のサービス 使用例
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 を使用して、VPC ネットワークまたはオンプレミス ネットワーク内のホストが VPC Service Controls 制限付きサービスのみを使用できるようにします。
private.googleapis.com
199.36.153.8/30
VPC Service Controls でサポートされているかどうかにかかわらず、ほとんどの Google API とサービスへの API アクセスを有効にします。Google マップ、Google 広告、Google Cloud Platform、名前が googleapis.com で終わるほとんどの Google API への API アクセスが含まれます。G Suite ウェブ アプリケーションはサポートしていません。 次の状況で Google API とサービスにアクセスする必要がある場合は、private.googleapis.com を使用します。
  • VPC Service Controls を使用していない場合。
  • VPC Service Controls を使用しているものの、VPC Service Controls でサポートされていないサービスにもアクセスする必要がある場合。

ルーティング

デフォルト ルートでのルーティング

一般的な VPC ネットワークでは、デフォルト ルートの主な目的は外部 IP アドレスを持つインスタンスへのインターネット アクセスを提供することです。

ただし、限定公開の Google アクセスではデフォルト ルートを使用して、限定公開の Google アクセスが有効になっているサブネット内のインスタンスから Google API とサービスの外部 IP アドレスにトラフィックを送信します。Google Cloud でのルーティングの仕組みについては、ルートの概要をご覧ください。

デフォルト ルートを、宛先が 0.0.0.0/0、ネクストホップがデフォルト インターネット ゲートウェイではないカスタム静的ルートで置き換えた場合、限定公開の Google アクセスのルーティング要件を満たすため、カスタムルートのセットを作成する必要があります。たとえば、次のような場合にカスタムルートを作成する必要があります。

  • 0.0.0.0/0 宛てのトラフィックを Cloud VPN トンネルや NAT インスタンスなどの別のインスタンスに振り向けるカスタム静的ルートがある場合
  • Cloud Router を使用して、宛先が 0.0.0.0/0 のカスタム動的ルートを受け入れる場合

高度なルーティング

Google API とサービスの外部 IP アドレスにトラフィックを送信するカスタムス静的ルートのセットを作成できます。このセットの各ルートのネクストホップは default Internet gateway である必要がありますが、それぞれの宛先は、Google API およびサービスで使用される範囲のセットからの一意の IP アドレス範囲です。これらの IP 範囲を確認するには、API とサービスの DNS 解決をご覧ください。

あるいは、restricted.googleapis.com199.36.153.4/30)または private.googleapis.com199.36.153.8/30)VIP(仮想 IP アドレス)を使用して、継続的にモニタリングする必要のないカスタム静的ルートを作成できます。通常、これらの範囲は VPC Service Controls で使用され、すべての Google API とサービスをサポートしていません。詳細については、ドメイン名と VIP をご覧ください。また、選択した VIP または VIP のドメイン名の A レコードと、選択したドメイン名への *.googleapis.comCNAME レコードを使用して、googleapis.com の Cloud DNS 限定公開マネージド ゾーンを作成する必要があります。詳細については、オンプレミス ホストの限定公開の Google アクセスの構成をご覧ください。

VPC Service Controls

VPC Service Controls を限定公開の Google アクセスと組み合わせて使用する場合は、VPC Service Controls に関するドキュメントのプライベート接続の設定をご覧ください。

デフォルト ルートの確認

特定のネットワークにデフォルト ルートが存在するかどうかを判断するには、Cloud Console または gcloud コマンドライン ツールを使用します。

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]"
    

必要なルートの作成

限定公開の Google アクセスにデフォルト ルートを使用でき、それを再作成する必要がある場合は、次の宛先とネクストホップで代替のカスタム静的ルートを作成します。

  • 宛先: 0.0.0.0/0
  • ネクストホップ: デフォルト インターネット ゲートウェイ

デフォルト ルートを使用できない場合、複数のカスタム静的ルートを作成して、各ルートが次の宛先とネクストホップを持つ限定公開の Google アクセスのルーティング要件を満たすことができます。

  • 宛先: Google API とサービスで使用されている IP アドレス範囲のうちの 1 つ。
  • ネクストホップ: デフォルト インターネット ゲートウェイ

ファイアウォール ルール

ネットワークのファイアウォール ルールでは、ルーティング要件を満たすことに加え、VM から Google API と Google Cloud サービスへのアクセスを許可する必要があります。

インスタンスで限定公開の Google アクセスを使用するには、インスタンスから Google API とサービスへの下り(外向き)トラフィックを許可する必要があります。下り(外向き)トラフィックを拒否するファイアウォール ルールがある場合、限定公開の Google アクセスを必要としない他のインスタンスに選択的にそのルールを適用できます。あるいは、より優先度の高いルールを作成して Google API とサービスへのトラフィックを許可することで、そのルールをオーバーライドすることもできます。優先度の高いファイアウォール ルールを作成して限定公開の Google アクセスへのトラフィックを許可する場合、次のオプションを考慮します。

  • アドレス範囲 0.0.0.0/0 への下り(外向き)トラフィックを許可するファイアウォール ルールを作成します。これは、下り(外向き)トラフィックを任意の宛先に送信できることを示しています。ファイアウォール ルールにターゲットタグを設定して、限定公開の Google アクセスを必要とするインスタンスにのみ、そのルールを適用します。インスタンスではソースタグまたはサービス アカウントを使用します。外部 IP アドレスを持たない特定のターゲットにのみ適用されるルールを作成すると、広範な宛先範囲が絞り込まれます。外部 IP アドレスを持たないインスタンスは、VPC ネットワークの外部にパケットを送信できません。詳細については、インターネット アクセスの要件をご覧ください。
  • 特定の宛先への下り(外向き)トラフィックを許可する複数のファイアウォール ルールを作成して限定公開の Google アクセスのトラフィックを許可する場合、Google API とサービスで使用される可能性のある IP アドレス範囲がすべて含まれるように、ルールを定期的に見直して更新する必要があります。この IP 範囲を確認するには、API とサービスの DNS 解決のセクションをご覧ください。

構成手順

限定公開の Google アクセスはデフォルトでは有効にされていません。サブネットを作成するときに有効します。また、サブネットを編集することで有効または無効にできます。

限定公開の 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 範囲を作成する] をクリックします。
    5. [限定公開の Google アクセス] セクションで [オン] を選択します。
    6. [追加] をクリックします。

gcloud

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

  1. サブネットの名前とリージョンを特定します。特定のネットワークのサブネットを一覧表示するには、次のコマンドを使用して、[NETWORK-NAME] をネットワークの名前に置き換えます。

        gcloud compute networks subnets list --filter=[NETWORK-NAME]
        
  2. 次のコマンドを実行して限定公開の Google アクセスを有効にし、[SUBNET-NAME] をサブネットの名前に、[REGION] をそのリージョンに置き換えます。

        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)"
        

新しいサブネットを作成するときに、--enable-private-ip-google-access パラメータを追加します。次の例では、新しいサブネットを作成します。

    gcloud compute networks subnets create [SUBNET-NAME] \
    --region [REGION] \
    --network [NETWORK] \
    --range [IP-RANGE] \
    --enable-private-ip-google-access
    

ここで

  • [SUBNET-NAME] はサブネット名です。
  • [NETWORK] は、サブネットを含む VPC ネットワークの名前です。
  • [IP-RANGE] は、サブネットのプライマリ IP アドレスの範囲です。
  • [REGION] はサブネットのリージョンです。

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

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

Console

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

gcloud

  1. サブネットの名前とリージョンを特定します。特定のネットワークのサブネットを一覧表示するには、次のコマンドを使用して、[NETWORK-NAME] をネットワークの名前に置き換えます。

        gcloud compute networks subnets list --filter=[NETWORK-NAME]
        
  2. 次のコマンドを実行して限定公開の Google アクセスを無効にし、[SUBNET-NAME] をサブネットの名前に、[REGION] をそのリージョンに置き換えます。

        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)"
        

インスタンスから外部 IP アドレスを削除する

限定公開の Google アクセスは VM に外部 IP アドレスがない場合にのみ適しているため、サブネットで限定公開の Google アクセスを有効にした後で、実行中のインスタンスを変更しなければならない場合があります。インスタンスから外部 IP アドレスを削除するには、Compute Engine ドキュメントの静的外部 IP アドレスの割り当て解除をご覧ください。

インスタンス IP アドレスの詳細については、Compute Engine ドキュメントの IP アドレスをご覧ください。

次のステップ