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

VPC Service Controls を使用して、プライベート 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. [カスタムルートの追加] を選択して、アドバタイズされたルートを追加します。
  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. [カスタムルートの追加] を選択して、アドバタイズされたルートを追加します。
  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 の構成

一般的な用途で VPC Service Controls を使用する場合は、Cloud DNS レスポンス ポリシーを使用して VPC ネットワークの DNS を構成することをおすすめします。これにより、限定公開マネージド ゾーンを作成しなくても DNS を構成できます。レスポンス ポリシーでは、passthru の動作を使用して www.googleapis.com などの名前を *.googleapis.com のワイルドカード名で通過できるようにします。詳細については、レスポンス ポリシーとルールの管理をご覧ください。

VPC ネットワークに対して限定公開マネージド ゾーンを使用することもできます。Cloud DNS の限定公開 DNS ゾーンを使用すると、承認された VPC ネットワークからアクセス可能な DNS ゾーンをホストできます。制限付き Google API の IP アドレスを使用する場合、特定のオンプレミス ネーム サーバーからの転送を構成すると、restricted.googleapis.com の 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 で DNS を構成できます。

レスポンス ポリシーを使用した Cloud DNS の構成

特定の名前を制限付き VIP アドレスに転送する

各ゾーンにローカルの CNAME データを含むレスポンス ポリシーを構成して、Google API リクエストを制限付き Google API に変換できます。指定されていない名前は、引き続き通常の DNS を使用して解決されます。

たとえば、ゾーンにローカル CNAME データを含む pubsub.googleapis.com のレスポンス ポリシーを作成して、Google API リクエストを restricted.googleapis.com に変換できます。その間、指定されていない www.googleapis.com は、引き続き通常の DNS を使用して解決されます。

次の構成例では、ポリシーを作成して特定の VPC ネットワークに適用します。

