VPC Service Controlsを分かりやすく解説

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

G-genの杉村です。本投稿では、 Google Cloud (GCP) のセキュリティ系サービスの中でも特に重要な VPC Service Controls の概念について分かりやすく解説します。

VPC Service Controls とは

VPC Service Controls は Google Cloud(旧称 GCP)のセキュリティ機能です。

境界 (perimeter) 」と呼ばれる論理的な囲いを作り、その囲いの外から中へのデータ等へのアクセスを防いだり、逆に囲いの中から外へのデータ流出等を防ぐことができます。

しかしながら VPC Service Controls には「できること」と「そうでないこと」があり、当機能だけを使えば Google Cloud のセキュリティが万全になるという訳ではありません。

当記事ではこの「境界(囲い)」とは何を示しているのか、どのような仕組みでデータの流出等を防いでいるのか、について記載します。

VPC Service Controls って結局何ができるの?

できること

できることは Google Cloud サービスに対する API コールの接続元を制限することです。

API コールとはそもそも何か?は後述します。

できることの例

  • BigQuery に対するクエリ のアクセス元を制限
  • Cloud Storage からのオブジェクトの読み取り のアクセス元を制限
  • GKE クラスターの設定変更 のアクセス元を制限

できないこと

VPCへのネットワーク的なアクセスを制限することはできません(それは「VPC ファイアウォール」や「WAF」といった仕組みが担います)。

できないことの例

  • VM への SSH ログインの接続元を制限
  • Webサイトの管理画面からのデータの持ち出しを制限
  • Web アプリへの攻撃を防御

API コールとは?

Google Cloud における "API コール" とはなんでしょうか。以下の記事で図を使って解説しています。「API コールとは?」の欄をご参照ください。

簡略化した図のみを再掲します。

Google Cloud の API

例えば Google Cloud をコンソール画面から操作したときでも、その裏では Web API が呼ばれています。この Web API はインターネットに公開されていますが、誰でも API をコールできるわけではなく、認証・認可に Google アカウントや IAM が使われています。

一方で、以下のようなアクセスは Web API とは関係ありません。

  • VM への SSH アクセス
  • VM でホストされた Web サイトへの HTTP(S) アクセス

これらは VPC の機能により、接続元から VPC 内の各リソースに TCP/IP のレイヤでリーチしています。この違いが、前述の「VPC Service Controls でできること、できないこと」の差に関係しています。

構成例と仕様

想定構成図

以下の構成を例にとって、 VPC Service Controls でできることを説明していきます。

VPC Service Controlsの構成例

境界の定義

VPC Service Controls では 境界 (Perimiter) というものを定義することで、境界外からの API コールを拒否することができます。境界には 任意のプロジェクトの任意の Google サービス を入れることができます。

対象にできる Google サービスの一覧は、以下のドキュメントのとおりです。

組織レベルで新しい境界を作成する際、どのプロジェクトのどの Google サービスを境界に入れるかを選択します。例えば「対象プロジェクトは XXX プロジェクト」「対象サービスは BigQuery と Cloud Storage」のように設定できます。

このように設定すれば、XXX プロジェクトの BigQuery と Cloud Storage はお互いに API コールをすることができます。例として、BigQuery は Cloud Storage からデータをロードすることができます。

サービス間のAPIコール

一方でこの設定では、別のプロジェクトにある BigQuery からのアクセスは拒否されます。YYY プロジェクトの BigQuery からは XXX プロジェクトの Cloud Storage のオブジェクトをロードできません。境界の外から中への API コールだからです。

境界の外から中へ(中から外へ)のアクセス

前述の設定では、正規のユーザが自分のオフィスや自宅から BigQuery にアクセスしようとしても、アクセスは拒否されることになります。

ここで使用するのが 内向きポリシー(Ingress rules)です。内向きルールで定義した条件に合致した場合は、境界外からの API コールでも許可されます。

境界外からのアクセス

このときの許可条件を定義した設定を アクセスレベル といいます。アクセスレベルには例えば「特定の IP アドレスからのアクセスであれば許可」などと設定することができます。

内向きルールの設定画面

有償の BeyondCorp Enterprise ライセンスを購入すれば、デバイスにインストールされた MDM から収集される情報をもとにしたデバイスポリシーを条件とすることもできます。

逆に、境界内のサービスから外のサービスへの API コールをする必要がある場合は 外向きポリシー(Egress rules)を作成します。

さらに別の境界へのアクセスが必要な場合には 境界ブリッジ を作成します。

いずれも応用となるため、当記事では深くは扱わないでおきます。

VPC 内からのアクセス

VPC の VM 等から境界内サービスへの API コールも必要になる場合があります。

例えば、 VM インスタンス上のアプリから Cloud Storage へデータをアップロードする、などです。

