我们正在使用App Engine中的Google云端存储,需要对20.000+个对象应用一些ACL调整。我们想使用gsutil,因为它似乎是针对这样的用例。
不幸的是,由于任何奇怪的原因,App Engine使用服务帐户创建的对象不归该存储桶的任何其他所有者所有。因此gsutil失败了。
我们如何将gsutil作为服务帐户授权以使用其批量更改功能?
谷歌支持没有答案......这里有人吗?
这是一次令人沮丧的经历,我们认为将这部分转移到S3,其中应用程序不排除人类所有者。
答案 0 :(得分:6)
每当在存储桶中创建新对象时,创建它的帐户就是该对象的所有者。每个新对象还包含一个ACL,默认为"默认对象ACL"设置在桶上。默认情况下,这是"项目私有" ACL,这意味着作为项目所有者或编辑者的任何用户都应完全控制该对象,并能够使用自己的凭据更改ACL。
这里可能发生了一些事情。服务帐户在创建对象时,已明确指定每个对象的ACL,或者存储桶上的默认对象ACL设置已更改为project-private之外的其他设置。您是否已明确尝试将这些对象锁定为项目私有以外的内容?如果没有,请确保您已配置gsutil的用户帐户是您尝试编辑对象ACL的项目的所有者。你能从控制台(http://console.developers.google.com/storage)看到ACL是什么吗?
您不能在自己的桌面上充当appengine项目的服务帐户。幸运的是,您可以从GCE实例充当该服务帐户。解决此问题的一种方法是启动与此项目关联的小GCE实例。该GCE实例将安装一个gsutil,该gsutil将预先配置为充当服务帐户。您只需从GCE提示符中键入gsutil -m acl set -R project-private gs://my-bucket/
(或您想要进行的任何ACL更改),它就可以解决您的问题。
答案 1 :(得分:0)
gsutil可以作为服务帐户从桌面运行,因为版本3.26根据https://stackoverflow.com/a/15646928/3621331
使用" gsutil config -e"使用服务帐户凭据和密钥进行配置,可以在开发者控制台" API& AUTH" /"证书部分"。 我无法在Windows 7上运行,很可能是由于安装了pycrypto,但它在Ubuntu上运行得很好。