使用入站和出站规则实现安全数据交换

本文档介绍了安全数据交换的常见使用场景,以及允许服务边界分隔的客户端与资源之间访问的示例配置。

如需大致了解入站和出站规则,请参阅入站和出站规则

如需了解如何配置入站和出站规则政策,请参阅配置入站和出站政策

安全数据交换使用场景的配置示例

本部分包含有关如何跨服务边界安全地交换数据的示例用例。

访问边界外的 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 的两个组织之间使用 Pub/Sub 共享数据

下图展示了两个组织 Org1Org2,这些组织使用 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 数据集

下图显示了边界外的多个合作伙伴 VPC 网络,这些网络需要从边界内的 BigQuery 资源中读取数据:

到映像项目的出站流量

您可以假设使用与示例 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 使用 - permission: methodSelectors,而不是使用大多数服务使用的 - method: 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 边界的数据记录到其各自边界内的共享日志项目中。日志项目不应访问除日志以外的任何资源。

假设您已定义以下三个边界:

# 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 将日志写入日志边界,请在文件中定义以下出站流量规则,并将文件保存为 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

您可以为需要写入日志边界的任何其他敏感数据边界指定类似的配置。

后续步骤