VMからGoogle CloudサービスへのAPIコール

これは、以下の両方が満たされた場合に可能になります。

  • 境界内のプロジェクト に所属する VPC からの接続であること
  • VPC のアクセス可能なサービス (VPC accessible services) という設定値でサービスが許可されていること

VPC のアクセス可能なサービス (VPC accessible services) の設定は以下から選択することができます。

No 名称 意味
1 すべてのサービス 境界内か境界外かに関わらずすべてのサービスにアクセスできる。
2 サービスなし どの Google サービスにもアクセスできない。
3 すべての制限付きサービス 境界内のサービスにだけアクセスできる。
4 選択したサービス アクセス可能な境界内サービスを明示的に選択する。

VPCのアクセス可能なサービスの設定画面

例えば、境界の設定で XXX プロジェクトの Cloud Storage だけが選択されているとします。このとき、XXX プロジェクトの VPC 内の VM から Google サービスへの API コールの成否は以下のようになります。

設定値が "すべてのサービス" の場合

VM からは、境界内か境界外かに関わらずすべてのサービスにアクセスできます。

No 接続先サービス APIコール成否
1 Cloud Storage OK
2 BigQuery OK

設定値が "サービスなし" の場合

VM からは、境界に関係なくどの Google サービスにもアクセスできません。

No 接続先サービス APIコール成否
1 Cloud Storage NG
2 BigQuery NG

設定値が "すべての制限付きサービス" の場合

VM からは、境界内として指定したサービスにだけアクセスできます。

No 接続先サービス APIコール成否
1 Cloud Storage OK
2 BigQuery NG

設定値が "選択したサービス" の場合

明示的に選択したサービスへの API コールだけが成功します。

オンプレミスからのアクセス

前述の内向きルールで定義すれば、オンプレミスサイトから接続元 IP を固定したうえで、インターネット経由で境界内サービスへアクセスすることができます。

しかし VPC と オンプレミスサイトが VPN や Cloud Interconnect で接続している場合に、プライベートネットワークの経路でアクセスしたいときはどうすればいいでしょうか。

VPN や Cloud Interconnect 経由でVPC の 限定公開の Google アクセス の仮想 IP 経由でアクセスすれば、オンプレミスから境界内のサービスへプライベートアクセスすることができます。なお前述の VPC 内からのアクセスの条件も満たしている必要があります。

オンプレミスからGoogle CloudへのAPIコール

限定公開の Google アクセスとは、 VPC 内から Google の内部ネットワーク経由でかつ プライベート IP による接続で Google サービスの API へアクセスできる仕組みのことです。以下の記事で紹介していますので、ご参照ください。

blog.g-gen.co.jp

つまり、オンプレミスからは「境界内の VPC を経由してアクセスさせる」ことになります。

なおオンプレミスから限定公開の Google アクセス経由で API コールをする際に、クライアント側から利用する API エンドポイントとして restricted.googleapis.com を使わせることで VPC Service Controls の サポート対象外のサービスに対するアクセスを拒否することができます。

逆にこのドメイン名を使わないと VPC Service Controls サポート対象外のサービスへのアクセスが可能になってしまい、統制に漏れが出るおそれがあります。この仕様は、認定試験である Professional Cloud Network Engineer などでも頻出です。

ユースケース

これで VPC Service Controls の基本は押さえられたと思います。最後に VPC Service Controls のユースケースをいくつか列挙します。

  • Cloud Storage に工場の計測データを保存している。プロジェクトに境界を設定し、 社内の拠点の固定 IP からのみアクセスできるように内向きポリシーを設定 する
  • BigQuery に個人情報を含むアプリの利用者データを保存している。この BigQuery には VPC 内の VM にホストした BI ツール以外からアクセスされることはないため、 プロジェクトに境界を設定し、内向きポリシーは設定しない
  • 別のプロジェクトにある BigQuery に入っている機密データの一部をこちらのプロジェクトの BigQuery テーブルに持ってくる。アクセス要件が違うため、2つのプロジェクトで別々の境界を作成。 2つの境界を境界ブリッジで接続する

ドライラン構成

既に稼働中の環境に新しく VPC Service Controls を設定するときや、境界の設定に手を加えるときなどに、変更をいきなり適用すると予期せぬ不具合が発生するかもしれません。境界には通常の構成に加えて、ドライラン 構成を設定できます。

ドライラン構成への違反が発生すると、 Cloud Logging にログの記録のみが行われ、実際にはアクションは拒否されません。これは、WAF 製品のドライラン機能と似たイメージです。

ドライランを使って事前に影響範囲の確認をしておくことで、設定変更の影響を見極めてから実際の適用をすることができます。

ドライランモードで事前確認

以下の記事もご参照ください。

blog.g-gen.co.jp

杉村 勇馬 (記事一覧)

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

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