Private Service Connect機能解説。Google Cloud APIにプライベート接続

記事タイトルとURLをコピーする

G-genの杉村です。当記事では Google Cloud APIs にプライベートネットワーク経由でアクセスするための機能である Private Service Connect について解説します。

概要

Private Service Connect とは

Private Service Connect とは、 External IP(Public IP)アドレスを持たない VM や、オンプレミスのクライアントから、プライベートネットワーク経由で Google Cloud の API 群や、ユーザーの独自サービスへアクセスできるようにするための仕組みです。

この機能では、VPC ネットワーク内に Internal IP(Private IP)アドレスを持つエンドポイントが作成され、このエンドポイント経由で Google Cloud APIs や独自サービスにアクセスできるようになります。

当記事では、Private Service Connect で Google Cloud API にアクセスする方法について紹介します。

Google Cloud ドキュメントより引用

Google Cloud APIs とは

前提知識として、Google Cloud APIs とは何かについておさらいします。

ほとんどの Google Cloud リソースに対する閲覧、作成、更新、削除などは、すべて Web API によって操作されます。これは、Amazon Web Services(AWS)などの他のパブリッククラウドでも同様です。

これについては、以下の記事で詳細に解説しています。

Private Service Connect のユースケース

セキュリティ上の理由から、Google Cloud APIs へのアクセスを、インターネット経由でなくプライベートネットワーク内で行いたいというケースがあります。

限定公開の Google アクセス機能を使うことで、External IP アドレスを持たない VM やオンプレミスのノードから、Google Cloud APIs にアクセスできるようになります。

しかし、限定公開の Google アクセスでは、199.36.153.4/30199.36.153.8/30 といった、RFC 1918 範囲(※)ではない IP アドレスを使う必要があるため、 Cloud Interconnect や Cloud VPN 経由でオンプレミス環境から利用する際などに、ルーティングが複雑化するなどの弊害が出る可能性があります。

10.0.0.0/8172.16.0.0/12192.168.0.0/16

一方で当記事で解説する Private Service Connect を利用すれば、 VPC ネットワーク内に Internal IP アドレスを持つエンドポイントを作成し、このエンドポイント経由で Google Cloud APIs にアクセスできます。

このエンドポイントには任意の IP アドレスを割り当てることができ、RFC 1918 で定義された IP アドレスでも、そうでなくても構いません。

必要性

Google Cloud APIs はインターネット経由でアクセスする必要があるため、これをセキュアでないと考える方もいるかもしれません。しかし、API リクエストは HTTPS(SSL/TLS)で暗号化されます。そのため、鍵情報の漏洩がなければ、パケットが盗聴されても内容は解読されません。Google から SSL/TLS 証明書の鍵情報が漏洩し、さらにパケットが盗聴・復号されて情報が漏洩する可能性は、一般的には低いと考えられます。

そのため、Private Service Connect や限定公開の Google アクセスを用いる主たる理由は「インターネットへのルーティングができないクライアントを、Google Cloud APIs へアクセスできるようにするため」あるいは「会社(組織)のセキュリティポリシーに準拠するため」であるともいえます。

機能のポイント

Private Service Connect 機能のポイントは以下の通りです。

  • Private Service Connect エンドポイント(Internal IP アドレスが割り当てられる)を作成し、オンプレミスのノードや VPC ネットワーク内の VM は、そのエンドポイント経由で Google Cloud APIs へアクセスできる
  • エンドポイント作成時に、以下の種類のいずれかを選択
    • all-apis
    • vpc-sc
  • エンドポイントは時間ごとに料金が発生($7.44/月程度)

イメージ

Private Service Connect エンドポイントの料金は、以下の公式の単価表を参照してください。

Private Service Connect でマネージドサービスを公開する

当記事では詳しく紹介しませんが、もう1つの Private Service Connect の機能として、自環境でホストするサービスを他の Google Cloud ユーザー向けに公開する機能があります。これは、マネージドサービスの公開と呼ばれます。なお、Amazon Web Services(AWS)の AWS PrivateLink でも類似のことが実現可能です。

以下の記事でご紹介していますので、ご参照ください。

blog.g-gen.co.jp

Private Service Connect vs 限定公開の Google アクセス

機能の違い

Private Service Connect に似た機能として、限定公開の Google アクセスがあります。

