【问题标题】:S3 - Anonymous Upload - Key prefixS3 - 匿名上传 - 密钥前缀
【发布时间】:2012-08-08 14:42:01
【问题描述】:

我正在尝试准确了解如何设置通常是私有但允许匿名上传但有限制的存储桶。具体标准是:

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

我的问题是:

  1. 最好只创建两个存储桶。一份用于我传入的文件,一份用于我自己的个人处理和存储?
  2. 将文件上传到传入目录的代码是什么样的。理想情况下,我想避免依赖 S3 库,只使用 HTTP 调用。如果您可以在 Ruby 中向我展示正确的方向,则可以加分。 :)

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

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

【问题讨论】:

  • 对于2,你有没有考虑用carrierwave的回形针配置s3?
  • 感谢您的建议。是的,我以前使用过这些,尽管我认为它们通常都在经过身份验证的基础上运行(不是匿名的)。可能有一些附加组件可以匿名,但我真的只是希望,因为 S3 是一个 REST 接口,我允许匿名上传,一个没有任何第三方库的简单 HTTP 请求可以解决问题。但是,尝试解析 Amazon 文档比我希望的要麻烦得多,如果有人能指出我正确的方向,我会很高兴。
  • 不太明白。匿名是指您希望能够在不提供 s3 凭据的情况下上传文件吗?我认为这是不可能的。
  • 是的。我想设置权限,以便“每个人”都可以写入,但只能写入特定的前缀。我已经通过使用一些特殊隐藏字段的 HTML 表单帖子看到了在哪里可以做到这一点。但是我不知道如果我不是通过 HTML 表单来做,而是能够发出一个 HTTP 请求,是否有更简单的事情。

标签: amazon-s3 amazon-web-services http-post acl anonymous


【解决方案1】:

您所描述的可以在一个存储桶中实现。您可以通过存储桶策略允许匿名访问特定文件夹,检查examples 或使用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>​

here 详细描述了基于 S3 浏览器的上传。

【讨论】:

  • 我还没有检查这一切,看看它是否像我想要的那样工作,但赏金很快就会结束,我不希望你没有得到积分,如果你没问题的话。看起来不错,很快就会做一些测试。谢谢!
  • 请注意,匿名上传的对象归“anonymous”所有,这意味着:1) 授予它们匿名访问权限,2) 拥有存储桶的账户无权访问它们(因此 IAM 策略可能不适用)。分辨率aws.amazon.com/premiumsupport/knowledge-center/…
【解决方案2】:

我最近花了一些时间弄清楚匿名上传到 S3 的来龙去脉,也遇到了这个问题。我在以下位置详细介绍了适用于我的解决方案:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 2013-08-11
    • 2021-09-14
    • 1970-01-01
    相关资源
    最近更新 更多