通过应用程序验证的用户是否可以使Cloud Storage对象可见?

时间:2019-09-17 17:32:54

标签: google-cloud-platform google-cloud-storage google-iam

按现状,我的Web应用程序允许最终用户使用在后端生成的签名URL将图像上传到Google Cloud Storage。

我还想使这些用户在上传后对这些用户可见。我能想到的最简单的解决方案是允许使用allAuthenticatedUsers之类的内容进行读取访问,但是只适用于已使用我的应用程序进行身份验证的用户。我还没有找到一种方法来执行此操作,但是对于必须解决的常见问题而言,这似乎是一个非常明显的解决方案。如果不可能的话,我想这是因为Google对该用户进行身份验证的方式并没有区别。

想到的另一种解决方案是,在用户首次登录后为他们创建IAM成员帐户,并限制仅对那些帐户的访问,但是我想采取阻力最小的方法。

2 个答案:

答案 0 :(得分:1)

如果您使用的是App Engine,则可以使用App Engine App Identity服务。这样,您的用户将可以使用App Engine服务帐户凭据访问数据。可以在here中找到有关配置此设置的更多信息。

如果您不是这种情况,创建IAM服务帐户将是我所看到的唯一选择。您可以使用Identity and Access Management (IAM) API以编程方式进行操作。您也可以创建Google group并将仅受邀请的用户添加到组中。然后,您可以给组成员角色:storage.objectViewer。

答案 1 :(得分:1)

您可以选中此example python signed url implementation。执行以下步骤:

  1. 使用要签名的资源的路径构造canonical request
  2. 创建上述请求的十六进制编码哈希值。 You can use haslib
  3. 构造要签名的字符串,包括以下要素:
SIGNING_ALGORITHM: This should be GOOG4-RSA-SHA256.
CURRENT_DATETIME: The current date and time, in the ISO 8601 basic format YYYYMMDD'T'HHMMSS'Z'.
CREDENTIAL SCOPE: The credential scope of the request for signing the string-to-sign.
HASHED_CANONICAL_REQUEST: The hex-encoded, SHA-256 hash of the canonical request, which you created in the previous step.
  1. 使用带有SHA-256,for example
  2. 的RSA签名对要签名的字符串进行签名
  3. 使用以下串联来构造已签名的URL:
https://storage.googleapis.com/ + PATH_TO_RESOURCE + "?" + CANONICAL_QUERY_STRING + "&X-Goog-Signature=" + REQUEST_SIGNATURE

请检查此python sample of implementation