Google API とサービスへのプライベート接続の設定

このドキュメントでは、VPC ネットワークまたはオンプレミス ネットワーク内のホストから VPC Service Controls でサポートされている Google API やサービスへのプライベート接続を設定する方法について説明します。

このドキュメントを読む前に、限定公開の Google アクセスのコンセプト、仕様、ネットワークの構成を理解することをおすすめします。VPC Service Controls を使用した限定公開の Google アクセスの使用に関するトポロジ図の例をご覧ください。

始める前に

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

手順の概要

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

  • restricted.googleapis.com IP アドレス範囲のルートを構成します。詳細については、ルートの構成をご覧ください。
  • 適切なトラフィックが restricted.googleapis.com IP アドレス範囲に到達できるようにファイアウォール ルールを構成します。詳細については、ファイアウォール ルールの構成をご覧ください。
  • Google API へのトラフィックが IP アドレス範囲 restricted.googleapis.com に解決されるように DNS を構成します。詳細については、DNS の構成をご覧ください。

restricted.googleapis.com の IPv6 サポート

Google API にアクセスするには、restricted.googleapis.com ドメインの IPv6 アドレス範囲(2600:2d00:0002:1000::/64)を使用します。

restricted.googleapis.com ドメインを使用していて、IPv6 アドレスを使用するクライアントがある場合は、IPv6 アドレスの構成を検討してください。IPv4 アドレスも構成されている IPv6 クライアントは、IPv4 アドレスを使用して Google API とサービスにアクセスできます。すべてのサービスが IPv6 クライアントからのトラフィックを受信するわけではありません。

オンプレミス環境の IPv6 クライアントが restricted.googleapis.com を使用して Google API にアクセスできるようにするには、IPv6 をサポートするように VPC ネットワークへの接続を構成する必要があります。詳しくは次のページをご覧ください。

オンプレミス クライアントは、IPv6 GUA または ULA アドレスからリクエストを送信できます。ただし、ULA 範囲 fda3:e722:ac3:cc00::/64 は内部使用のために予約されています。

restricted.googleapis.com VIP の詳細については、限定公開の Google アクセスの構成をご覧ください。

API とサービスへの直接接続

一部の Google API とサービスでは、Google Front End(GFE)を迂回して、Compute Engine 仮想マシン(VM)インスタンスから直接接続することができます。このトラフィックを許可するには、ルートとファイアウォール ルールで 34.126.0.0/182001:4860:8040::/42 にアクセスする下り(外向き)トラフィックを許可する必要があります。これらのアドレスの DNS レコードを作成する必要はありません。

直接接続は、Google Cloud リソースからの接続のみがサポートされています。オンプレミス ホストからの直接接続は使用できません。

直接接続を提供するサービスは、VPC Service Controls をサポートしています。

restricted.googleapis.com へのルートの構成

VPC Service Controls は、使用するドメインに関係なく互換性のある構成済みのサービスに適用されますが、restricted.googleapis.com を使用するとデータの引き出しに関するリスクをさらに軽減できます。restricted.googleapis.com は、VPC Service Controls でサポートされていない Google API とサービスへのアクセスを拒否します。

限定公開の Google アクセスとオンプレミス ホスト用の限定公開の Google アクセスの両方で、ネクストホップがデフォルトのインターネット ゲートウェイである restricted.googleapis.com IP アドレス範囲へのルートが VPC ネットワークに含まれている必要があります。ネクストホップはデフォルトのインターネット ゲートウェイですが、restricted.googleapis.com に送信されたトラフィックは Google のネットワーク内に残ります。

ネクストホップがデフォルトのインターネット ゲートウェイであるデフォルト ルートが VPC ネットワークにない場合は、宛先が restricted.googleapis.com IP アドレス範囲で、ネクストホップがデフォルトのインターネット ゲートウェイであるカスタム静的ルートを作成できます。インターネットにアクセスできないようにするには、ネクストホップがデフォルトのインターネット ゲートウェイである他のルートを削除する必要があります。

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

VPC ネットワークでカスタム静的ルートを構成する

カスタム静的ルートを追加して、VPC Service Controls でサポートされている 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

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

  • --set-advertisement-ranges フラグを使用し、カスタム IP 範囲を設定します。既存のカスタム アドバタイズがすべて置換されます。次の例では、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

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

  • --set-advertisement-ranges フラグを使用し、カスタム IP 範囲を設定します。既存のカスタム アドバタイズがすべて置換されます。

    IPv6 カスタム範囲を追加し、BGP セッションで IPv6 トラフィックが無効になっている場合は、--enable-ipv6 フラグを使用して有効にできます。

    次の例では、my-router Cloud Router の my-bgp-session BGP セッションを更新して、すべてのサブネットとカスタム IP 範囲をアドバタイズします。

    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 アドレス範囲を使用します。次に、restricted.googleapis.com をマッピングする DNS A レコードと各 *.googleapis.com 名に適した CNAME レコードを使用して、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. DNS ポリシーを作成し、インバウンド DNS 転送を有効にして、オンプレミス ネットワーク内のシステムで VPC ネットワークの名前解決サービスを外部から使用できるようにします。

      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 Service Controls で Dataflow を使用する際の DNS 解決をカスタマイズするには、カスタム BIND サーバーではなく Cloud DNS のプライベート ゾーンを使用します。独自のオンプレミス DNS の解決サービスを使用する場合は、Google Cloud の DNS 転送方法の使用を検討してください。
  • Google Kubernetes Engine(GKE)を使用している場合など、gcr.io 用の DNS の構成が必要になることもあります。詳細については、GKE 限定公開クラスタの Container Registry の設定をご覧ください。