s3预先分配的URL用于访问整个文件夹

den*_*ter 6 amazon-s3 amazon-web-services

我有一个s3存储桶,其中包含包含不同网站的单个文件夹.我想生成一个预先签名的URL来访问特定的文件夹,但是我想让url允许访问该文件夹中的所有对象.这可能吗?

我正在使用ruby aws-sdk gem v2.

我现有的代码看起来像这样

  def get_object_url(bucket_name, object_name)
    res = Aws::S3::Resource::new
    obj = res.bucket(bucket_name).object(object_name)
    exp = 1.day
    url = obj.presigned_url(:get, {
                           expires_in: exp,
                           virtual_host: true
                       })
    url
  end
Run Code Online (Sandbox Code Playgroud)

将文件夹名称作为object_name传递不起作用.

dat*_*age 10

不,S3并没有真正的文件夹概念.使用对象路径的片段"创建"文件夹.它们不是独立于对象而存在的.

  • 此外,V2和V4算法中的签名都取决于特定的对象密钥("路径"),对于任何给定的请求参数集,只能有一个有效的签名,这使得可能存在通配符(意味着不可能有多个潜在有效的签名,对象和"文件夹". (3认同)
  • 有什么消息吗?这个限制仍然存在吗?有什么解决方法? (2认同)
  • @ user3211074是的,此限制仍然存在。由于S3的设计,它不太可能改变。 (2认同)

Fab*_*tto 8

我最近遇到了这个问题,我可以找到一个使用 cloudfront 为签名 URL 定制策略的解决方案。

有一些优点和缺点,主要的是你不需要为每个对象签名,所以如果你需要共享许多对象,速度会更快。但它就像在 aws 流量之外一样。

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html


Jac*_*cob 5

我的解决方法是将文件和文件夹结构压缩到存档(如 zip)中,然后将单个对象(文件)上传到预先签名的 URL。