このドキュメントでは、安全なデータ交換の一般的なユースケースと、サービス境界で区切られたクライアントとリソース間のアクセスを許可するための構成例について説明します。
上り(内向き)ルールと下り(外向き)ルールの概要については、上り(内向き)ルールと下り(外向き)ルールをご覧ください。
上り(内向き)ポリシーと下り(外向き)ルールのポリシーを構成する方法については、上り(内向き)ポリシーと下り(外向き)ポリシーの構成をご覧ください。
安全なデータ交換のユースケースの構成例
このセクションでは、サービス境界間で安全にデータ交換するユースケースの例を示します。
- 境界外の 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
ログ境界に書き込む必要のあるその他のセンシティブ データ境界に対して、同様の構成を指定できます。