gcloud

  1. レスポンス ポリシーを作成するには、gcloud beta dns response-policies create コマンドを実行します。

    gcloud beta dns response-policies create RESPONSE_POLICY_NAME \
        --networks=NETWORK \
        --description=DESCRIPTION
    

    次のように置き換えます。

    • RESPONSE_POLICY_NAME: 作成するレスポンス ポリシーの名前または ID(例: myresponsepolicy
    • NETWORK: レスポンス ポリシーに関連付けるネットワーク名のカンマ区切りのリスト(例: network1,network2
    • DESCRIPTION: レスポンス ポリシーの説明(例: My new response policy
  2. ポリシーにルールを追加するには、gcloud beta dns response-policies rules create コマンドを実行します。

    gcloud beta dns response-policies rules create RESPONSE_POLICY_RULE_NAME \
        --response-policy=RESPONSE_POLICY_NAME \
        --dns-name=pubsub.googleapis.com. \
        --local-data=name="pubsub.googleapis.com.",type="A",ttl=300,rrdatas="199.36.153.4|199.36.153.5|199.36.153.6|199.36.153.7"
    

    次のように置き換えます。

    • RESPONSE_POLICY_RULE_NAME: 作成するレスポンス ポリシー ルールの名前(例: myresponsepolicyrule
    • RESPONSE_POLICY_NAME: レスポンス ポリシーの名前(例: myresponsepolicy

API

  1. URL を使用してレスポンス ポリシーを作成します。

    {
      kind: "dns#responsePolicy",
      response_policy_name: RESPONSE_POLICY_NAME,
      description: RESPONSE_POLICY_DESCRIPTION,
      networks: [
        {
          network_url: URL_TO_NETWORK;
        }
      ]
    }
    

    次のように置き換えます。

    • RESPONSE_POLICY_NAME: レスポンス ポリシーの名前
    • RESPONSE_POLICY_DESCRIPTION: レスポンス ポリシーの説明
    • URL_TO_NETWORK: レスポンス ポリシーを作成する URL

  2. ポリシーにルールを追加します。

    {
      kind: "dns#responsePolicyRules",
      rule_name: RULE_NAME,
      dns_name: DNS_NAME,
      local_data: [
        {
          name: "pubsub.googleapis.com.",
          type: "A",
          ttl: 300,
          rrdata: ["199.36.153.4", "199.36.153.5", "199.36.153.6", "199.36.153.7"]
        }
      ]
    }
    

    次のように置き換えます。

    • RULE_NAME: 作成するルールの名前(例: pubsub
    • DNS_NAME: ルールを作成する DNS 名(pubsub.googleapis.com. など)。末尾のドットに注意します。

制限付きの VIP アドレス以外のすべての名前を転送する

ドメイン全体または大きな IP アドレス ブロックを対象とするポリシールールから、一部の DNS レスポンスを除外するルールを設定できます。このコンセプトは「パススルー動作」と呼ばれます。パススルー動作を使用すると、サービス制御のサポート対象外の名前をワイルドカード名で通過させることができます。

たとえば、www.googleapis.com は、*.googleapis.com のワイルドカード名で通過させることができます。www に対する完全一致はワイルドカード * よりも優先されます。

次の構成例では、指定した名前でポリシーを作成し、特定の VPC ネットワークに適用します。このルールにより、www.googleapis.com でワイルドカード *.googleapis.com をバイパスできます。

gcloud

  1. レスポンス ポリシーを作成するには、gcloud beta dns response-policies create コマンドを実行します。

    gcloud beta dns response-policies create RESPONSE_POLICY_NAME \
        --networks=NETWORK \
        --description=DESCRIPTION
    

    次のように置き換えます。

    • RESPONSE_POLICY_NAME: 作成するレスポンス ポリシーの名前または ID(例: myresponsepolicy
    • NETWORK: レスポンス ポリシーに関連付けるネットワーク名のカンマ区切りのリスト(例: network1,network2
    • DESCRIPTION: レスポンス ポリシーの説明(例: My new response policy
  2. ポリシーにバイパス ルールを追加するには、--behavior フラグを bypassResponsePolicy に設定して、gcloud beta dns response-policies rules create コマンドを実行します。

    gcloud beta dns response-policies rules create RESPONSE_POLICY_RULE_NAME \
        --response-policy=RESPONSE_POLICY_NAME \
        --dns-name=DNS_NAME \
        --behavior=bypassResponsePolicy
    

    次のように置き換えます。

    • RESPONSE_POLICY_RULE_NAME: 作成するレスポンス ポリシー ルールの名前(例: myresponsepolicyrule
    • RESPONSE_POLICY_NAME: レスポンス ポリシーの名前(例: myresponsepolicy
    • DNS_NAME: DNS またはドメイン名(例: www.googleapis.com

API

  1. レスポンス ポリシーを作成します。

    {
      kind: "dns#responsePolicy",
      response_policy_name: RESPONSE_POLICY_NAME,
      description: RESPONSE_POLICY_DESCRIPTION,
      networks: [
        {
          network_url: URL_TO_NETWORK;
        }
      ]
    }
    

    次のように置き換えます。

    • RESPONSE_POLICY_NAME: レスポンス ポリシーの名前(例: my-response-policy
    • RESPONSE_POLICY_DESCRIPTION: レスポンス ポリシーの説明(例: my response policy
    • URL_TO_NETWORK: レスポンス ポリシーを作成する URL
  2. ポリシーにルールを追加します。

    {
      kind: "dns#responsePolicyRules",
      rule_name: RULE_NAME,
      dns_name: DNS_NAME,
      local_data: [
        {
          name: "*.googleapis.com.",
          type: "A",
          ttl: 300,
          rrdata: ["restricted.googleapis.com."]
        }
      ]
    }
    {
      kind: "dns#responsePolicyRules",
      rule_name: "www-passthru",
      dns_name: "www.googleapis.com.",
      behavior: BYPASS_RESPONSE_POLICY
    }
    

    次のように置き換えます。

    • RULE_NAME: 作成するルールの名前(例: googleapis
    • DNS_NAME: ルールを作成するワイルドカードの DNS 名(*.googleapis.com. など)。末尾のドットに注意します。

限定公開ゾーンを使用した Cloud DNS 構成

レスポンス ポリシーが使用できない場合は、限定公開ゾーンを使用して Cloud DNS を構成します。

  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.

特殊なケースでの 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 の設定をご覧ください。