gpt4 book ai didi

amazon-web-services - 整个存储桶的预签名 url

转载 作者:行者123 更新时间:2023-12-02 00:16:11 25 4
gpt4 key购买 nike

我正在使用 gsutil 创建用于上传的预签名 URL。命名桶中的对象时,我可以成功上传。来自 gsutil 的以下片段适用于 curl PUT:

gsutil signurl -m PUT -d 10m -r eu ~/.ssh/mycreds.json gs://cjreyn-bucket-0/myobjectname.txt

但是,当仅指定存储桶名称而不是其中的对象时,上传任意对象不起作用:

gsutil signurl -m PUT -d 10m -r eu ~/.ssh/mycreds.json gs://cjreyn-bucket-0/

这从 curl 返回以下内容:

<?xml version='1.0' encoding='UTF-8'?><Error><Code>BucketAlreadyOwnedByYou</Code><Message>Your previous request to create the named bucket succeeded and you already own it.</Message></Error>

我的 curl 行如下(为简洁起见,已签名的 URL 替换为):

curl -X PUT --upload-file myobj.txt "<mysignedurl>"

是否有可能创建签名 URL 来上传和下载到/从整个 存储桶,而不是为其中的每个对象?

最佳答案

不,这是不可能的。

一个签名的 URL 只授权一个特定的请求,这个请求被转换成它的 canonical form签字前。然后该服务组装相同的表示并计算签名应该是什么,此时对于给定动词(例如 PUT)的有效签名只有一个正确答案,资源( bucket + key),一组凭据,时间戳和到期时间。

签名实际上并不包括被授权的请求参数的副本——它们是在发出请求时从请求中推断出来的——因此没有机制将任何信息传递给可用于指定例如应该允许通配符路径。

为存储桶本身签署 PUT URL 会授权该 URL 的持有者发送请求以创建具有该名称的存储桶,正如您收到的错误所暗示的那样。

一个解决方案是创建一个 Web 服务来响应授权请求(无论这在您的环境中可能意味着什么,例如基于用户的 Web cookie),一旦请求中提供的参数有一个预签名的 URL Web 服务验证它们。请记住,如果这是一个需要写入存储桶的网站或应用程序,您永远不能相信这些东西只会发出合理/安全的请求,因为它们不在您的控制范围之内——因此参数验证至关重要以避免恶意行为。

另一个选项可能是 awscurl这是一个类似于 curl 的工具,可以自己进行请求签名。 GCS 具有 AWS 兼容模式,因此这可能意味着您可以按原样使用此工具,或者可以对其进行调整,或者 GCS 有类似的工具。但我假设您在其他地方需要签名 URL,而不是本地计算机,否则您将只使用 gsutil 来进行上传。

关于amazon-web-services - 整个存储桶的预签名 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56904750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com