BeyondCorpとVPC Service Controlsによる重要データ保護プロジェクトの作成

こんにちは、京セラコミュニケーションシステムの谷本(@kccs_tetsuya-tanimoto)です。

今までプロジェクトレベルより下のリソースしか触ったことが無かったのですが、たまたまGoogle Cloudの組織設定含めて上のほうのレイヤーから設定する機会があったので、いちばん印象に残ったリソース設定について備忘録ついでに残しておこうと思います(;´∀｀)

:::note info
一部コンテンツは、各サービスのID発行ならびに、有償コンテンツを含んでいます。
また、Google Cloudの機能を利用した場合は、利用料が発生します。
:::

## はじめに
BeyondCorpやらVPC Service Controlsやらを触ってみた感想ですが、「堀に囲まれた城やん」って感じでした。

BeyondCorpはゼロトラストを実現するための機能群、VPC Service Controlsは指定したプロジェクト内のGoogle CloudサービスAPIを保護するためのサービスです。

今回はBeyondCorpによってアクセス元を制限しつつ、更にVPC Service Controlsによって特定プロジェクト内のデータへのアクセスを制限するプロジェクト構成について記載します。

## ユースケース

* 重要データなど（個人情報とか）を含んだデータベース（BigQueryとかCloudSQL）や、データベースに格納されるデータに対するETL/ELT処理を実行するリソース（GCEとかGCS）を特定のメンバーにしか見せたくない！

* 重要な情報なので、社外からは絶対にアクセスさせたくない！

可能な限りデータへのアクセス元を制限し、かつ重要データには触れられるメンバーも制限したいみたいな場合を想定してます。


### 使用するサービス＆前提条件

#### 【前提条件】
* BeyondCorpもVPC Service Controlsも組織（Organization）に対して設定します。
* プロジェクトやVPCは作成済み、制御したいリソース設定も完了しているものとしてます。

#### 【ここで扱うサービス】
* Access Context Manager
* Googleグループ
* BeyondCorp Enterprise
* VPC Service Controls

### システム構成のイメージ
* BeyondCorpによって、許可されたアクセス元以外からのアクセスをブロック
* VPC Service Controlsによって、BeyondCorpで許可されたアクセス元の中でも、特別なユーザーのみアクセス可能なプロジェクトを設定

<img width="600" alt="0048-01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279548/cfb021a9-ac04-d1da-6602-6c5070e6f09a.png">

### 設定の流れ
1. Access Context Managerにて"アクセスレベル"を定義する
2. BeyoneCorp Enterpriseにて組織に対するアクセス制御を行う
3. VPC Service Controlsによる「境界(Perimeter)」を作成する
4. 境界の中に入れたいプロジェクトを選択する
5. 境界中のリソースに対するアクセスルールを設定する

各リソース設定の関連性としてはこんなイメージです。
<img width="600" alt="0048-03.png" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279548/d9717f6d-7489-9083-4ad5-748e762418b5.png>


#### Access Context Managerでアクセスレベルを定義

まず、Access Contect Managerでアクセスレベルを定義します。
このアクセスレベルはBeyondCorpでも使用しますし、VPC Service Controlsでも使用する大事な設定です。

<img width="300" alt="0048-02.png" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279548/98c3015f-042a-41c4-41a5-de0a28e641bf.png>


今回はアクセスレベルとして、IPアドレスでの制限をかけます。
①一般ユーザー用、②重要情報にアクセスできるユーザー用で2つのアクセスレベルを作成します。
二つのアクセスレベルを作成していますが、Members側にはAdminsのアクセス元も含んでいます。

<img width="500" alt="0048-02-2.png" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279548/e2f30b92-3061-e1d2-7681-2871b0f90a63.png>


#### Googleグループの作成
アクセスを許可したいユーザーを含んだGoogleグループを作成します。

<img width="500" alt="0048-08.png" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279548/7106a64a-d569-09ce-8a45-80e2676fc4e0.png>


Google Workspaceを利用している場合は、新規ユーザー登録時の対象グループ設定をしておくと、アカウント登録のたびに自動でグループに入れてくれるので運用が楽になります。

ここでは組織に対してアクセス可能なすべてのユーザーを含んだGoogleグループが設定されている前提で進めます。

#### BeyondCorpにて組織に対してアクセス制御を設定

設定自体はシンプルなのですが、なぜか組織を選択した状態でBeyondCorp Enterpriseのメニューをクリックすると悲しみのメッセージが出てきます（わたしだけ？）

<img width="600" alt="0048-04-1.png" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279548/26970929-7573-6c3d-31c6-bc073bf1e101.png>


適当なプロジェクトを選択すると、今度は組織を選択しろと。。

<img width="600" alt="0048-04-2.png" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279548/952aa5a8-156f-771a-a8eb-b2855a762d27.png>

改めて組織を選択するとやっと設定画面にたどり着けました。

<img width="400" alt="0048-04-3.png" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279548/2931a195-1b14-ac66-4144-2263beb58b97.png>


アクセス管理のルールを追加します。
Googleグループとアクセスレベルを選択します。

これによってアクセスレベルに定義されたIPアドレスからのアクセスと、Googleグループに登録されたメンバーからのアクセスが可能になります。

<img width="800" alt="0048-04-4.png" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279548/0bd52c11-5cc9-6271-e1d3-7139e203a6f7.png>


#### VPC Service Cotrolsで境界を作成する

組織に対するアクセスが制限されたところで、次は保護したいプロジェクトに対する制限を行います。

対象プロジェクトやアクセスレベルを設定し、境界(Perimeter)を作成します。
最初に設定する際は、”構成タイプ”をドライランにしておくとサービスへの影響確認がしやすくなります。

<img width="600" alt="0048-04-4.png" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279548/833204c5-c144-f71f-7820-753d9ef1a9ce.png>

Projectsで保護したいリソースを含むプロジェクトを選択し、Restricted Servicesで保護対象のGoogle Cloudリソースを選択します。

#### 内向きポリシーと外向きポリシー

境界へのアクセス制御は内向き/外向きポリシーを設定することで細やかな制御が可能になります。

今回はCloud Storageに対して、特別なユーザーからのアクセス許可を内向きポリシーとして設定します。

<img width="500" alt="0048-06.png" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279548/e962e849-11cf-3d0c-9fa7-511b3f8d1ecc.png>


#### 動作確認
試しに一般ユーザー用アクセスレベルのIPアドレスから境界の中にあるCloud Storageのバケットにアクセスをしてみましたが、何も表示されませんでした。ちゃんとコントロールされてそうです。

<img width="500" alt="0048-07-1.png" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279548/0a41cfc2-7568-9c28-dd3e-2a7171d2f2c7.png>


境界内へのアクセスを許可しているアクセスレベルからCloud Storageにアクセスした場合はちゃんと表示されます。

<img width="500" alt="0048-07-2.png" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279548/97d5254f-73d3-1e8a-e7c5-4c6877102e13.png>



## 終わりに
アクセス元の制限はどんなプロジェクトでも結構話題になることが多いと思います。Google Cloudのセキュリティ機能を活用するとかなり簡単に安全なシステム環境を整えることができるので、是非ご活用いただけたらと思います。

また、今回使用したBeyondCorp Enterpriseはお金出せばデバイス単位（MDM）での制限とかいろいろできることが増えます。

なんかのプロジェクトや弊社のセロトラスト施策とかでやる機会がないかなーってちょっと期待しつつ、新しい年を迎えたいと思います。