上り(内向き)ルールと下り(外向き)ルールを使用したデータ交換の保護

このドキュメントでは、安全なデータ交換の一般的なユースケースと、サービス境界で区切られたクライアントとリソース間のアクセスを許可するための構成例について説明します。

上り(内向き)ルールと下り(外向き)ルールの概要については、上り(内向き)ルールと下り(外向き)ルールをご覧ください。

上り(内向き)ポリシーと下り(外向き)ルールのポリシーを構成する方法については、上り(内向き)ポリシーと下り(外向き)ポリシーの構成をご覧ください。

安全なデータ交換のユースケースの構成例

このセクションでは、サービス境界間で安全にデータ交換するユースケースの例を示します。

境界外の Google Cloud リソースにアクセスする

次の図に、サービス境界外の Cloud Storage リソースにアクセスする必要がある境界内の Compute Engine リソースを示します。

1 つの境界からの下り(外向き)

次の境界を定義したとします。

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 を使用してデータを共有する

次の図は、Org1Org2 の 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

Sensitive1Sensitive2 が 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

ログ境界に書き込む必要のあるその他のセンシティブ データ境界に対して、同様の構成を指定できます。

次のステップ