无法读取源对象 ACL。源存储桶不得启用 storage.uniformBucketLevelAccess,且服务帐号必须具有 storage.ob

无法读取源对象 ACL。源存储桶不得启用 storage.uniformBucketLevelAccess,且服务帐号必须具有 storage.ob

尝试在 GCP 浏览器 UI 中通过数据传输服务手动测试为 GCS 存储桶创建精确备份并出现错误...

无法读取源对象 ACL。源存储桶不得启用 storage.uniformBucketLevelAccess,且服务帐号必须在源对象上具有 storage.objects.getIAMPolicy。

但是,我的源存储桶没有统一的访问控制,而我确实拥有storage.objects.getIAMPolicy该项目的权限。我对 GCP 不是很熟悉,所以我不知道这里还可能出现什么问题。

有人对这里可能出现的问题有什么想法或尝试任何调试方法吗?

我的 DTS 作业配置如下在此处输入图片描述

我的源存储桶配置如下... 在此处输入图片描述

我的目标存储桶配置如下... 在此处输入图片描述

我的用户 IAM 权限如下... 在此处输入图片描述 (我不知道为什么没有为我的存储对象管理员角色添加“额外权限”(我认为这与),但当storage.objects.getIamPolicy我设置该角色时,它确实是权限差异列表的一部分。)

尝试查看此处的文档(https://cloud.google.com/storage-transfer/docs/source-cloud-storage#user_permissions),但我不知道这些文档是否准确/最新。

如果您使用 Google Cloud 控制台创建转移,并且拥有“用户权限”中列出的权限。

查看用户权限部分...

存储旧式存储桶所有者角色 (roles/storage.legacyBucketOwner) 或存储管理员角色 (roles/storage.admin) 提供所需的权限。

我的个人用户已经具有存储管理员角色(当我尝试编辑我的用户权限时,存储旧版存储桶角色似乎不存在) - 有一个存储传输管理员角色,但策略更改模拟器显示这不会添加任何新权限。

按照此处的说明授予服务代理所需的权限,以识别 DTS 服务代理主体电子邮件 (https://cloud.google.com/storage-transfer/docs/source-cloud-storage#find),我继续操作,发现服务代理主体已添加到具有存储Legacy Bucket ReaderStorage Object Viewer角色的 DTS 源存储桶中。因此,不幸的是,自动授予似乎没有问题,但 DTS 作业不起作用。

(并且,除了我创建它的记录操作之外,日志资源管理器中没有关于该存储桶或 GCS 的任何内容 - 也就是说,好像它甚至没有记录我手动触发的失败的 DTS 作业运行)。

有人对这里可能出现的问题有什么想法或尝试任何调试方法吗?

答案1

开始工作了。

Google 广泛使用服务代理:https://cloud.google.com/iam/docs/service-agents

我被告知自动授权创建可能出了问题:https://cloud.google.com/storage-transfer/docs/source-cloud-storage#auto-granting_permissions_in_the

以下是我配置一切以使 DTS 工作正常进行的方法:

STS 代理的源存储桶权限配置(我按照说明识别了其完整电子邮件/姓名这里): 在此处输入图片描述 (关于向存储桶授予 STS 代理哪些权限的具体说明并不明确,但我选择了对被视为“源”存储桶的存储桶有意义的权限,并且似乎有效)。

STS 服务代理的目标存储桶权限配置: 在此处输入图片描述 (关于向 STS 服务代理授予存储桶哪些权限的具体说明并不明确,但我选择了对被视为“目标”存储桶有意义的权限,并且似乎有效)。编辑*:目标存储桶的第一个权限实际上应该是,但由于我拥有的权限(我稍后会解释),Storage Legacy Bucket Writer因此在这个基本解决方案中这并不重要。Storage Object Admin

请注意,storage.objects.getIAMPolicy权限是由Storage Object Admin角色授予的;我也可以创建一个仅包含此特定权限的自定义角色,而不是为 STS 代理提供更广泛的预先存在的角色,但我不知道这有什么大不了的(不过,为了尽量减少不必要的访问,也许我仍然应该这样做(因为拥有管理员角色实际上使得其他角色变得多余,正如策略测试变更模拟所证实的那样))

尽管说明中未指定,但此角色是必需的这里因为我猜它假设您正在使用统一 ACL 策略,但是我正在测试的源存储桶(就像我实际想要从中执行 DTS 的存储桶一样)使用细粒度 ACL,这就是为什么我认为storage.objects.getIAMPolicy需要 perm 才能运行 STS 而不会出现错误。

请注意,这也意味着当您对目标存储桶执行 DTS 时,您还必须将 ACL 设置也设置为细粒度。

相关内容