S3线轴桶/匿名PUT

时间:2013-01-10 16:35:15

标签: file-upload amazon-s3 cors spool

我想使用S3 CORS和密钥过期来创建'假脱机桶'。此假脱机桶应支持以下内容:

  • 前端代码(比方说,jQuery)应该能够HTTP PUT任意命名的存储桶密钥
  • 后端代码(比方说,Python / boto)应该能够读取和删除这些密钥,给定一个密钥名称
  • 密钥应在X天后自行过期

究竟应该如何实现?

1 个答案:

答案 0 :(得分:5)

经过一番捣蛋,这就是我发现的:

  • 创建一个存储桶
  • 授予所有人权限上传/删除编辑权限(使用API​​应该很容易,使用控制台我的情况更容易)
  • 设置以下(或类似)CORS政策:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*.example.com</AllowedOrigin>
        <AllowedMethod>PUT</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>
  • 设置一个对象lifecycle政策以符合您的意愿(再次,使用API​​很容易,在我的情况下更容易使用控制台)
  • 执行PUT时,添加标题x-amz-acl: bucket-owner-full-control。例如,在CoffeeScript和jQuery中,您的PUT将如下所示:
$.ajax http://my_spool_bucket.s3.amazonaws.com,
    type: "PUT"
    data: "contents of new object"
    headers:
        "x-amz-acl": "bucket-owner-full-control"

就是这样。享受高可用性,自我解析,CORS兼容,便宜且简单的HTTP假脱机空间的荣耀。需要记住的一件重要事情是:任何客户都可以覆盖任何密钥;你应该相应地设计(我使用加密安全生成的密钥)。