Auth gsutil作为服务帐户

Ral*_*alf 4 google-app-engine google-cloud-storage

我们正在使用App Engine中的Google云端存储,需要对20.000多个对象应用一些ACL调整.我们想使用gsutil,因为它似乎是为这样的用例而制作的.

不幸的是,出于任何奇怪的原因,App Engine使用服务帐户创建的对象不归桶的任何其他所有者所有.因此gsutil失败了.

我们如何将gsutil作为服务帐户使用其批量更改功能?

谷歌支持没有答案......有人在这里吗?

这是一次令人沮丧的经历,我们认为将这部分转移到S3,其中应用程序不排除人类所有者.

Bra*_*ugh 6

每当在存储桶中创建新对象时,创建它的帐户就是该对象的所有者.每个新对象还包含一个ACL,默认为存储桶上的"默认对象ACL"设置.默认情况下,这是"项目专用"ACL,这意味着作为项目所有者或编辑者的任何用户都应完全控制对象,并能够使用自己的凭据更改ACL.

这里可能发生了一些事情.服务帐户在创建对象时,已明确指定每个对象的ACL,或者存储桶上的默认对象ACL设置已更改为project-private之外的其他设置.您是否已明确尝试将这些对象锁定为项目私有以外的内容?如果没有,请确保您配置gsutil的用户帐户是您尝试编辑对象ACL的项目的所有者.你能从控制台看到ACL是什么(http://console.developers.google.com/storage)吗?

您不能从自己的桌面充当appengine项目的服务帐户.幸运的是,您可以从GCE实例充当该服务帐户.解决此问题的一种方法是启动与此项目关联的小GCE实例.该GCE实例将安装一个gsutil,该gsutil将预先配置为充当服务帐户.您只需gsutil -m acl set -R project-private gs://my-bucket/从GCE提示符(或您想要进行的任何ACL更改)中键入,它就可以解决您的问题.

  • 作为旁注,AppEngine创建的对象由服务帐户拥有,以避免开发人员加入或离开项目时出现问题.通过使服务帐户拥有对象,它们实际上由项目整体拥有,而不是任何一个从事该项目的人. (2认同)
  • 工作得很好,谢谢布兰登!我必须手动重新验证,但然后可以充当App Engine服务帐户. (2认同)