【问题标题】:Google Cloud Storage - signed URLs for listing and downloading objects in a bucketGoogle Cloud Storage - 用于列出和下载存储桶中对象的签名 URL
【发布时间】:2021-07-17 14:13:21
【问题描述】:

我正在尝试提供未经身份验证的访问(有时限)以列出和下载 Google 存储桶中的对象,并发现签名 URL 可以解决问题。但是Signed URLs对单个对象有好处,他们在文档https://cloud.google.com/storage/docs/access-control/signed-urls#considerations中提到了

使用签名 URL 时,请记住以下几点:

签名 URL 只能用于通过以下方式访问 Cloud Storage 资源 XML API 端点。

通常可以为任何 XML API 请求创建签名 URL;然而, Node.js 云存储客户端库目前只能制作 单个对象的签名 URL。例如,它不能用于 制作用于列出存储桶中对象的签名 URL。

有没有办法,在 Node.js、Python、Java 或任何其他客户端库中,或者通过手动创建签名的 url,我可以与用户共享链接,以便他们可以浏览存储桶并下载所需的对象?

谢谢!

【问题讨论】:

    标签: firebase google-cloud-platform firebase-authentication google-cloud-storage


    【解决方案1】:

    简短的回答不是。

    但我可以解释原因。事实上,您必须了解签名 URL 为何如此出色和有用。

    我举个例子。您有一个 1Tb 的文件,请求者想要下载它。您有 2 个解决方案

    • 在服务器本地下载文件,然后让用户从服务器下载文件
    • 让用户直接从原位置(云存储)下载文件。

    在第一个解决方案中,用户已经在服务器上进行了身份验证,并且很容易让他们安全地下载文件。但是,在用户下载之前,您需要一个巨大的临时存储空间来临时存储文件

    在第二种解决方案中,没有存储问题(因此也可以与无服务器解决方案、Cloud Run、Cloud Function 和 App Engine 一起使用),但您需要委派下载文件的授权:这是签名 URL 的目的。


    现在,回到您的用例:您想要委派文件列表功能。为什么?因为你有存储问题?性能问题?还是为了方便?

    因为这个方案解决不了问题,所以没有实施。因此,您需要直接从您的服务器提供文件列表,然后使用签名 URL 委托下载,用户已经选择了他们想要的文件。


    编辑 1

    您需要有一个 Google 身份(用户帐户或服务帐户)才能获得 IAM 服务的授权才能访问您的存储桶信息。

    但是,如果您拥有非 Google 托管身份令牌,则可以使用一项新功能。你一个使用Workload Identity Pool

    思路如下:

    • 配置提供程序以从您拥有的身份令牌中提取正确的数据
    • 配置身份令牌声明和要模拟的服务帐户之间的映射
    • 模拟服务帐户,从中生成访问令牌,然后使用此令牌访问服务帐户上授予的所有 API。

    我觉得这个功能很少用,但它很好用,符合您的要求!

    【讨论】:

    • 感谢您的回答,这是有道理的,但根据文档,它在 Node.js 中不可用“Node.js 云存储客户端库目前只能为单个对象创建签名 URL。例如,它不能用于创建用于列出存储桶中对象的签名 URL。”,是这样吗?这个功能在 Python 中可用吗?
    • 不,该功能不支持任何语言。别找了!!
    • 再次感谢!我可以授予非 Google 管理帐户存储桶访问权限吗?或者我可以将 Firebase 用户添加到有权访问存储分区的用户列表中吗?
    • 我提出了一个新的谷歌云功能
    【解决方案2】:

    您不能为此使用签名 URL。您可以授予用户帐户对存储桶的实际权限,但使用conditional IAM policy 使其成为临时的,例如this example

    【讨论】:

    • 我可以授予非 Google 管理帐户存储桶访问权限吗?或者我可以将 Firebase 用户添加到有权访问存储分区的用户列表中吗?
    • 这个方法需要一个真实的谷歌账户。这包括服务帐户,因此您可以创建一个服务帐户,为其提供到期访问权限并让他们使用它的身份验证。但是,此方法无法很好地扩展,因为您无法创建无限的服务帐户。
    猜你喜欢
    • 1970-01-01
    • 2014-10-09
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    相关资源
    最近更新 更多