如何区分 Google Cloud Storage 中的 WRITER 和 REMOVER?

How to distinguish between WRITER and REMOVER in Google Cloud Storage?

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

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

因为 Google Cloud Storage 仅允许定义对其存储桶和对象的 "READER"、"WRITER"、"OWNER" 权限。我需要授予服务帐户持有人对存储桶的 "WRITER" 权限。 ("Lets a user list, create, overwrite, and delete objects in a bucket".)
现在的问题是,访问令牌可能被某人滥用,可能会删除 GCS 中的所有照片。
如果GCS能区分"WRITER"、"delete permission".
就更好了 可以使用提供的 OAuth2.0 身份验证 [2],但它似乎只能与 GCS 中的 Google 帐户一起使用。
谁能给我建议如何解决我的问题?或者可以帮我找到另一种方法将照片上传到 GCS。
我在考虑为每个用户创建一个单独的存储桶的可能性,但后来我需要为每个用户创建一个服务帐户,我仍然没有找到任何可能如何以编程方式(如果可能的话)。
感谢您的帮助!

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

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

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