Google API およびサービスへのプライベート接続を設定する

VPC Service Control を使用して、プライベート IP アドレスを使用するホストからの Google API やサービスへのアクセスを制御できます。これらのホストは、VPC ネットワークの VM インスタンスまたはオンプレミス ネットワークのクライアントです。

サービス境界内での限定公開の Google アクセスを VPC Service Controls がサポートする Google API とサービスに制限するには、ホストが *.googleapis.com ではなく restricted.googleapis.com にリクエストを送信する必要があります。restricted.googleapis.com ドメインが VIP(仮想 IP アドレス)の範囲 199.36.153.4/30 に解決されます。この IP アドレス範囲はインターネットに公開されません。

ここでは、VPC ネットワークまたはオンプレミス ネットワークのホストに対してプライベート接続を設定する方法について説明します。概要とトポロジ図の例については、VPC Service Controls を使用した限定公開の Google アクセスをご覧ください。

始める前に

  • Google Cloud Console の [API とサービス] ページからアクセスする API を有効にする必要があります。
  • プロジェクトのオーナー、編集者、そしてネットワーク管理者の役割を持つ IAM メンバーがサブネットを作成または更新し、IP アドレスを割り当てることができます。 役割の詳細については、IAM 役割のドキュメントをご覧ください。
  • 限定公開の Google アクセスと、オンプレミス ホスト用の限定公開の Google アクセスには、VPC ネットワークが必要です。自動およびカスタムモードの VPC ネットワークがサポートされています。レガシー ネットワークはサポートされていません。
  • VPC ネットワーク内の VM インスタンスでは、プライベート IP アドレスのみを使用し、パブリック IP アドレスは使用せず、限定公開の Google アクセスが有効なサブネット内に配置する必要があります。
  • オンプレミス ホストの場合、既存の Cloud VPN トンネルまたは Cloud Interconnect 接続が VPC ネットワークに接続されている必要があります。

手順の概要

プライベート接続を設定するには、次の作業を行います。

  • 宛先 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 Service Controls でサポートされる Google マネージド サービスへのアクセスを有効にします。

  • VPC Service Controls によって保護されている 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 リスト
  2. 更新する Cloud Router を選択します。
  3. Cloud Router の詳細ページで [編集] を選択します。
  4. [アドバタイズされたルート] セクションを展開します。
  5. [ルート] で、[カスタムルートの作成] を選択します。
  6. [Cloud Router に表示されるすべてのサブネットにアドバタイズする] を選択して、Cloud Router に表示されるサブネットのアドバタイズを継続します。このオプションを有効にすると、Cloud Router のデフォルトの動作と同じ結果になります。
  7. [Add custom route] を選択して、アドバタイズされたルートを追加します。
  8. ルート アドバタイズを構成します。
    • ソース - [カスタム IP 範囲] を選択して、カスタム IP 範囲を指定します。
    • IP アドレス範囲 - 199.36.153.4/30 を指定します。
    • 説明 - Restricted Google APIs IPs と説明を追加します。
  9. ルートの追加が完了したら、[保存] を選択します。

gcloud


--set-advertisement-ranges または --add-advertisement-ranges フラグを使用して update コマンドを実行し、カスタム IP 範囲を指定するには:

  • --set-advertisement-ranges フラグを使用し、カスタム IP 範囲を設定します。既存のカスタム アドバタイズがすべて置換されます。次の例では、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 リスト
  2. 更新する BGP セッションを含む Cloud Router を選択します。
  3. Cloud Router の詳細ページで、更新する BGP セッションを選択します。
  4. BGP セッションの詳細ページで、[編集] を選択します。
  5. [ルート] で、[カスタムルートの作成] を選択します。
  6. [Cloud Router に表示されるすべてのサブネットにアドバタイズする] を選択して、Cloud Router に表示されるサブネットのアドバタイズを継続します。このオプションを有効にすると、Cloud Router のデフォルトの動作と同じ結果になります。
  7. [Add custom route] を選択して、アドバタイズされたルートを追加します。
  8. ルート アドバタイズを構成します。
    • ソース - [カスタム IP 範囲] を選択して、カスタム IP 範囲を指定します。
    • IP アドレス範囲 - 199.36.153.4/30 を指定します。
    • 説明 - Restricted Google APIs IPs と説明を追加します。
  9. ルートの追加が完了したら、[保存] を選択します。

gcloud


--set-advertisement-ranges または --add-advertisement-ranges フラグを使用して update-bgp-peer コマンドを実行し、カスタム IP 範囲を指定します。

  • --set-advertisement-ranges フラグを使用し、カスタム IP 範囲を設定します。既存のカスタム アドバタイズがすべて置換されます。次の例では、my-router Cloud Router の my-bgp-session BGP セッションを更新して、すべてのサブネットとカスタム IP 範囲 199.36.153.4/30 をアドバタイズします。

        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/30restricted.googleapis.com)IP アドレス範囲へのトラフィックを許可する下り許可ルールを作成して、この許可ルールの優先順位を上にします。restricted.googleapis.com への通信はすべて TCP ポート 443 で行われます。

VPC ファイアウォール ルールの操作の詳細については、VPC ドキュメントのファイアウォール ルールの使用をご覧ください。

オンプレミス ネットワーク内のファイアウォール ルール

オンプレミス ホストからのトラフィックが 199.36.153.4/30 に接続できるように、オンプレミス ファイアウォール ルールを構成する必要があります。

DNS の構成

制限付き Google API の IP アドレスを使用するには、DNS サーバーを構成して、*.googleapis.comrestricted.googleapis.com への CNAME として解決されるようにします。それから restricted.googleapis.com の A レコードを構成します。VPC Service Controls を汎用的に使用する場合は、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 とサービスを使用することはできません。詳しくは、ゾーンの管理をご覧ください。
  • カスタム BIND と restricted.googleapis.com VIP を Dataflow に使用することはできません。Dataflow の DNS 解決をカスタマイズできないためです。

Cloud DNS による DNS の構成

VPC ネットワーク、オンプレミス ネットワークのホスト、または両方の VM インスタンスの DNS 解決を有効にするには、Cloud 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. DNS ポリシーを作成し、受信 DNS 転送を有効にして、VPC ネットワークの名前解決サービスをオンプレミス ネットワーク内のシステムで外部から使用できるようにします。

          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.