本文档介绍了安全数据交换的常见使用场景,以及允许服务边界分隔的客户端与资源之间访问的示例配置。
如需大致了解入站和出站规则,请参阅入站和出站规则。
如需了解如何配置入站和出站规则政策,请参阅配置入站和出站政策。
安全数据交换使用场景的配置示例
本部分包含有关如何跨服务边界安全地交换数据的示例用例。
- 访问边界外的 Google Cloud 资源
- 在使用 VPC Service Controls 的两个组织之间使用 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 的两个组织之间使用 Pub/Sub 共享数据
下图展示了两个组织 Org1
和 Org2
,这些组织使用 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
如需允许 Sensitive1
和 Sensitive2
将日志写入日志边界,请在文件中定义以下出站流量规则,并将文件保存为 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
您可以为需要写入日志边界的任何其他敏感数据边界指定类似的配置。