【问题标题】:How to distinguish between WRITER and REMOVER in Google Cloud Storage?如何区分谷歌云存储中的 WRITER 和 REMOVER?
【发布时间】:2015-11-29 18:34:33
【问题描述】:

我正在使用 Google Cloud Storage 来保存我的应用用户上传的照片。我正在使用服务帐户对 GCS 的请求 [1] 进行身份验证。如果用户想要将照片上传到 GCS 的存储桶,则执行以下步骤。

  1. Android 客户端向我的服务器发送请求,为他提供 GCS 的访问令牌。
  2. 服务器从服务账户获取访问令牌(我使用的是PK12密钥)。
  3. 服务器将访问令牌发送回 Android 客户端。
  4. Android 客户端使用访问令牌对 GCS 端点进行身份验证,并将照片上传到 GCS 的存储桶。
  5. 照片的元数据保存在我的数据库中。

由于 Google Cloud Storage 只允许为其存储桶和对象定义“READER”、“WRITER”、“OWNER”权限。我需要向服务帐户持有人授予对存储桶的“WRITER”权限。 (“让用户列出、创建、覆盖和删除存储桶中的对象”。)
现在的问题是,访问令牌可能被某人滥用,可能会删除 GCS 中的所有照片。
如果 GCS 能区分“WRITER”、“删除权限”会更好。
可以使用提供的 OAuth2.0 身份验证[2],但它似乎只能与 GCS 中的 Google 帐户一起使用。
谁能给我一个建议如何解决我的问题?或者也许可以帮助我找到另一种将照片上传到 GCS 的方法。
我正在考虑为每个用户创建一个单独的存储桶的可能性,但是我需要为每个用户创建一个服务帐户,但我仍然没有找到任何可能性如何以编程方式执行此操作(如果可能的话)。
感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

    您正在寻找“签名网址”。正如您所指出的,分发身份验证令牌会赋予客户端充当服务帐户的完全权限(减去适当的范围)。

    相反,您应该使用签名 URL。本质上,您为要允许的一个非常具体的操作制作一个 URL,然后使用您的密钥对该请求进行签名,然后将该请求的 URL 交给用户。它将允许客户只做一件特定的事情。

    https://cloud.google.com/storage/docs/access-control?hl=en#Signed-URLs

    【讨论】:

    • 感谢您的回答,这正是我所需要的。我还有一个问题:是否可以在一个请求中将更多对象上传到 GCS,这样如果用户想一次上传更多照片,我就不需要向我的服务器询问每张照片的新签名 URL 吗?
    • 对不起,不。不过,您可以一次向服务器询问一堆 URL。您可以指定它们的有效期。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 2014-08-29
    • 2017-09-05
    相关资源
    最近更新 更多