限定公開の Google アクセスの仕組みと手順をきっちり解説

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

G-genの杉村です。限定公開の Google アクセス (Private Google Access) を使うと Google Cloud サービスの API に External IP を持っていない VM からでもアクセスできるようになります。当記事では、この機能を詳細に解説します。

限定公開の Google アクセスとは

限定公開の Google アクセス (Private Google Access) とは Google Cloud (旧称GCP) の API に対して、 External IP (Public IP) を持たない VM や、オンプレミスのクライアントから、プライベートネットワークのみでアクセスできるようにする仕組みです。

Google Cloud の API は、通常はインターネット経由でアクセスされることを想定しています。しかし、インターネットを介さず、プライベートネットワークでのアクセスを可能にするのが当機能です。

なお、類似の機能として Private Service Connect があります。どちらの機能を利用したら良いのかについては Private Service Connect について解説した以下の記事で説明していますので、ぜひ先にご参照ください。

blog.g-gen.co.jp

仕様

イメージ

限定公開の Google アクセスの仕様と特徴を列挙していきます。

  • サブネット単位で有効化 する
  • 有効化すると External IP を持たない VM やオンプレミスのノードが Google の API へアクセスできるように なる
    • Cloud Storage や BigQuery などの Google Cloud サービスはもちろん、 Google Map, Google Workspace や Google 広告なども対象
  • 利用するドメイン名の選択肢 として以下の3つがあり "アクセス可能な API ", "穴をあけるファイアウォール設定" , "必要な DNS 設定" などが異なる
    • 1.デフォルトのドメイン名を利用する
    • 2.private.googleapis.com を利用する
    • 3.restricted.googleapis.com を利用する

この中で特に理解が難しいのは最後の「 利用するドメイン名 」ですので、ここを解説していきます。

利用するドメイン名

"利用するドメイン名" の意味

先ほど、利用するドメイン名には3つの選択肢があると書きました。

  • 1.デフォルトのドメイン名を利用する
  • 2.private.googleapis.com を利用する
  • 3.restricted.googleapis.com を利用する

そもそもこれはどういうことでしょうか?どう選べばいいのでしょうか?

まず、前提として Google Cloud サービスはほとんど全てが Web API により操作され ます (AWS など他のパブリッククラウドでも同様です) 。

VM の起動・停止も、 BigQuery のテーブルへのクエリも、 Cloud Storage のオブジェクトのアップロード/ダウンロードも、 Web API を通じて操作されます。Web ブラウザでコンソールから操作しても、 gcloud コマンドラインから操作しても、 裏では Web API が HTTPS でコールされている のです。

Google Cloud API とクライアント

例えば Cloud Storage の Web API のエンドポイントは https://storage.googleapis.com/ であり BigQuery の API エンドポイントは https://bigquery.googleapis.com/ です。これらの API エンドポイントはインターネットに公開されています。そのため例として Compute Engine VM から Cloud Storage や BigQuery を利用する場合、本来は External IP を使ってアクセスする必要があります。

限定公開の Google アクセスにおける "利用するドメイン名" の設定はこれに関係しています。

デフォルトのドメイン名を利用する

選択肢 1. デフォルトのドメイン名を利用する は、もともとの Web API エンドポイントをそのまま利用する選択肢です。

サブネットで限定公開の Google アクセスを有効化すれば、すぐ使うことができます。

直感に反しますが、この方法では VPC ルートで 0.0.0.0/0 をデフォルトインターネットゲートウェイに向ける必要があり ます。

さらに ファイアウォールの下り (Egress) ルールで 0.0.0.0/0 に対する HTTPS (443/TCP) を許可する必要があり ます。

この方法ではトラフィックがインターネットに出ていくようにも思えますが、この設定により External IP を持っていない VM でも Google API へのアクセスができるようになりますし、通信は Google のネットワーク内に閉じたものになります。

とはいえ、 VPC 単位でデフォルトルートを 0.0.0.0/0 に向けなくてはいけませんし、ファイアウォール設定も空けなければならず、何かの設定ミスで VM が External IP を持ってしまうと、 VM は好きにインターネットに出て行けてしまう環境となってしまいます。

これを防ぎたい場合は、次の選択肢が検討されます。

private.googleapis.com / restricted.googleapis.com を利用する

選択肢 2. private.googleapis.com を利用する3. restricted.googleapis.com を利用する は、 private.googleapis.comrestricted.googleapis.comデフォルトのドメイン名の CNAME として登録することでこれらを Web API エンドポイントとして利用 し、アクセス先 IP アドレスを変える方法です。

こちらの選択肢ですと 199.36.153.8/30199.36.153.4/30 といったIP アドレス帯に対しての通信を許可するファイアウォール・ルートを設定すればよい ことになります。

理解しやすくするために、 restricted.googleapis.com の場合を例にとって設定の全体の流れを説明します。


  1. 対象のサブネットで 限定公開の Google アクセスを有効化
  2. 199.36.153.4/30デフォルトのインターネットゲートウェイへ向いている ことを確認 ( 0.0.0.0/0 が向いていれば問題ない)
  3. VPC ファイアウォールで 199.36.153.4/30 への 443/TCP の 下り (Egress) 通信が拒否されていない ことを確認 (デフォルト状態では許可)
  4. Cloud DNS に googleapis.com という限定公開 DNS ゾーンを作成
  5. 同ゾーンに以下を追加
    • DNS名: restricted.googleapis.com
    • タイプ: A
    • IPv4アドレス:
      • 199.36.153.4
      • 199.36.153.5
      • 199.36.153.6
      • 199.36.153.7
  6. 同ゾーンに以下を追加
    • DNS名: *.googleapis.com
    • タイプ: CNAME
    • 正規名: restricted.googleapis.com

上記の手順で Cloud DNS が設定された状態


上記を設定すると挙動がどう変わるのでしょうか。例として Compute Engine VM 内から gsutil コマンドを実行して Cloud Storage へのアクセスが発生するときの挙動で説明します。

gsutil コマンドは Web API コールをするために storage.googleapis.com へ HTTPS でアクセスしようとします。すると VM は Cloud DNS を参照しますので、限定公開ゾーンを優先的に使って名前解決します。以下の流れです。

  1. VM が storage.googleapis.com を名前解決するため Cloud DNS へ DNS クエリする
  2. これは *.googleapis.com に一致しているので CNAME で restricted.googleapis.com へ解決される
  3. restricted.googleapis.com は A レコードで 199.36.153.4 , 199.36.153.5 , 199.36.153.6 , 199.36.153.7 のどれかへ解決され VM へ返答される
  4. gsutil コマンドは 199.36.153.4 , 199.36.153.5 , 199.36.153.6 , 199.36.153.7 のどれかへアクセス

これら IP への ルートが デフォルトのインターネットゲートウェイへ向いて おり、かつ ファイアウォールで 443/TCP が許可 されていれば、 Google の内部ネットワークを通って API コールができる、というわけです。

private.googleapis.com では 199.36.153.8/30 を、restricted.googleapis.com では 199.36.153.4/30 を使う必要があります。

これらの IP はインターネットに広報されていない、限定公開の Google アクセス専用の IP アドレスです。

参考: 名前解決の結果

private.googleapis.com / restricted.googleapis.com の違い

違いはなに?

private.googleapis.comrestricted.googleapis.com も、基本的な仕組みは同様です。
違いは、 アクセスできる API の種類利用する IP アドレス です。

余談ですが Google Cloud 認定資格である Professional Cloud Network Engineer 試験でもよく問われますので、受験予定がある方は restricted.googleapis.comprivate.googleapis.com の違いについてはしっかり押さえておいた方が良いでしょう。

private.googleapis.com

ほとんどの Google API へのアクセスが可能です。

次に説明する restricted.googleapis.com では VPC Service Controls でサポートしている API にだけしかアクセスできませんが、こちらは VPC Service Controls のサポート有無は関係ありません。

多くの API にアクセス可能な一方で VPC Service Controls で VM からの API アクセスをコントロールしたい場合は、コントロール外になってしまうため、適していません。

VPC Service Controls を使用しない・使用する予定がない場合 や、 VPC Service Controls を使用するものの、 VPC Service Controls の対象でないサービスへもアクセスする必要がある場合 にこちらを選択すればよいでしょう。

DNS に登録する専用 IP アドレスは 199.36.153.8/30 です。

restricted.googleapis.com

