google-cloud-platform - 是否可以使 Cloud Storage 对象对通过应用程序进行身份验证的用户可见?
问题描述
就目前而言,我的 Web 应用程序允许最终用户使用在后端生成的签名 URL 将图像上传到 Google Cloud Storage。
我还想让这些对象在上传后对这些用户可见。我能想象的最简单的解决方案是允许使用类似allAuthenticatedUsers
但被筛选为仅适用于使用我的应用程序进行身份验证的用户进行读取访问。我还没有找到一种方法来做到这一点,但它似乎是一个非常明显的解决方案,必须是一个常见问题。如果不可能,我猜这是因为谷歌没有区分这个用户是如何通过身份验证的,只是他们是。
想到的替代解决方案是在用户第一次登录后为用户创建 IAM 成员帐户,并限制仅对这些帐户的访问,但我想采取阻力最小的路径。
解决方案
您可以查看此示例 python 签名的 url 实现。通过以下步骤:
- 使用要签名的资源路径构造规范请求。
- 创建上述请求的十六进制编码散列值。您可以使用 haslib。
- 构造要签名的字符串,其中包括以下元素:
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.
- 例如,使用带有 SHA-256 的 RSA 签名对要签名的字符串进行签名
- 使用以下连接构造签名 URL:
https://storage.googleapis.com/ + PATH_TO_RESOURCE + "?" + CANONICAL_QUERY_STRING + "&X-Goog-Signature=" + REQUEST_SIGNATURE
请检查这个python 实现示例。
推荐阅读
- java - ProcessBuilder 的输入流为空,具体取决于操作系统
- sql - SQL:每个程序的会话数
- html - 个性化的语音气泡
- c++ - 如何将`/lib`下的所有文件夹添加到Visual Studio 2019中的“其他库目录”
- javascript - 将构造函数推送到数组
- python - 为什么 datetime.strptime 将日期输出为序列化?
- javascript - 给定一棵二叉树,判断它是否高度平衡(深度差不小于 1)(leetcode 110)
- fortran - 这个使用 MPI-IO set_view 和 write_all 的示例有什么问题?
- ios - 如何为具有多个目标 iOS 的应用进行应用内购买?
- java - 无法在 k8s env 中使用 Fluentbit 多行解析器