Google cloud storage 如何调试谷歌云存储的访问控制问题?

Google cloud storage 如何调试谷歌云存储的访问控制问题?,google-cloud-storage,google-cloud-platform,Google Cloud Storage,Google Cloud Platform,在学习如何将Google计算引擎与Google云存储结合使用时,我遇到了ACL的问题。从我自己的计算机,使用我自己的SSH凭据,我可以用我的bucket做任何我想做的事情。但是,当我使用基于web的SSH客户端登录到我的计算实例时,我只能从bucket中读取数据。将数据复制回bucket get时出现“AccessDeniedException:403权限不足”错误。(我正在用gsutil做所有这些复制实验。) 这对我来说毫无意义。唯一的服务帐户被授予了项目编辑器角色,我确认bucket ACL

在学习如何将Google计算引擎与Google云存储结合使用时,我遇到了ACL的问题。从我自己的计算机,使用我自己的SSH凭据,我可以用我的bucket做任何我想做的事情。但是,当我使用基于web的SSH客户端登录到我的计算实例时,我只能从bucket中读取数据。将数据复制回bucket get时出现“AccessDeniedException:403权限不足”错误。(我正在用gsutil做所有这些复制实验。)

这对我来说毫无意义。唯一的服务帐户被授予了项目编辑器角色,我确认bucket ACL列表允许所有者访问项目编辑器角色和服务帐户。我还尝试将服务帐户更改为具有“写入”权限,而不是bucket上的“所有者”,但这没有帮助。最后,当我在本地机器上执行所有这些操作时,我正在为同一个默认服务帐户使用下载的ssh密钥,所以我不明白为什么会发生变化

问题的一部分是我看不到橡胶在哪里与道路相交——我得到的只是一个没有更多信息的403。我看不到gsutil在做什么(事实上,我甚至不知道gsutil是如何获得其凭据的,因为当您通过控制台ssh登录时,这一切都是自动完成的——我只是假设它是在服务帐户下登录的)


显然,我很想解决这个眼前的问题,但我也很想知道如何调试这些问题,因为它们将来会出现。

我相信您遇到了一个非常常见的问题,但我可能错了,所以在解释之前,我将从顶部概述需要什么

默认情况下,计算引擎上的gsutil不使用您的个人用户凭据。相反,它将自动获取凭据以充当为该VM配置的服务帐户(通常是计算引擎默认服务帐户)

该服务帐户需要两件事才能写入地面军事系统:1)地面军事系统向该特定位置写入的权限,以及2)向地面军事系统写入的范围

听起来您已经将服务帐户设置为项目编辑器,甚至使其成为相关bucket的所有者,因此您已经处理了第1项。但是,默认情况下,GCE仅授予实例访问存储的只读作用域。这很可能就是为什么读对你有效,而写对你无效

解决这一问题有些烦人,因为无法在运行的实例上编辑作用域。因此,您需要创建一个新的GCE实例,在创建时,请确保显式指定一个范围。如果您正在使用UI,请选择“允许完全访问所有云API”,或选择“为每个API设置访问权限”,并确保选择“读写”或“完全”存储


谷歌的网站上有更好的操作说明:

谢谢布兰登。GCE实例上的作用域不正确是问题所在。我必须说,无论我重新阅读了多少文档,我都无法理解这种安全模型。我想让我感到困惑的是,通常安全性是(1)是否允许对(2)资源执行操作(3)标识。但该模型也有(4)个“范围”,类似于(1)和(3),不特定于任何给定资源,但通常适用于从GCE实例访问的任何资源。这是正确的思维模式吗?对。作用域背后的想法是,您可能希望授予应用程序以充当您的角色的权限,但不希望授予它们您的所有能力。想象一下,如果你想使用第三方GCS浏览器。您可能希望允许它以您的身份使用GCS,但这并不意味着您希望它启动GCE实例或阅读您的电子邮件。这只是限制和控制访问的另一种方法。我同意,有完全相同的问题,而且很难调试。