VPC Service Controls 可让组织围绕 Google Cloud 资源定义边界,从而降低数据渗漏风险。借助 VPC Service Controls,您可以创建边界来保护明确指定的服务的资源和数据。
捆绑的 Firestore 服务
以下 API 在 VPC Service Controls 中捆绑在一起:
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 服务账号导入或导出数据, 建议您按照本部分中的说明进行迁移 到这里就结束了
- 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 存储桶权限后,您可以再次启用该限制条件。