これら2つの機能は、以下のような違いがあります。

  • 限定公開の Google アクセス機能では API エンドポイントとして利用する仮想 IP アドレスとして 199.36.153.4/30199.36.153.8/30 といった RFC 1918 定義外の IP アドレスを使う必要がある
  • 限定公開の Google アクセス機能では、デフォルトのドメイン名を使う場合に限り、DNS の追加設定が不要で手軽に利用できる
    • しかしこのパターンでは 0.0.0.0/0 へのデフォルトルートと、ファイアウォール許可設定を追加する必要がある
  • 限定公開の Google アクセス機能では料金が発生しない

なお、Private Service Connect を設定する際には、限定公開の Google アクセスを有効化する必要がありますので、Private Service Connect 機能は限定公開の Google アクセスの拡張版と考えることもできます。

どちらを使えばよいのか?

Private Service Connect vs 限定公開の Google アクセスを考える時、どのように判断したらよいでしょうか。以下のような観点で検討します。

  1. 以下の全てに当てはまる場合は、Private Service Connect を選択する
    • オンプレミスからのプライベートネットワーク経由での Google Cloud APIs 利用がある
    • 限定公開の Google アクセスで使われる 199.36.153.4/30 または 199.36.153.8/30 を使うにあたり、経路交換や経路制御で不都合がある
      • 例: オンプレミス側のクライアントによって異なる通信先 VPC ネットワークや使用する回線を変えるため、複数のエンドポイントを使用したい
      • 例: RFC 1918 以外の IP アドレスが広報されてくることが望ましくない
  2. それ以外の場合、無料で使える限定公開の Google アクセスを選択する

利用する IP アドレスとして、199.36.153.4/30 または 199.36.153.8/30 が許容できる場合は、無償で利用できる限定公開の Google アクセスを選択するのがよいでしょう。

限定公開の Google アクセス機能については、以下の解説記事で紹介していますので、ぜひご参照ください。

blog.g-gen.co.jp

設計のポイント

エンドポイントの種類

エンドポイントの種類によって、アクセス可能な API が異なります。

all-apis の場合、 Google Cloud のほとんどのサービスや、Google Map、Google 広告など、多くのサービスへ接続することができます。

vpc-sc の場合、接続できるのは VPC Service Controls でサポートされているサービスだけです。

VPC Service Controls を使用しておらず、将来的に使用する予定も全く無い場合は前者を選択します。一方で VPC Service Controls を使用している、または使用する予定がある場合で、かつ VPC Service Controls がサポートしていないサービスへのアクセスが不要な場合は、後者を利用するとよいでしょう。

エンドポイントがサポートしている接続先の API については、以下の公式ドキュメントを参照してください。

エンドポイントの IP アドレス

Private Service Connect エンドポイント作成時には、1つの Internal IP アドレスを割り当てます。IP アドレスは、RFC 1918 アドレス(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)でもそうでなくても構いませんが、 IPv6 アドレスは使えません。

エンドポイントの IP アドレスは、サブネットの IP アドレスとは重複できません。また、VPC ネットワークと、ネットワークピアリングや Cloud Interconnect、Cloud VPN 等で接続されているネットワークと重複してもいけません。

将来的な VPC ネットワークやサブネットの拡張などを考慮して、重複が起きない、かつ IP リソースの無駄使いにならないような IP アドレスを指定しましょう。

また、もしオンプレミス環境から Cloud Interconnect や Cloud VPN 経由で Private Service Connect エンドポイントを利用したい場合、Google Cloud から広報するルートの集約性を考慮して、VPC サブネットの IP アドレス帯と隣り合った IP アドレスにするのが望ましいでしょう。

DNS 設定

例として、Cloud Storage API のエンドポイントは https://storage.googleapis.com/ であり、BigQuery API のエンドポイントは https://bigquery.googleapis.com/ です。これらのドメイン名の IP アドレスを名前解決すると、パブリック IP が返ります。

storage.googleapis.comの名前解決の結果

Private Service Connect エンドポイントを作成しても、このままでは、gcloud コマンドなどのクライアントは、これらのパブリック IP アドレスを目指してパケットを発送してしまいます。

そこで、以下のいずれかの方法で、クライアントが Private Service Connect エンドポイントのプライベート IP アドレスを向くようにする必要があります。

  1. クライアント(SDK)側の設定で、Private Service Connect エンドポイントを参照するよう明示的に設定する
  2. プライベートな DNS 名前解決により、クライアントが Private Service Connect エンドポイントを向くように設定する

