【问题标题】:Auth gsutil as service account将 gsutil 验证为服务帐户
【发布时间】:2014-05-21 20:33:55
【问题描述】:

我们正在使用 App Engine 中的 Google Cloud Storage,需要对 20.000 多个对象应用一些 ACL 调整。我们想使用 gsutil,因为它似乎是为这样的用例而设计的。

不幸的是,无论出于什么奇怪的原因,App Engine 使用服务帐户创建的对象都不属于存储桶的任何其他所有者。因此 gsutil 失败了。

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

Google 支持没有答案...这里有人吗?

这是一次非常令人沮丧的经历,我们考虑将这部分移到 S3 中,应用不排除人类所有者。

【问题讨论】:

    标签: google-app-engine google-cloud-storage


    【解决方案1】:

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

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

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

    【讨论】:

    • 附带说明,AppEngine 创建的对象归服务帐户所有,以避免开发人员加入或离开项目时出现问题。通过让服务帐户拥有对象,它们实际上由整个项目拥有,而不是任何参与项目的人。
    • 工作得非常好,谢谢布兰登!我必须手动重新进行身份验证,但随后可以充当 App Engine 服务帐户。
    【解决方案2】:

    根据https://stackoverflow.com/a/15646928/3621331,从版本 3.26 起,gsutil 也可以作为服务帐户从桌面运行

    使用“gsutil config -e”来配置它,使用可以在开发者控制台的“APIs & auth”/“Credentials section”中创建的服务帐户凭据和密钥。 我无法让它在 Windows 7 上运行,很可能是由于安装了 pycrypto,但它在 Ubuntu 上运行良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      • 2019-01-23
      • 1970-01-01
      • 2019-04-02
      相关资源
      最近更新 更多