VPC ネットワークから GCP サービスへのプライベート接続を設定する

概要

限定公開の Google アクセスを使用すると、外部 IP アドレスを持たない GCP VM インスタンスから公開の Google API やサービスにアクセスできます。

VPC Service Controls のサービス境界は Google API とサービスへのアクセスを制御します。サービス境界内での限定公開の Google アクセスを VPC Service Controls がサポートする Google API とサービスに制限するには、VM インスタンスが *.googleapis.com ではなく restricted.googleapis.com にリクエストを送信する必要があります。

VPC Service Controls は制限付き VIP がなくても使用できますが、このような使い方はしないでください。制限付き VIP を使用しないと、サポートされているサービスからサポートされていないサービスにデータが送信される可能性があります。

restricted.googleapis.com199.36.153.4/30 に解決されます。この IP アドレス範囲はインターネットに公開されません。

$ host restricted.googleapis.com
restricted.googleapis.com has address 199.36.153.4
restricted.googleapis.com has address 199.36.153.5
restricted.googleapis.com has address 199.36.153.6
restricted.googleapis.com has address 199.36.153.7

次の例では、サービス境界に 2 つのプロジェクトがあります。1 つのプロジェクトには承認済みの VPC ネットワークが設定され、もう 1 つのプロジェクトには保護された Cloud Storage リソースが設定されています。承認済みの VPC ネットワーク内の VM インスタンスから Google API またはサービスへのクエリは restricted.googleapis.com に解決され、保護されたリソースにアクセスできます。

VPC Service Controls を使用した限定公開の Google アクセス(クリックして拡大)
VPC Service Controls を使用した限定公開の Google アクセス(クリックして拡大)

VPC ネットワークのセキュリティ

限定公開の Google アクセスでは、VM インスタンスは内部 IP アドレスを使用します。保護された Google API リソースにアクセスする場合に外部 IP アドレスは必要ありません。ただし、VM インスタンスが外部 IP アドレスを所有している場合や、インターネット アクセスの要件を満たしている可能性があります。VPC ネットワーク内の VM インスタンスからの下りトラフィックを制限するには、次のいずれかの対策を行います。

  • ネクストホップがデフォルトのインターネット ゲートウェイになっているルートを制限します。カスタム静的ルートの宛先が 199.36.153.4/30 の場合、ネクストホップがデフォルト インターネット ゲートウェイのルートは削除できます。たとえば、VPC ネットワーク内で外部 IP アドレスを持つ VM インスタンスがインターネットにアクセスできないようにするために、自動的に作成されたデフォルト ルート(宛先: 0.0.0.0/0、ネクストホップ: デフォルトのインターネット ゲートウェイ)を削除できます。

  • 下りトラフィックを拒否するファイアウォール ルールを作成します。デフォルトでは、暗黙の下り許可ルールにより、VM インスタンスはすべての宛先にトラフィックを送信できます(該当するルートが存在する場合)。すべての送信トラフィックをブロックする下り拒否ルールを作成し、VPC ネットワーク内の特定の宛先と 199.36.153.4/30restricted.googleapis.com)IP アドレス範囲へのトラフィックを許可する下り許可ルールを作成して、この許可ルールの優先順位を上にします。restricted.googleapis.com への通信はすべて TCP ポート 443 で行われます。

VPC ルートまたはファイアウォール ルールの使用方法については、VPC のドキュメントのルートの使用またはファイアウォール ルールの使用をご覧ください。

VPC ネットワーク内のインスタンスに restricted.googleapis.com へのルーティングを構成する

VPC Service Controls でサポートされている Google マネージド サービスへのアクセスを有効にするには、デフォルト インターネット ゲートウェイへのネクストホップを持つ宛先 199.36.153.4/30 に限定されたカスタムルートを作成します。ネクストホップはデフォルトのインターネット ゲートウェイですが、199.36.153.4/30 に送信されたトラフィックは 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 ネットワークの名前です。

カスタムルートを追加したら、VM インスタンスから Google API またはサービスへのトラフィックが制限範囲に送信されるように DNS を構成します。

DNS の構成

制限付き Google API の IP アドレスを使用するには、*.googleapis.comrestricted.googleapis.com の CNAME として解決されるように DNS サーバーを構成します。Cloud DNS の非公開 DNS ゾーンまたはカスタム BIND を使用できます。

非公開 DNS ゾーンを使用すると、GCP 上で実行されている VM は、Cloud DNS のカスタマイズされた DNS 解決を使用できます。ただし、非公開 DNS ゾーンでは部分的なオーバーライドがサポートされません。リクエストが restricted.googleapis.com 仮想 IP(VIP)に送信されるように、すべての API をオーバーライドする必要があります。その結果、サポートされていない API はこの構成のネットワークからアクセスできなくなります。詳しくは、ゾーンの管理をご覧ください。

Cloud Dataflow の DNS 解決はカスタマイズできないため、カスタム BIND と restricted.googleapis.com VIP を Cloud Dataflow に使用することはできません。

Cloud DNS による DNS の構成

限定公開の Google アクセスの DNS 解決を有効にするには、Cloud DNS を使用します。共有 VPC を使用している場合は、Cloud DNS のドキュメントの非公開ゾーンと共有 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 は、最初の手順で作成したゾーンの名前です。

BIND による DNS の構成

DNS 解決に BIND を使用する場合は、制限付き Google API に対する Google API リクエストを解決するように BIND を構成します。次の構成例では、この動作を実現するためにレスポンス ポリシーゾーン(RPZ)を利用しています。

  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.

これで、VPC Service Controls によって保護されている VPC ネットワーク内の VM が Google サービスにアクセスできるようになりました。

VPN または Cloud Interconnect を使用してオンプレミスからのプライベート接続を設定する

オンプレミス ネットワークのホストに限定公開の Google アクセスを構成する方法については、オンプレミス ホスト用の限定公開の Google アクセスの構成をご覧ください。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...