このドキュメントでは、安全なデータ交換の一般的なユースケースと、サービス境界で区切られたクライアントとリソース間のアクセスを許可するための構成例について説明します。
上り(内向き)ルールと下り(外向き)ルールの概要については、上り(内向き)ルールと下り(外向き)ルールをご覧ください。
上り(内向き)ポリシーと下り(外向き)ルールのポリシーを構成する方法については、上り(内向き)ポリシーと下り(外向き)ポリシーの構成をご覧ください。
安全なデータ交換のユースケースの構成例
このセクションでは、サービス境界間で安全にデータ交換するユースケースの例を示します。
- 境界外の Google Cloud リソースにアクセスする
- VPC Service Controls を使用する 2 つの組織間で Pub/Sub を使用してデータを共有する
- 匿名化された PHI データをパートナー組織と共有する
- サードパーティの Compute Engine ディスク イメージへのアクセスを許可する
- 境界外の VPC ネットワークからプライベート アクセスを許可して BigQuery データセットを読み取る
- 境界外の VPC ネットワークからプライベート アクセスを許可して Cloud Storage バケットに読み込む(書き込み)
- 複数の境界のプロジェクトでログを共有できるようにして、別々の境界でログを共有する
境界外の Google Cloud リソースにアクセスする
次の図に、サービス境界外の Cloud Storage リソースにアクセスする必要がある境界内の Compute Engine リソースを示します。

次の境界を定義したとします。
name: accessPolicies/222/servicePerimeters/Example status: resources: - projects/111 restrictedServices: - bigquery.googleapis.com - containerregistry.googleapis.com - storage.googleapis.com title: Example
別の組織内の project 999 にある Cloud Storage バケットへの読み取りアクセス権を付与する必要があります。この場合、ファイルに次のような下り(外向き)ルールを定義し、ファイルを gcs.yaml として保存します。
echo """
- egressTo:
operations:
- serviceName: storage.googleapis.com
methodSelectors:
- method: google.storage.objects.get
resources:
- projects/999
egressFrom:
identityType: ANY_IDENTITY
""" > gcs.yaml
次のコマンドを実行して、下り(外向き)ルールを適用します。
gcloud beta access-context-manager perimeters update Example --set-egress-policies=gcs.yaml
gcloud access-context-manager perimeters update コマンドの詳細については、gcloud access-context-manager perimeters update をご覧ください。
VPC Service Controls を使用する 2 つの組織間で Pub/Sub を使用してデータを共有する
次の図は、Org1 と Org2 の 2 つの組織を示しています。2 つの組織は VPC Service Controls を使用し、Pub/Sub トピックを使用してデータを共有しています。

次の境界を定義したとします。
# Org 1 Perimeter Definition name: accessPolicies/222/servicePerimeters/Example1 status: resources: - projects/111 restrictedServices: - pubsub.googleapis.com title: Example1
# Org 2 Perimeter Definition name: accessPolicies/333/servicePerimeters/Example2 status: resources: - projects/222 restrictedServices: - pubsub.googleapis.com title: Example2
データ交換を有効にするには、Org1 でサブスクリプションを許可する次の下り(外向き)ルールを定義して、ファイルを org1egress.yaml として保存する必要があります。
# Org1: Org1's perimeter must allow a Pub/Sub subscription to project 222.
echo """
- egressTo:
operations:
- serviceName: pubsub.googleapis.com
methodSelectors:
- method: Subscriber.CreateSubscription
resources:
- projects/222
egressFrom:
identityType: ANY_IDENTITY
""" > org1egress.yaml
Org2 は、これに対応する上り(内向き)ルールを定義してサブスクリプションを許可し、ファイルを org2ingress.yaml として保存する必要があります。
# Org 2: Org2's perimeter must allow a Pub/Sub subscription from network
project 111 in Org1.
echo """
- ingressFrom:
identityType: ANY_IDENTITY
sources:
- resource: projects/111
ingressTo:
operations:
- serviceName: pubsub.googleapis.com
methodSelectors:
- method: Subscriber.CreateSubscription
resources:
- \"*\"
""" > org2ingress.yaml
次のコマンドを実行して、上り(内向き)ルールと下り(外向き)ルールを適用します。
gcloud beta access-context-manager perimeters update Example2 1--set-egress-policies=org1egress.yaml
gcloud beta access-context-manager perimeters update Example1 1--set-ingress-policies=org2ingress.yaml
匿名化された PHI データをパートナー組織と共有する
次の図は、保護医療情報(PHI)データ セグメントの周囲の境界、匿名化データ セグメントの周囲のもう一つの境界、および別のパートナー組織を示しています。PHI セグメントによって匿名化されたデータ セグメントのデータの操作が可能になり、匿名化されたデータ セグメントのデータがパートナー組織と共有されます。

