7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VPC Service Controlその1

Last updated at Posted at 2020-02-26

#はじめに
VPC Service Controlは、VPC外のGCPサービスに対してアクセス制限を提供出来る機能です。
AWSでいうところの「特定の VPC エンドポイントへのアクセスの制限」です。具体的に言うとConditionで"aws:sourceVpceに任意のVPC IDを指定するイメージです。
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/example-bucket-policies-vpc-endpoint.html

ちなみにAWSのVPCエンドポイントにあたるGCPの機能としては、VPC Private Accessがあります。

VPC Service Controlは、設定めっちゃ簡単なので直感的ななので個人的にお気に入りのサービスです。

#前提
前提として組織の使用が必要です。VPC Service Controlの「境界」は組織レベルで作成するためです。組織レベルで作成し、「境界」に任意のプロジェクトを追加していきます。

#出来ることのイメージ
手順としては、以下の流れになります。
VPC Service Controlの「境界」を作ります。
「境界」に含めるGCPプロジェクトを選択します。
「境界」に含まれたGCPプロジェクトのVPCからのみアクセス可能にするGCPサービスを選択します。
サポートしているGCPサービスはこちらです。
https://cloud.google.com/vpc-service-controls/docs/supported-products

image.png

上記の図の青色の線がVPC Service Controlの「境界」になります。こちらは例として2つのプロジェクトを追加しています。
また、VPC Service Controlでアクセス制御するサービスとしてGCSを指定しています。

この状態で2つのプロジェクトのVPCに作成されたGCEインスタンスからは、GCSにアクセスできます。経路①②

経路③は、Google Cloud Console(CloudShell含む)やLaptopのTerminalからgcloudコマンドを実行するようなイメージです。送信元がVPCではないのでエラーになります。

Google Cloud ConsoleでGCSのバケットを確認しようとすると以下のようなエラーになります。
image.png

また、Cloud Shellからgsutilコマンドでlsすると403エラーになります。

 atsum@cloudshell:~$ gcloud auth list
 Credentialed Accounts
ACTIVE  ACCOUNT
*       atsum@*******

To set the active account, run:
    $ gcloud config set account `ACCOUNT`

atsum@cloudshell:~ (app-prod-256209)$ gsutil ls
AccessDeniedException: 403 Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: 91b257b1160d2996

例外として、VPC外からアクセスを許可したい場合もあると思います。
以下の図の経路④のイメージです。

image.png

上記の例外設定は、上りポリシー: アクセスレベル(オプション)設定で可能です。
image.png

アクセスレベル自体は、Access Context Managerで行います。Access Context Managerで作成すると、VPC Service Controlから選択可能になります。

Access Context Managerの指定方法は、以下の3つになります。

  • 任意のネットワーク(ipSubnetworks)
  • 任意のデバイス(devicePolicy)
  • ユーザ、サービスアカウント(members)

ここでは、任意のユーザに対して例外設定します。ユーザ、サービスアカウントはGoogle Cloud Consoleで作成できないため、gcloudコマンドで作成します。

CONDITIONS.yamlにアクセス許可したいユーザを記載します。

$ cat CONDITIONS.yaml
- members:
    - user:atsum@***

policyが作成されていない場合は、以下を参考に作成します。
https://cloud.google.com/access-context-manager/docs/create-access-policy?hl=ja

アクセスレベルを作成します。

$ gcloud access-context-manager levels create vpc_service_control_user    --title vpc_service_control_user    --basic-level-spec CONDITIONS.yaml    --combine-function=OR    --policy=663588***
API [accesscontextmanager.googleapis.com] not enabled on project
[***]. Would you like to enable and retry (this will take a
few minutes)? (y/N)?  y

Enabling service [accesscontextmanager.googleapis.com] on project [***]...
Create request issued for: [vpc_service_control_user]
Waiting for operation [operations/accessPolicies/663588***/accessLevels/vpc_service_control_user/create/1582642710021853] to complete...done.
Created level [vpc_service_control_user].

この状態でアクセスするとgsutil lsが実行可能になっています。

$ gcloud auth list
 Credentialed Accounts
ACTIVE  ACCOUNT
*       atsum@***

To set the active account, run:
    $ gcloud config set account `ACCOUNT`

$ gsutil ls
gs://test-dafakslefgajlke/

#境界ブリッジ
1 つのプロジェクトに設定できるサービス境界は 1 つだけですが、別の境界にあるプロジェクトとの通信が必要になる場合もあります。この場合、境界ブリッジを作成すると、境界を越えてサービスとの通信やデータの共有を行うことができます。

境界ブリッジについては、VPC Service Controlその2で書きました。
https://qiita.com/atsumjp/items/cf9e552c83428904bc1e

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?