VPC Service Controls

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.comfirestorekeyvisualizer.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 旧版捆绑服务的流量。旧版捆绑服务包括:

导入和导出操作的出站流量保护

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 服务代理。

  1. 在 Google Cloud 控制台中,转到数据库页面。

    前往“数据库”

  2. 从数据库列表中选择所需的数据库。
  3. 在导航菜单中,点击导入/导出

  4. 查看以下面的账号运行导入/导出作业标签旁边的授权账号。

如果您的项目不使用 Firestore 服务代理,则您可以使用以下任一方法迁移到 Firestore 服务代理:

第一种方法是首选方法,因为它会将影响范围本地化到单个 Datastore 模式项目。第二种方法不是首选方法,因为它不会迁移现有 Cloud Storage 存储桶权限。但是,它能够在组织级层提供安全合规性。

检查和更新 Cloud Storage 存储桶权限以进行迁移

该迁移过程包含两个步骤:

  1. 更新 Cloud Storage 存储桶权限。如需了解详情,请参阅下一部分内容。
  2. 确认迁移到 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 服务代理。迁移完成后将无法撤消。

  1. 在 Google Cloud 控制台中,转到数据库页面。

    前往“数据库”

  2. 从数据库列表中选择所需的数据库。
  3. 在导航菜单中,点击导入/导出

  4. 如果您的项目尚未迁移到 Firestore 服务代理,您会看到一个描述迁移的横幅和一个检查存储桶状态按钮。下一步可帮助您识别并修复潜在的权限错误。

    点击检查存储桶状态

    此时系统将显示一个菜单,其中包含用于完成迁移的选项和 Cloud Storage 存储桶列表。该列表可能需要几分钟时间才能完成加载。

    此列表包括最近在导入和导出操作中使用的存储桶,但目前没有为 Datastore 模式服务代理授予读写权限。

  5. 记下您的项目的 Datastore 模式服务代理的主账号名称。服务代理名称显示在要向其授予访问权限的服务代理标签下方。
  6. 对于该列表中将用于未来导入或导出操作的任何存储桶,请完成以下步骤:

    1. 在相应存储桶的表行中,点击修复。此操作会在新的标签页中打开该存储桶的权限页面。

    2. 点击添加
    3. 新的主账号字段中,输入 Firestore 服务代理的名称。
    4. 选择角色字段中,选择服务代理 > Firestore Service Agent
    5. 点击保存
    6. 返回“Datastore 模式导入/导出”页面所在的标签页。
    7. 对该列表中的其他存储桶重复上述步骤。请务必查看该列表的所有页面。
  7. 点击迁移到 Firestore Service Agent。如果仍存在权限检查失败的存储桶,则您需要点击迁移来确认迁移。

    迁移完成时,您会收到提醒。迁移操作无法撤消。

查看迁移状态

如需验证项目的迁移状态,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到数据库页面。

    前往“数据库”

  2. 从数据库列表中选择所需的数据库。
  3. 在导航菜单中,点击导入/导出

  4. 以下面的账号运行导入/导出作业标签旁边寻找主账号。

    如果主账号是 service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com,则表示您的项目已迁移到 Firestore 服务代理。迁移操作无法撤消。

    如果项目尚未迁移,则该页面顶部会显示一条横幅和一个检查存储桶状态按钮。请参阅迁移到 Firestore 服务代理完成迁移。

添加组织范围的政策限制条件

  • 在您的组织的政策中设置以下限制条件:

    需要 Firestore 服务代理才能导入/导出 (firestore.requireP4SAforImportExport)。

    此限制条件要求导入和导出操作使用 Firestore 服务代理来授权请求。如需设置此限制条件,请参阅创建和管理组织政策

应用此组织政策限制条件不会自动为 Firestore 服务代理授予适当的 Cloud Storage 存储桶权限。

如果该限制条件对任何导入或导出工作流造成权限错误,您可以将其停用,改为使用默认服务账号。检查和更新 Cloud Storage 存储桶权限后,您可以再次启用该限制条件。