传输 Cloud Storage 托管文件夹

Cloud Storage 托管文件夹可对 Cloud Storage 存储分区中的对象提供精细的访问权限控制。您可以在使用通用存储桶级访问权限的存储桶中在文件夹级设置权限。使用 Storage Transfer Service 在 Cloud Storage 存储分区之间转移对象时,可以保留这些受管理的文件夹权限。

限制

对受管文件夹的传输存在以下限制:

  • 目标存储桶必须使用统一存储桶级访问权限
  • 受管理的文件夹传输不支持 deleteObjectsUniqueInSinkdeleteObjectsFromSourceAfterTransfer 选项。
  • 目标存储桶或其项目中不得存在使用存储桶资源类型 (storage.googleapis.com/Bucket) 或对象资源类型 (storage.googleapis.com/Object) 的 IAM 条件。如果项目中的任何存储桶存在使用这两种资源类型的 IAM 条件,则无法将受管文件夹转移到该项目中的任何存储桶,即使该条件稍后被移除也是如此。
  • 不支持事件驱动型转移。
  • 不支持清单传输。

IAM 权限

Google 代管式服务账号需要具有以下 Google Cloud Identity and Access Management (IAM) 权限。

对于源和目标,您可以在存储桶一级设置权限,也可以在受管文件夹上设置权限。如需为目标托管文件夹设置权限,该文件夹必须已存在。

我们不建议在项目一级设置受管文件夹权限;如需了解详情,请参阅安全注意事项

在源存储桶或托管文件夹中:

  • storage.managedFolders.getIamPolicy
  • storage.managedFolders.list
  • storage.managedFolders.get

在目标存储桶或托管文件夹中:

  • storage.managedFolders.setIamPolicy
  • storage.managedFolders.list
  • storage.managedFolders.create

除了 Storage Transfer Service 所需的标准权限之外,您还需要具备以下权限:

如需授予所需的托管文件夹权限,请创建自定义角色,并仅在其中包含所需权限。

创建托管文件夹传输

如需创建包含托管文件夹的传输,请在 transferSpec 中指定 managedFolderTransferEnabled: true。您可以选择指定 path 值,以便仅转移特定的受管文件夹。

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  "name": "transferjobs/NAME",
  "projectId": "PROJECT_ID",
  "transferSpec": {
    "gcsDataSource": {
      "bucketName": "SOURCE_BUCKET",
      "path": "SOURCE_PATH",
      "managedFolderTransferEnabled": true
    },
    "gcsDataSink": {
      "bucketName": "DESTINATION_BUCKET",
      "path": "DESTINATION_PATH",
    }
  },
  "status": "ENABLED"
}

如果未在源和目标位置设置正确的受管理转移权限,则转移将失败。

如需详细了解如何使用 REST API 创建转移作业,请参阅创建转移作业,或参阅 transferJobs.create 参考文档

安全注意事项

向 Google 代管式服务账号授予受管文件夹权限后,该账号便可以修改目标文件夹的 IAM 政策,如果是在项目级授予角色,则还可以修改所有文件夹的 IAM 政策。这会带来安全风险:具有作业修改权限的用户可能会利用此漏洞向恶意行为者授予特权。为降低此风险,请考虑在专用 Google Cloud 项目中隔离受管理的文件夹传输。

Cloud Logging

Cloud Logging 会记录受管理文件夹操作。如需了解详情,请参阅适用于 Storage Transfer Service 的 Cloud Logging

问题排查

如需获得创建和管理托管文件夹方面的帮助,请参阅问题排查页面。