匿名化データをパートナー組織と共有できるように上り(内向き)ルールと下り(外向き)ルールを定義して、PHI セグメントで匿名化データ セグメント内のデータを操作できるようにします。
次の境界を定義したとします。
# PhiPerimeter
name: accessPolicies/222/servicePerimeters/PhiPerimeter
status:
resources:
- projects/111
restrictedServices:
- storage.googleapis.com
- bigquery.googleapis.com
vpcAccessibleServices:
enableRestriction: true
allowedServices:
- RESTRICTED_SERVICES
title: PhiPerimeter
# AnonPerimeter
name: accessPolicies/222/servicePerimeters/AnonPerimeter
status:
resources:
- projects/222
restrictedServices:
- storage.googleapis.com
vpcAccessibleServices:
enableRestriction: true
allowedServices:
- RESTRICTED_SERVICES
title: AnonPerimeter
パートナーの組織プロジェクトが 999 であると仮定することもできます。以下の上り(内向き)ルールと下り(外向き)ルールを定義できます。
# Anon Perimeter
echo """
- ingressFrom:
identityType: ANY_IDENTITY
sources:
- resource: projects/111
ingressTo:
operations:
- serviceName: storage.googleapis.com
methodSelectors:
- method: google.storage.Write
- method: google.storage.objects.create
resources:
- \"*\"
""" > anoningress.yaml
echo """
- egressTo:
operations:
- serviceName: storage.googleapis.com
methodSelectors:
- method: google.storage.Write
- method: google.storage.objects.create
resources:
- projects/999
egressFrom:
identityType: ANY_IDENTITY
""" > anonegress.yaml
# PHI Perimeter
echo """
- egressTo:
operations:
- serviceName: storage.googleapis.com
methodSelectors:
- method: \"*\"
resources:
- projects/222
egressFrom:
identityType: ANY_IDENTITY
""" > phiegress.yaml
次のコマンドを実行して、上り(内向き)ルールと下り(外向き)ルールを適用します。
gcloud beta access-context-manager perimeters update AnonPerimeter --set-ingress-policies=anoningress.yaml --set-egress-policies=anonegress.yaml
gcloud beta access-context-manager perimeters update PhiPerimeter --set-egress-policies=phiegress.yaml
サードパーティの Compute Engine ディスク イメージへのアクセスを許可する
次の図に、サービス境界外のサードパーティ イメージ プロジェクトの Compute Engine ディスク イメージにアクセスする必要がある境界内の Compute Engine リソースを示します。

次の境界を定義したとします。
name: accessPolicies/222/servicePerimeters/Example status: resources: - projects/111 - projects/222 restrictedServices: - compute.googleapis.com - containerregistry.googleapis.com title: Example
次に、別の組織の project 999 にあるディスク イメージへの読み取りアクセス権を付与する必要があります。この場合、ファイルに次のような下り(外向き)ルールを定義し、ファイルを compute.yaml として保存します。
echo """
- egressTo:
operations:
- serviceName: compute.googleapis.com
methodSelectors:
- method: InstancesService.Insert
resources:
- projects/999
egressFrom:
identityType: ANY_IDENTITY
""" > compute.yaml
次のコマンドを実行して、下り(外向き)ルールを適用します。
gcloud beta access-context-manager perimeters update Example --set-egress-policies=compute.yaml
境界外の VPC ネットワークからプライベート アクセスを許可して BigQuery データセットを読み取る
次の図は、境界内の BigQuery リソースからの読み取りを行う必要がある境界外の複数のパートナー VPC ネットワークを示しています。

