繁体   English   中英

S3 - 匿名上传 - 密钥前缀

[英]S3 - Anonymous Upload - Key prefix

我试图准确理解如何设置一个通常是私有的存储桶,但允许匿名上传有限制。 具体标准是:

  • 存储桶主要是私有的,需要我的密钥/秘密来添加/删除/更新/列出文件。
  • 有一个名为“incoming”的“目录”(即密钥前缀),允许匿名用户上传内容但不上传。
  • 存储桶的所有内容都有一天到期。 作为奖励,我希望“传入”目录有30分钟到期,但如果不可能,整个存储桶的一天到期将会这样做。
  • 具有“传入”前缀的文件将限制每个对象的大小。
  • 我可能还希望将带有“incoming”前缀的对象限制为仅限于某些内容类型。

我的问题是:

  1. 简单地创建两个桶会更好吗? 一个用于我的传入文件,一个用于我自己的个人处理和存储?
  2. 对于要上传到传入目录的文件,代码看起来是什么样的。 理想情况下,我想避免依赖于S3库,只使用HTTP调用。 如果你能在Ruby上向我展示正确的方向,那就是奖励积分。 :)

到期时间似乎可以通过S3 Management Console设置,但最短到期时间限制为1天。 我可以在该字段中输入小数吗? 权限似乎适用于整个存储桶而不仅仅是前缀。 这让我觉得我只需要两个水桶。 如果我保留一个存储桶,我认为我需要创建一个IAM策略并将其应用到存储桶中,但这超出了我对S3的有限知识,我想确保我不会在允许人们做的权限中留下漏洞比我想要他们更多。

我已经找到很多关于通过HTTP表单帖子匿名上传到S3的文档。 我可以将其改编成代码,但我想知道,因为我在应用程序代码(而不是HTTP表单帖子)是否有更简单的方法?

您描述的内容可以在一个桶中实现。 您可以通过存储桶策略允许匿名访问特定文件夹,检查示例或使用AWS Policy Generator 在你的情况下,它可能看起来像这样:

{
    "Version": "2008-10-17",
    "Id": "Policy1346097257207",
    "Statement": [
        {
            "Sid": "Allow anonymous upload to /incoming",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::[your_bucket]/incoming/*"
        }
    ]
}

也可以使用简单的html表单匿名上传文件到您的存储桶:

<form action="http://[your_bucket].s3.amazonaws.com/" method="post" enctype="multipart/form-data">
    <input type="hidden" name="acl" value="public-read" />
    Name: <input type="text" name="key" value="incoming/[filename]" /><br/>
    File: <input type="file" name="file" /> <br />
    <input type="submit" name="submit" value="Upload" />
</form>​

这里详细描述基于S3浏览器的上传。

我最近花了一些时间来弄清楚匿名上传到S3的来龙去脉,并且也遇到了这个问题。 我在一段时间内写了一篇关于ME的解决方案:

https://gist.github.com/jareware/d7a817a08e9eae51a7ea

基本上你可以实现你想要的,除了经过验证的管理请求不起作用(或者至少我不知道解决方案)。

我知道这是一个较旧的问题,但只是在这里记录它,以防它帮助其他人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM