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

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

G-genの杉村です。

Google Cloud (GCP) をご利用であれば、 Google Compute Engine の VM やオンプレミスのサーバーから様々なサービスを利用すると思います。 アプリケーションのログを Cloud Logging に出力したり、安価なオブジェクトストレージである Cloud Storage にファイルをアップロードしたり、 BigQuery に役立つ情報を投入したり。

限定公開の Google アクセスを使うと、そういった Google サービスの API 群に External IP を持っていない VM からでもアクセスできるようになります。
概念や設定方法がすこし難しいので、解説を見ていきましょう。

…余談ですが、限定公開の Google アクセスは英名では Private Google Access となっています。こちらのほうがスッキリしていて分かりやすい気もしますね。

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

blog.g-gen.co.jp

仕様

f:id:ggen-sugimura:20211010143345p:plain
イメージ

限定公開の 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 アカウントと IAM です。)

例えば Cloud Storage の Web API のエンドポイントは https://storage.googleapis.com/ であり BigQuery の API エンドポイントは https://bigquery.googleapis.com/ です。 これらの API エンドポイントはインターネットに公開されています。

なので、 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) を許可する必要があり ます。

なんとなくインターネットに出ていってしまうような感じもしますが、この設定により Internal 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

f:id:ggen-sugimura:20211009115311p:plain
上記の手順で Cloud DNS が設定された状態


これでどうなるかというと、例えば VM の中で gsutil コマンドを実行して Cloud Storage へのアクセスが発生したとしましょう。
gsutil コマンドは Web API コールをするために storage.googleapis.com へ HTTPS でアクセスしようとします。
すると VM は Cloud DNS を参照していますから、限定公開ゾーンを優先的に使って名前解決をします。
以下の流れです。

  • VM が storage.googleapis.com を名前解決するため Cloud DNS へ DNS クエリする
  • これは *.googleapis.com に一致しているので CNAME で private.googleapis.com へ解決される
  • private.googleapis.com は A レコードで 199.36.153.4 , 199.36.153.5 , 199.36.153.6 , 199.36.153.7 のどれかへ解決され VM へ返答
  • 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 アドレスです。

f:id:ggen-sugimura:20211009120059p:plain
参考: 名前解決の結果

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

違いはなに?

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

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 です。

選択フローチャート

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

f:id:ggen-sugimura:20211009123431p:plain
ドメイン名決定フローチャート

一番左のデフォルトのドメイン名は図中にあるように 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つ目については、オンプレミスのクライアントが Private Service Connect エンドポイントに向けば良いので、オンプレミスノードが参照する DNS に直接 Cloud DNS と同じレコードを追加してもよいでしょう。
(ただし二重管理となってしまうため、理由がない限り望ましくありません。)

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

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

類似の機能として Private Service Connect があります。
前述の通り、これについては以下のブログ投稿で解説しています。
どちらの機能を利用したら良いのかについて以下の記事で説明していますので、ご参照ください。

blog.g-gen.co.jp

杉村 勇馬 (記事一覧)

クラウドソリューション部 部長

クラウド管理運用やネットワークに知見あり。AWSの全12資格をコンプリートしたので、次はGoogle Cloudの認定資格を狙っている。現在、Google Cloud認定資格は3冠。

2021年12月現在、ハマっているものはマーベル (遅い)