こちらは VPC Service Controls でサポートされている Google API に だけ アクセスできます。それ以外へのアクセスは弾かれます。

VPC Service Controls を利用している/利用する予定があり、 VM からは境界外へのアクセスをさせたくない場合 にこちらを選択します。

DNS に登録する専用 IP アドレスは 199.36.153.4/30 です。

選択フローチャート

どのドメインを選択すればいいか、簡単なフローチャートで見てみましょう。

ドメイン名決定フローチャート

一番左のデフォルトのドメイン名は図中にあるように VM が External IP を持っているとインターネットへアクセスできてしまうなどのリスクを十分理解して 選択しましょう。

有効化の手順

本投稿では概略だけ記載します。詳細は以下の公式ドキュメントを随時ご参照ください。

cloud.google.com

デフォルトのドメインの場合

  1. 対象のサブネットで 限定公開の Google アクセスを有効化
  2. 0.0.0.0/0デフォルトのインターネットゲートウェイへ向いている ことを確認 (デフォルト状態では既にルートがある)
  3. VPC ファイアウォールで 0.0.0.0/0 への 443/TCP の 下り (Egress) 通信が拒否されていない ことを確認 (デフォルト状態では許可)

private.googleapis.com

  1. 対象のサブネットで 限定公開の Google アクセスを有効化
  2. 199.36.153.8/30デフォルトのインターネットゲートウェイへ向いている ことを確認 ( 0.0.0.0/0 が向いていれば問題ない)
  3. VPC ファイアウォールで 199.36.153.8/30 への 443/TCP の 下り (Egress) 通信が拒否されていない ことを確認 (デフォルト状態では許可)
  4. Cloud DNS に googleapis.com という限定公開 DNS ゾーンを作成
  5. 同ゾーンに以下を追加
    • DNS名: private.googleapis.com
    • タイプ: A
    • IPv4アドレス:
      • 199.36.153.8
      • 199.36.153.9
      • 199.36.153.10
      • 199.36.153.11
  6. 同ゾーンに以下を追加
    • DNS名: *.googleapis.com
    • タイプ: CNAME
    • 正規名: private.googleapis.com

restricted.googleapis.com

  1. 対象のサブネットで 限定公開の Google アクセスを有効化
  2. 199.36.153.4/30デフォルトのインターネットゲートウェイへ向いている ことを確認 ( 0.0.0.0/0 が向いていれば問題ない)
  3. VPC ファイアウォールで 199.36.153.4/30 への 443/TCP の 下り (Egress) 通信が拒否されていない ことを確認 (デフォルト状態では許可)
  4. Cloud DNS に googleapis.com という限定公開 DNS ゾーンを作成
  5. 同ゾーンに以下を追加
    • DNS名: restricted.googleapis.com
    • タイプ: A
    • IPv4アドレス:
      • 199.36.153.4
      • 199.36.153.5
      • 199.36.153.6
      • 199.36.153.7
  6. 同ゾーンに以下を追加
    • DNS名: *.googleapis.com
    • タイプ: CNAME
    • 正規名: restricted.googleapis.com

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

Cloud Interconnect や Cloud DNS で接続されたオンプレミス環境から限定公開の Google アクセスを利用するには、以下の設定が必要です。

  • 限定公開の Google アクセスの IP アドレスをオンプレミス側に広報する
  • オンプレミスノードが参照する DNS にフォワーダー設定を追加して、 Google API の名前解決を Cloud DNS に転送する

1つ目は Cloud Router の カスタムルート アドバタイズ を使うことで実現可能です。

2つ目は Cloud DNS の 受信サーバー ポリシー で実現可能です。

2つ目については、オンプレミスのクライアントが限定公開の Google アクセスの IP アドレス ( 199.36.153.8/30 / 199.36.153.4/30 ) 向きさえすれば良いので、オンプレミスの DNS に Cloud DNS と同じレコードを追加しても構いません (ただし二重管理となってしまいます) 。

より詳細な設定手順は 公式ドキュメント をご参照ください。

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

類似の機能として Private Service Connect があります。

どちらの機能を利用したら良いのかについて以下の記事で説明していますので、ご参照ください。

blog.g-gen.co.jp

杉村 勇馬 (記事一覧)

執行役員 CTO / クラウドソリューション部 部長

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