VPC Service Controls 可让组织围绕 Google Cloud 资源定义边界,从而降低数据渗漏风险。借助 VPC Service Controls,您可以创建边界来保护明确指定的服务的资源和数据。
捆绑的 Firestore 服务
VPC Service Controls 中捆绑了以下 API:
firestore.googleapis.com
datastore.googleapis.com
firestorekeyvisualizer.googleapis.com
当您在边界内限制 firestore.googleapis.com
服务时,
边界还会限制datastore.googleapis.com
和
firestorekeyvisualizer.googleapis.com
项服务。
限制 datastore.googleapis.com
服务
datastore.googleapis.com
服务捆绑在
firestore.googleapis.com
服务。要限制
datastore.googleapis.com
服务,则必须限制 firestore.googleapis.com
服务
如下所示:
- 使用 Google Cloud 控制台创建服务边界时,请将 Firestore 添加为受限服务。
-
使用 Google Cloud CLI 创建服务边界时,请使用
firestore.googleapis.com
(原价)datastore.googleapis.com
。--perimeter-restricted-services=firestore.googleapis.com
适用于 Datastore 的 App Engine 旧版捆绑服务
适用于 Datastore 的 App Engine 旧版捆绑服务不支持服务边界。保护 Datastore 带有服务边界的服务阻止来自 App Engine 旧版捆绑服务。旧版捆绑服务包括:
- 带有 App Engine API 的 Java 8 Datastore
- 适用于 Datastore 的 Python 2 NDB 客户端库
- Go 1.11 Datastore 与 App Engine API
导入和导出操作的出站流量保护
Datastore 模式 Firestore 支持 VPC Service Controls,但需要额外的 配置,以便为导入和导出操作提供全面的出站流量保护。 您必须使用 Firestore 服务代理(而非默认的 App Engine 服务账号)来授权导入和导出操作。按照以下说明查看和配置用于导入和导出操作的授权账号。
Firestore 服务代理
Firestore 使用 Firestore 服务代理授权导入 和导出操作,而不是使用 App Engine 服务账号。 服务代理和服务账号使用以下命名惯例:
- Firestore 服务代理
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
Firestore 以前使用的是 App Engine 默认服务账号,而不是 Firestore 服务代理。如果您的数据库仍使用 App Engine 服务账号来导入或导出数据,我们建议您按照本部分中的说明迁移到使用 Firestore 服务代理。
- App Engine 服务账号
PROJECT_ID@appspot.gserviceaccount.com
最好使用 Firestore 服务代理,因为它专用于 Firestore。App Engine 服务账号由多项服务共享。
查看授权账号
您可以在 Google Cloud 控制台的导入/导出页面中,查看您的导入和导出操作使用哪个账号为请求授权。您还可以 查看您的数据库是否已经在使用 Firestore 服务代理。
-
在 Google Cloud 控制台中,转到数据库页面。
- 从数据库列表中选择所需的数据库。
-
在导航菜单中,点击导入/导出。
- 查看以下面的账号运行导入/导出作业标签旁边的授权账号。
如果您的项目不使用 Firestore 服务代理, 您可以使用以下任一服务迁移到 Firestore 服务代理: 这些技巧:
- 通过检查和更新 Cloud Storage 存储桶权限来迁移项目(推荐)。
- 添加组织范围的政策限制条件来影响组织内的所有项目。
第一种方法是首选方法,因为它会将影响范围本地化到单个 Datastore 模式项目。第二种方法不是首选方法,因为它不会迁移现有 Cloud Storage 存储桶权限。但是,它能够在组织级层提供安全合规性。
检查和更新 Cloud Storage 存储桶权限以进行迁移
该迁移过程包含两个步骤:
- 更新 Cloud Storage 存储桶权限。如需了解详情,请参阅下一部分内容。
- 确认迁移到 Firestore 服务代理。
服务代理存储桶权限
对于使用其他项目中的 Cloud Storage 存储桶的任何导出或导入操作,您必须向该存储桶授予 Firestore 服务代理权限。例如,将数据移至另一个项目的操作需要访问该项目中的存储桶。否则,这些操作会在迁移到 Firestore 服务代理后失败。
属于同一项目的导入和导出工作流不需要更改权限。默认情况下,Firestore 服务代理可以访问同一项目中的存储桶。
更新其他项目中的 Cloud Storage 存储桶的权限,以便向 service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
服务代理授予访问权限。为该服务代理授予 Firestore Service Agent
角色。
Firestore Service Agent
角色拥有 Cloud Storage 存储桶的读写权限。如果您需要授予只读或只写权限,请使用自定义角色。
下一部分中介绍的迁移过程可帮助您识别可能需要更新权限的 Cloud Storage 存储桶。
将项目迁移到 Firestore 服务代理
完成以下步骤以从 App Engine 服务账号迁移到 Firestore 服务代理。迁移完成后将无法撤消。
-
在 Google Cloud 控制台中,转到数据库页面。
- 从数据库列表中选择所需的数据库。
-
在导航菜单中,点击导入/导出。
-
如果您的项目尚未迁移到 Firestore 服务代理,您会看到一个描述迁移的横幅和一个检查存储桶状态按钮。下一步可帮助您识别并修复潜在的权限错误。
点击检查存储桶状态。
此时系统将显示一个菜单,其中包含用于完成迁移的选项和 Cloud Storage 存储桶列表。该列表可能需要几分钟时间才能完成加载。
此列表包括最近在导入和导出操作中使用的存储桶,但目前没有为 Datastore 模式服务代理授予读写权限。
- 记下您的项目的 Datastore 模式服务代理的主账号名称。服务代理名称显示在要向其授予访问权限的服务代理标签下方。
-
对于该列表中将用于未来导入或导出操作的任何存储桶,请完成以下步骤:
-
在相应存储桶的表行中,点击修复。此操作会在新的标签页中打开该存储桶的权限页面。
- 点击添加。
- 在新的主账号字段中,输入 Firestore 服务代理的名称。
- 在选择角色字段中,选择服务代理 > Firestore Service Agent。
- 点击保存。
- 返回“Datastore 模式导入/导出”页面所在的标签页。
- 对该列表中的其他存储桶重复上述步骤。请务必查看该列表的所有页面。
-
-
点击迁移到 Firestore Service Agent。如果仍存在权限检查失败的存储桶,则您需要点击迁移来确认迁移。
迁移完成时,您会收到提醒。迁移操作无法撤消。
查看迁移状态
如需验证项目的迁移状态,请执行以下操作:
-
在 Google Cloud 控制台中,转到数据库页面。
- 从数据库列表中选择所需的数据库。
-
在导航菜单中,点击导入/导出。
-
在以下面的账号运行导入/导出作业标签旁边寻找主账号。
如果主账号是
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
,则表示您的项目已迁移到 Firestore 服务代理。迁移操作无法撤消。如果项目尚未迁移,则该页面顶部会显示一条横幅和一个检查存储桶状态按钮。请参阅迁移到 Firestore 服务代理完成迁移。
添加组织范围的政策限制条件
-
在您的组织的政策中设置以下限制条件:
需要 Firestore 服务代理才能导入/导出 (
firestore.requireP4SAforImportExport
)。此限制条件要求导入和导出操作使用 Firestore 服务代理,用于向请求授权。 如需设置此限制条件,请参阅创建和管理组织政策。
应用此组织政策限制条件不会自动为 Firestore 服务代理授予适当的 Cloud Storage 存储桶权限。
如果该限制条件对任何导入或导出工作流造成权限错误,您可以将其停用,改为使用默认服务账号。检查和更新 Cloud Storage 存储桶权限后,您可以再次启用该限制条件。