例 1 と同じ境界を使用すると仮定できます。
name: accessPolicies/222/servicePerimeters/Example status: resources: - projects/111 restrictedServices: - bigquery.googleapis.com - containerregistry.googleapis.com title: Example
目標は、さまざまなパートナーの境界外の VPC ネットワークからの読み取りアクセスを許可することです。次の上り(内向き)ルールをファイルに定義し、ファイルを partneringress.yaml として保存します。
echo """
- ingressFrom:
identityType: ANY_IDENTITY
sources:
- resource: projects/888
- resource: projects/999
ingressTo:
operations:
- serviceName: bigquery.googleapis.com
methodSelectors:
- permission: bigquery.datasets.get
- permission: bigquery.tables.list
- permission: bigquery.tables.get
- permission: bigquery.tables.getData
- permission: bigquery.jobs.create
resources:
- \"*\"
""" > partneringress.yaml
次のコマンドを実行して、上り(内向き)ルールを適用します。
gcloud beta access-context-manager perimeters update Example --set-ingress-policies=partneringress.yaml
BigQuery では、柔軟性と制御性を高めるため、ほとんどのサービスで使用されている - method: methodSelectors ではなく - permission: methodSelectors を使用します。単一の BigQuery メソッド(RunQuery)は、複数の異なるリソースでさまざまな方法で動作できます。また、権限モデルに合わせて動作することで、柔軟性と制御性を向上させています。
境界外の VPC ネットワークからプライベート アクセスを許可して Cloud Storage バケットに読み込む(書き込み)
例 1 と同じ境界を使用すると想定できます。
name: accessPolicies/222/servicePerimeters/Example status: resources: - projects/111 restrictedServices: - storage.googleapis.com - containerregistry.googleapis.com title: Example
境界外の VPC ネットワークからアクセスを許可し、パートナーが境界内のバケットにデータを書き込みできるようにすることが目標です。上り(内向き)ルールを定義して、ファイルを partneringress.yaml として保存します。
echo """
- ingressFrom:
identityType: ANY_IDENTITY
sources:
- resource: projects/222
ingressTo:
operations:
- serviceName: storage.googleapis.com
methodSelectors:
- method: google.storage.objects.create
resources:
- \"*\"
""" > partneringress.yaml
次のコマンドを実行して、上り(内向き)ルールを適用します。
gcloud beta access-context-manager perimeters update Example --set-ingress-policies=partneringress.yaml
複数の境界のプロジェクトでログを共有できるようにして、別々の境界でログを共有する
このユースケースでは、企業が Google Cloud デプロイメント全体からログデータを収集する共有プロジェクトを持っているとします。ここでは、複数の異なる VPC Service Controls 境界のデータを、その企業の境界内にある共有ログ プロジェクトに記録できるようにする必要があります。ログ プロジェクトは、ログ以外のリソースにアクセスする必要はありません。
次の 3 つの境界を定義したとします。
# Sensitive 1
name: accessPolicies/222/servicePerimeters/Sensitive1
status:
resources:
- projects/111
restrictedServices:
- bigquery.googleapis.com
- containerregistry.googleapis.com
- logging.googleapis.com
vpcAccessibleServices:
enableRestriction: true
allowedServices:
- RESTRICTED_SERVICES
title: Sensitive Data 1
# Sensitive 2
name: accessPolicies/222/servicePerimeters/Sensitive2
status:
resources:
- projects/222
restrictedServices:
- bigquery.googleapis.com
- containerregistry.googleapis.com
- logging.googleapis.com
vpcAccessibleServices:
enableRestriction: true
allowedServices:
- RESTRICTED_SERVICES
title: Sensitive Data 2
#Logs
name: accessPolicies/222/servicePerimeters/Logs
status:
resources:
- projects/777
restrictedServices:
- logging.googleapis.com
vpcAccessibleServices:
enableRestriction: true
allowedServices:
- RESTRICTED_SERVICES
title: Logs Perimeter
Sensitive1 と Sensitive2 が Logs 境界にログを書き込むのを許可するには、ファイルに次の下り(外向き)ルールを定義し、ファイルを logsegress.yaml として保存します。
echo """
- egressTo:
operations:
- serviceName: logging.googleapis.com
methodSelectors:
- method: LoggingServiceV2.WriteLogEntries
- method: LoggingService.WriteLogEntries
resources:
- projects/777
egressFrom:
identityType: ANY_IDENTITY
""" > logsegress.yaml
次のコマンドを実行して、下り(外向き)ルールを適用します。
gcloud beta access-context-manager perimeters update Sensitive1 --set-egress-policies=logsegress.yaml
gcloud beta access-context-manager perimeters update Sensitive2 --set-egress-policies=logsegress.yaml
ログ境界に書き込む必要のあるその他のセンシティブ データ境界に対して、同様の構成を指定できます。