传输 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 政策。这会带来安全风险:拥有作业修改权限的用户可能会利用此漏洞向恶意行为者授予权限。为降低此风险,请考虑在专用 Google Cloud 项目中隔离受管理的文件夹转移。

Cloud Logging

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

问题排查

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