GCP を利用したセキュリティ要件対応 : VPC Service Controls を試してみた (その 1 : 概念の確認)
TLDR
オンプレミスとの混在環境や、すでにあるオンプレを前提としたセキュリティポリシー、あるいはコンプライアンスなどに対応する際には様々なセキュリティ要件が存在すると思います。
そのような対応に Google Cloud Platform (GCP) 上で利用できる機能の一つが VPC Service Controls (以下、VPC SC)です。VPC SC は 2019 年 1 月 21 日現在、GCP の組織 を利用していれば、誰でも利用することができます。VPC Service Controls を利用することで、以下のようなことが可能となっています。
- GCP のマネージドサービスである BigQuery や Google Cloud Storage (以下GCS) にアクセスできる GCP のプロジェクト、ソース IP 、などをIAMに加えて更に制限する
- BigQuery や GCS 上でのデータコピーや持ち出しを特定のプロジェクト内だけに制限する
- GCP のマネージド・サービスに対する API アクセスをオンプレミスかなどの環境から Cloud Interconnect を通じて行う
IAM に加え、これらの制限を用いることで、以下のようなメリットがあります。
- 認証情報が盗まれた際にも不正利用を防ぐ
- マルウェアに感染したクライアントや内部犯によるデータの持ち出しを防ぐ
- IAM ポリシーの設定ミスによるデータの公開を防ぐ
この第一回の記事では、まずはどのようなことができて、どのようなコンポーネントが存在するかを解説したいと思います。記事の題名は VPC Service Controls となっていますが、厳密には以下では 2 つのサービスを取り扱います。
ではさっそくそれぞれどのような概念とコンポーネントがあるのかを見ていきましょう。
VPC Service Controls のコンポーネント
VPC Service Controls は仮想的なセキュリティの境界線を用いて GCP に保管されたデータを厳重に守るためのサービスです。
仮想的な境界線です。 作成時にはGCP のプロジェクト、保護するGCPサービスを指定します。サービス境界線に含めることで、このプロジェクト内にある VPC やGCPのマネージドサービス(対応しているサービスの一覧はこちらで確認できます)が、VPC Service Controls により保護をされるようになり、同一境界線内部にあるリソースからしかアクセスができなくなります。
例えば、上記の図では機密情報が含まれる GCP プロジェクトを用意し、そこのデータを操作するための Compute Engine インスタンスや作業領域となる GCS を別のプロジェクトとして用意し、それらをサービス境界線にいれています。この場合、サービス境界線内のリソースからは保護したサービスを操作できますが、サービス境界線外のプロジェクトやインターネットからの操作は、 all deny となります。
また、API の呼び出し元を単に評価するだけではなく、 BigQuery からデータをエクスポートする際にエクスポート先の BigQuery データセットや GCS のバケットが所属するGCPプロジェクトも評価を行い、サービス境界線外であった場合にはきちんとエラーが返るようになっています。
ただし、GCP ではない環境から操作を行いたい、という場合もあるでしょう。(例: オフィスから接続しているラップトップ )その場合には、 Access Context Manager で作成した アクセスレベル をサービス境界線に加えることで、サービス境界線外(例:インターネット)からのアクセスを許可することができます。 Access Context Manager のドキュメントを参考に内容を見てみましょう。
Access Context Manager のコンポーネント
Access Context Manager は GCP のリソースへのアクセスを制御する際に利用できる IAM に加えて更に粒度の細かい制御を提供するサービスです。
Access Context Manager は Google の提唱する企業セキュリティモデルである BeyondCorp を実現するコンポーネントの一部で、 ゼロトラストネットワーク(どのネットワークも信用せずセキュアに社内情報にアクセスさせるモデル)を実現するための重要な要素です。Access Context Manager を利用することで、複雑なルールを指定したアクセス要件を簡単に設定することができます。
アクセスポリシー
アクセスポリシーは、組織全体で共有されるアクセスレベルの箱です。アクセスレベルなどのエンティティを格納するために利用されます。デフォルトで作成されるため、特に気にする必要はありませんが、複数のポリシーを作成することも可能です。
アクセスレベル
アクセスレベルは以下のようなアクセス元の要件を設定することが可能です。AND や OR などの条件を追加して複雑な要件を構成することもできます。
- デバイス、OS
- IPアドレス
- ユーザーや Service Account
例えば、アクセスレベルとして以下のようなシンプルなものを作成してみました。以下の例では、 simple_access_resctriction_source_ip
ではソースIPでアクセスを制限、simple_access_restriction_member
では Google アカウントでアクセスを制限する例を示しています。
Access Context Manager と VPC Service Control の関係
ここまでで紹介したアクセスレベルを、 VPC Service Controls や、 Cloud IAM Condition といった機能で利用することができます。(正確には、 VPC Service Controls は Access Context Manager の API を利用して、作られた機能というように紹介されています。)
Access Context Manager で作成したアクセスレベルを VPC Service Controls で利用することで、VPC Service Control のサービス境界線内以外でも、ソース IP を指定して BigQuery などのマネージド・サービスにアクセスを許可することができます。
例えば、以下の例では、 VPC Service Controls で作成したサービス境界に、上記で作成した simple_access_restriction_soure_ip
アクセスレベルを設定することで、サービス境界外であるインターネットの 203.0.113.100/32
からのアクセスを可能にしています。
ここまでの関係を図でまとめると、以下のようになります。
- アクセスポリシーはサービス境界線、 アクセスレベルなどを格納するための箱
- サービス境界線は保護するプロジェクトと保護するサービスを指定し、保護したものを default deny 、境界線内部は allow とする
- Access Context Manager でアクセスレベルを構成できる。ソース IP を始めとした様々な要件に対応可能
- サービス境界線にアクセスレベルを指定することで、そのアクセスレベルにマッチした境界線外からのアクセスを許可することができる
上記のような概念を抑えて、再度サービスを振り返ると、以下のようになります。
- Access Context Manager は高度なアクセスの要件(アクセスレベル)を設定できる。アクセス要件には ソース IP アドレス、 ユーザ認証情報などが利用できる。
- VPC Service Controls はサービス境界線を利用して BigQuery などの GCP のマネージド・サービスをサービス境界線外から保護できる。サービス境界線外からアクセスをする場合には、Access Context Manager で管理しているアクセスレベルをサービス境界線にアタッチすることで、IPアドレスを始めとした条件を評価して許可できる。 IAM に加えて評価をされるため、より強固にデータを保護することができる。
- VPC Service Control は単なる IP 制限だけでなく、GCP プロジェクト内でのデータのエクスポートやコピーといったユースケースまでをカバーするセキュリティのモデルを実現している。
第一回ということで、 VPC Service Control を中心とした GCP 上での高度なセキュリティの概念を掴んでみました。
次回はこの2つのサービスを利用して、サービス境界線内部のリソースからの BigQuery へのアクセスを試してみたいと思います。第二回へのリンクはこちら。
Disclaimer: この記事は個人的なものです。ここで述べられていることは私の個人的な意見に基づくものであり、私の雇用者には関係はありません。