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

安全数据交换入站/出站设置允许去往和来自被服务边界分隔的客户端和资源的访问。访问权限由入站和出站规则定义。

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

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

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

本部分包含安全数据交换用例的以下示例:

  1. 允许访问边界外的 Google Cloud 资源
  2. 在均使用 VPC Service Controls 的两个组织间通过 Pub/Sub 共享
  3. 受保护健康信息 (PHI)、匿名数据细分和合作伙伴组织
  4. 第三方 Compute Engine 磁盘映像
  5. 允许从边界外的 VPC 网络对 BigQuery 数据集进行专用访问
  6. 允许从边界外的 VPC 网络进行专用访问以加载到 Cloud Storage 存储分区(写入)
  7. 允许来自多个边界的项目在一个单独的边界中共享日志

允许访问边界外的 Google Cloud 资源

来自一个边界的出站流量

假设您已定义了如下边界,可以通过使用 gcloud 列出边界找到:

name: accessPolicies/222/servicePerimeters/Example
status:
  resources:
  - projects/111
  restrictedServices:
  - bigquery.googleapis.com
  - containerregistry.googleapis.com
title: Example

现在,您希望授予对项目 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

在均使用 VPC Service Controls 的两个组织间通过 Pub/Sub 共享

来自一个边界的出站流量和到另一个边界的出站流量

在此示例中,使用 VPC Service Controls 的两个组织(Org1 和 Org2)想通过 Pub/Sub 主题共享数据。

假设您已定义了如下边界,可以通过使用 gcloud 列出边界找到:

# 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 必须定义允许订阅的出站规则。

# 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 必须定义允许订阅的相应入站规则

# 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
""" > 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 细分操纵匿名数据细分中的数据。

假设您已定义了以下两个边界,可以通过使用 gcloud 列出边界找到:

# 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
""" > 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 磁盘映像。

假设您已定义了如下边界,可以通过使用 gcloud 列出边界找到:

name: accessPolicies/222/servicePerimeters/Example
status:
  resources:
  - projects/111
  - projects/222
  restrictedServices:
  - compute.googleapis.com
  - containerregistry.googleapis.com
title: Example

现在,您希望授予对项目 999(位于另一个组织中)中的磁盘映像的读取权限。您将定义以下出站规则:

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 数据集进行专用访问

到映像项目的出站流量

在此示例中,我们假设边界与示例 1 相同:

name: accessPolicies/222/servicePerimeters/Example
status:
  resources:
  - projects/111
  restrictedServices:
  - bigquery.googleapis.com
  - containerregistry.googleapis.com
title: Example

现在,您的目标是允许从各个合作伙伴的边界外的 VPC 网络进行访问,您可以通过定义入站规则来实现这一点:

echo """
- ingressFrom:
    identityType: ANY_IDENTITY
    sources:
    - resource: projects/888
    - resource: projects/999
  ingressTo:
    operations:
    - serviceName: bigquery.googleapis.com
      methodSelectors:
      - method: \"*\"

""" > partneringress.yaml

运行以下命令来应用入站规则:

gcloud beta access-context-manager perimeters update Example --set-ingress-policies=partneringress.yaml

允许从边界外的 VPC 网络进行专用访问以加载到 Cloud Storage 存储分区(写入)

在此示例中,我们假设边界与示例 1 相同:

name: accessPolicies/222/servicePerimeters/Example
status:
  resources:
  - projects/111
  restrictedServices:
  - storage.googleapis.com
  - containerregistry.googleapis.com
title: Example

现在,您的目标是允许从边界外的 VPC 网络进行访问,从而使合作伙伴能够将数据加载到边界内。您可以通过定义入站规则来实现这一目标:

echo """
- ingressFrom:
    identityType: ANY_IDENTITY
    sources:
    - resource: projects/222
  ingressTo:
    operations:
    - serviceName: storage.googleapis.com
      methodSelectors:
      - method: google.storage.objects.create
""" > partneringress.yaml

运行以下命令来应用入站规则:

gcloud beta access-context-manager perimeters update Example --set-ingress-policies=partneringress.yaml

允许来自多个边界的项目在一个单独的边界中共享日志

在此使用场景中,企业拥有一个共享项目,用于从整个 Google Cloud 部署中收集日志记录数据。他们希望能够将来自多个不同 VPC Service Controls 边界的数据记录到此共享日志项目中,此项目位于其自己的边界中。他们不希望日志项目能够访问除日志本身以外的任何资源。

假设您已定义了以下三个边界,可以通过使用 gcloud 列出边界找到:

# 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,应使用以下代码:

echo """
- egressTo:
    operations:
    - serviceName: logging.googleapis.com
      methodsSelectors:
      - method: LoggingServiceV2.WriteLogEntries
      - method: LoggingService.WriteLogEntries
    resources:
    - projects/999
  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

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