1.は、クライアントへの明示的な設定により、向き先を変える方法です。Private Service Connect エンドポイントを作成すると、プロジェクトの Cloud DNS に <サービス名>.<エンドポイント名>.p.googleapis.com という DNS ゾーンが自動的に作成されます。gcloud や Python SDK など、クライアント側では、向き先の API エンドポイント URL を明示的に指定することができます。この方法では、DNS 設定を変更することなく Private Service Connect エンドポイントを使うことができます。

2.は、VM やオンプレミスのクライアント PC 等が参照する DNS サーバー、あるいは Cloud DNS のプライベートゾーンで、*.googleapis.com に対する CNAME レコードを作成し、それを Private Service Connect エンドポイントの IP アドレスへ解決させる方法です。この方法では、クライアント側の設定やプログラムのソースコードを変更することなく、Private Service Connect エンドポイントを使うことができます。

当記事では続けて、2. の設定手順を紹介します。

設定手順

はじめに

当記事では、設定手順の概要のみを記載しています。より詳細な設定手順は、以下の公式ドキュメントをご参照ください。

設定手順の概要

Private Service Connect の設定手順のおおまかな流れを以下に記載します。

  1. 必要な API を有効化
    • Compute Engine API
    • Service Directory API
    • Cloud DNS API
  2. Private Service Connect エンドポイントを作成
  3. 対象のサブネットで限定公開の Google アクセスを有効化
  4. VPC ファイアウォールで、エンドポイント IP アドレスへの 443/TCP の 下り(Egress)通信が拒否されていないことを確認(デフォルトでは許可)
  5. Cloud DNS に googleapis.com という限定公開 DNS ゾーンを作成
  6. 同ゾーンに以下を追加
    • DNS名 : googleapis.com
    • タイプ : A
    • IPv4アドレス : (エンドポイントの IP アドレス)
  7. 同ゾーンに以下を追加
    • DNS名 : *.googleapis.com
    • タイプ : CNAME
    • 正規名 : googleapis.com

DNS 設定の意味

上記のうち、5. 以降の DNS 設定について解説します。

例えば、VM の中で gcloud storage コマンドを実行して、Cloud Storage へのアクセスが発生したとします。gcloud コマンドは Cloud Storage API へリクエストをするために、storage.googleapis.com へ HTTPS プロトコルでアクセスしようとします。VM はデフォルトでは Cloud DNS を参照するので、限定公開ゾーンを優先的に使って名前解決をします。

クライアントの動作の流れは、以下のとおりです。

  1. VM が storage.googleapis.com を名前解決するため Cloud DNS へクエリする
  2. クエリは *.googleapis.com に一致しているので、CNAME で googleapis.com へ解決される
  3. googleapis.com は A レコードにより Private Service Connect エンドポイントの IP アドレスに解決される
  4. VM は 名前解決の結果を受け取る
  5. gcloud コマンドは Private Service Connect エンドポイントの IP アドレスへ API リクエストを実行する

参考として、Cloud DNS でのレコード追加済みの画面のスクリーンショットと、実際に VM の中から名前解決を試みた結果を以下に貼付します。

Cloud DNSでレコードが設定されている

VMからCloud Storageを名前解決するとエンドポイントURLが返る

オンプレミスから利用する

ここまで、Compute Engine VM から Private Service Connect エンドポイントを利用するための設定手順を説明しました。

一方、Cloud Interconnect や Cloud DNS で接続されたオンプレミスネットワークから Private Service Connect エンドポイントを利用するには、以下の設定が追加で必要です。

  • Private Service Connect エンドポイントの IP アドレスを、Cloud Router からオンプレミス側に広報する
  • オンプレミスノードが参照する DNS にフォワーダー設定を追加して、Google Cloud APIs の名前解決を Cloud DNS プライベートゾーンに転送する

1つ目は、Cloud Router のカスタムルート アドバタイズで実現可能です。2つ目は、Cloud DNS の受信サーバー ポリシーで実現可能です。

2つ目については、オンプレミスのクライアントが Private Service Connect エンドポイントに向けば良いので、オンプレミスノードが参照する DNS に直接 Cloud DNS と同じレコードを追加しても構いません。

詳細な設定手順は、以下の公式ドキュメントを参照してください。

杉村 勇馬 (記事一覧)

執行役員 CTO

元警察官という経歴を持つ IT エンジニア。クラウド管理・運用やネットワークに知見。AWS 認定資格および Google Cloud 認定資格はすべて取得。X(旧 Twitter)では Google Cloud や Google Workspace のアップデート情報をつぶやいています。