VPC Service Controlsって結局何を守れるの?分かりやすく解説します

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

G-genの杉村です。

初めて Google Cloud の設計を任されたあなたは、悩みが尽きないことでしょう。
特に セキュリティについては皆がピリピリ していて、事故は絶対に防ぎたい...

しかし Google Cloud 関連の書籍や Web サイトを見ていると、いろいろな言葉が出てきます。

VPC?
ファイアウォール?
限定公開の Google アクセス?
VPC Service Controls ?

本投稿では、 Google Cloud のセキュリティ系サービスの中でも特に重要な VPC Service Controls の概念について分かりやすく解説していこうと思います。

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

できること

できることはズバリ" Google Cloud サービスに対する API コールの接続元を制限する "ということです。
API コールとはそもそも何か?は次に説明します。

[ できることの例 ]

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

できないこと

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

[ できないことの例 ]

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

API コールとは?

さて、先ほど出てきた "API コール" とはなんでしょうか。

Amazon Web Services (AWS) を始め、多くのパブリッククラウドはインターネットに公開された Web API で操作されるようになっています。
Google Cloud も ほぼ全てのリソースは Web API で操作 (閲覧/作成/更新/削除) されています 。 例えば以下のような操作は全て Web API コールで行われています。

  • VM インスタンスの閲覧、作成、起動、停止...
  • Cloud Storage へのオブジェクトのList, Get, Put, Delete...
  • BigQuery へのクエリ、メタデータの閲覧、更新...

コンソール画面で操作していたとしても、 裏ではみなさんの Web ブラウザから 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 でできることを説明していきます。

f:id:ggen-sugimura:20211006202539p:plain
VPC Service Controlsの構成例

境界の定義

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

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

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

f:id:ggen-sugimura:20211008142536p:plain
サービス間のAPIコール

一方で、 別のプロジェクトにある BigQuery から のアクセスは弾かれます。
YYY プロジェクトの BigQuery からは XXX プロジェクトの Cloud Storage のオブジェクトをロードできません。
境界の外から中への API コールだからですね (もちろん、逆もしかりです) 。

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

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

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

f:id:ggen-sugimura:20211008141852p:plain
境界外からのアクセス

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

f:id:ggen-sugimura:20211006222953p:plain
内向きルールの設定画面

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

逆に、境界内のサービスから外のサービスへの API コールをする必要がある場合は 外向きポリシー (Egress rules) を作成します。
さらに別の境界へのアクセスが必要な場合には 境界ブリッジ を作成します。
いずれも本投稿では深くは扱わないでおきます。

VPC 内からのアクセス

VPC の VM 等から境界内サービスへの API コールも必要になるでしょう。
例えば、 VM インスタンス上のアプリから Cloud Storage へデータをアップロードする、などです。

f:id:ggen-sugimura:20211008141224p:plain
VMからGoogle CloudサービスへのAPIコール

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

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

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

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

f:id:ggen-sugimura:20211006223519p:plain
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 コールだけが成功します。

オンプレミスからのプライベートNW経由でのアクセス

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

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

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

f:id:ggen-sugimura:20211008141556p:plain
オンプレミスからGoogle CloudへのAPIコール

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

cloud.google.com

あくまで境界内の VPC を経由してアクセスさせる、ということですね。

ユースケース

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

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

ドライラン構成

既に稼働中の環境に新しく VPC Service Controls を設定するときや、境界の設定に手を加えるときなどに、いきなり設定変更を適用すると予期せぬ不具合が発生しえます。
境界には現行構成に加えて、ドライラン構成を設定できます。
ドライランで設定された境界に違反すると、 Cloud Logging にログ記録のみがされます。
WAF 製品などにも同じような機能がありますね。

これを事前に設定しておくことで、設定変更やどんな影響を与えるのかを見極めてから実適用をすることができます。

f:id:ggen-sugimura:20211011101537p:plain
ドライランモードで事前確認

このように、本番環境での運用も意識しながら VPC Service Controls を使いこなしていきましょう。

杉村 勇馬 (記事一覧)

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

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

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