我有一个用户的以下IAM策略 { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1395161912000", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:PutObject", "s3:*" ], "Resource": [ "arn:aws:s3:::bucketname" ] }, { "Sid": "list", "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets" ], "Resource": [ "arn:aws:s3:::*" ] } ] } 目标是让用户将file upload到存储桶,但不能覆盖或删除。 这是为了备份。 我开始与ListBucket和PutObject ,但添加*因为它不工作。 甚至没有*让用户上传文件,只是得到Access Denied 。 当我尝试模拟器,它会返回Denied – Implicitly denied (no matching statements found). 为ListBucket […]
目前,我运行两个网站,每个网站都拥有自己的大型服务器。 目前,这两个网站都有大约300GB的图片。 它的增长速度是每月15GB的图像。 我知道最终,一个大的服务器不能适应所有的事情。 所以,我决定将所有图像移动到对象存储。 唯一的问题是数据传输价格太贵。 我们每月提供10TB的数据。 仅使用S3进行数据传输将花费1,200美元。 S3 + Cloudflare 现在,我正在使用Cloudflare。 它的报告说,它节省了7.5TB。 所以,如果我在S3上使用Cloudflare,我可以将数据传输成本降低到300美元。 S3 + 2 Web服务器+ Cloudflare 或者,我可以推出2台DigitalCloud服务器(每台10美元,总共20美元)。 然后,写一个简单的PHP从S3中检索图像,然后caching4天。 做一个DNS负载平衡。 然后把它放在Cloudflare的后面。 这种方法的优点是它更加灵活。 我可以这样做http://s3.mywebsite.com/bucket/objectname.png?width=300&height=200 。 所以不是生成缩略图,而是将其存储在S3中。 我可以在飞行中创build缩略图。 然后,让Cloudflare进一步caching缩略图。 缺点是我需要pipe理服务器。 所以,问题是哪一个更适合我?
我正在使用S3静态网站托pipe,并试图让以下redirect工作: example.com –> example.com/index.html example.com/foo –> example.com/foo/foo.html example.com/bar –> example.com/bar/bar.html etc. 我只能为整个桶设置一个“索引文件”值,那就是'index.html'。 但是,随着富,我不能有一个不同的“默认”的文件。 我想避免有一堆'index.html',因为编辑这些文件变得非常烦人,总是想知道哪个是哪个,因为它们都具有相同的名称。 因此,上面的redirect计划。 看来我不能使用S3静态网站托pipe的XML格式的redirect规则,因为你遇到了一个无限的recursion:如果一个URLS的前缀'foo'redirect到'foo / foo.html',redirect应用再次,你得到foo / foo / foo.html'等 另外一个select是使用index.html文件中的redirect元数据条目,在存储区中设置一个空的index.html以redirect到foo.html。 但是,这将打败我保持简单的目标,我仍然必须添加所有这些文件称为'index.html',并设置一堆redirect。 如果没有更好的select,我只需要处理一大堆index.html文件就可以了。 但如果有出路,我很乐意听到。 谢谢!
我正在尝试整合从S3存储桶获取的CloudFront分配的签名cookie,但获取访问被拒绝的错误消息: <Error> <Code>AccessDenied</Code> <Message>Access Denied</Message> <RequestId>BLAH BLAH</RequestId> <HostId>BLAH BLAH</HostId> </Error> 让我感到困惑的是,一些文件似乎一直工作,而其他人在我的自定义策略允许同一目录使用相同的签名的cookie失败。 例如:我在/projects/index.html上有一个文件,在/projects/src/Runtime.js上有一个文件,它不会使用自定义策略,通过在资源中使用通配符: http : //test.mydomain.com/projects/ * 这两个文件都设置为私人在S3上,我可以想到这两个文件之间的唯一区别是请求/projects/src/Runtime.js文件请求引用test.mydomain.com而不是mydomain.com这是第一个/projects/index.html请求的服务。 我知道这两个请求的cookie都被正确设置,并且这些自定义策略和签名对他们来说是有效的,因为当我弄乱他们并给他们错误的值时,我会得到不同的错误信息。 无论如何! 我的configuration如下: CloudFront设置: i.imgur.com/DMcUeDY.png (服务器默认链接限制,b) 我有一个替代的主机名,这是服务该文件的网站的子域(例如test.mydomain.com)。 它不是一个真正的CNAME条目,我没有它的证书 – 我通过本地/ etc / hosts条目使用该名称引用CloudFront。 CloudFront原点设置: i.imgur.com/ereGJ42.png (服务器默认链接限制,meh) 起源很简单 – 引用我的S3桶的根,我不限制桶,因为它还包含我想保持公开可用的文件。 我修改了default的行为: i.imgur.com/5N2RlxM.png (Serverfault链接限制,呃) 基本上打开了限制查看器访问。 可信签名者是s3存储桶的所有者的根帐户。 其余的CloudFront选项保持不变。 我有一个由亚马逊生成的CloudFront密钥对,我使用它提供给PHP(使用openssl_sign)亚马逊的片段来签署一个自定义策略访问整个目录。 我真的不能真正validation问题的地方在于真正模糊的“访问被拒绝”错误消息,但我敢肯定,它不是我签署cookie的方式。 我试过使用错误的值,并得到不同的错误,如“格式错误的签名”或“格式错误的政策”,所以我假设我的签名检查。 另外,正如我所提到的一些文件的工作。 我已经坚持了几天现在,任何帮助将不胜感激!
我真的很努力让Cloudfront和S3在S3上存储的video文件的头部添加Access-Control-Allow-Origin:*(对于iPhones上的内联video – 似乎在其他地方工作,但内联video只能在来自同一个域的iPhone,所以假设它是CORS相关的)。 只有存储桶中的第一个文件才有正确的标题 curl -I -H "Origin: https ://example.com" http://cdn.example.com/0000d723-5c73-4d71-953c-d7e29e70f17b.jpg HTTP/1.1 200 OK Content-Type: application/octet-stream Content-Length: 80962 Connection: keep-alive Date: Thu, 02 Jun 2016 00:38:50 GMT Access-Control-Allow-Origin: https://beek.co Access-Control-Allow-Methods: GET Access-Control-Max-Age: 3000 Access-Control-Allow-Credentials: true x-amz-meta-md5-hash: 18692618d1f6865694f08fb2dcd12201 Last-Modified: Wed, 15 Feb 2012 03:08:14 GMT ETag: "18692618d1f6865694f08fb2dcd12201" Accept-Ranges: bytes Server: AmazonS3 Vary: Origin,Access-Control-Request-Headers,Access-Control-Request-Method Age: 63 X-Cache: […]
我有一个在Amazon S3上的应用程序的前端部分和在cloud66上的后端,与NGinx。 DNS的“www.website.com”指向S3,“api.website.com”指向nginx。 我想为这两个网站使用相同的域名,因此“www.website.com”仍然服务于前端,“www.website.com/api”必须服务于后端。 我试图在S3上添加一个redirect规则,但它做了一个额外的请求redirect。 我能做什么?
我有几个S3存储桶,我想把它们交给另一个组织,因为我们正在将一个现有的托pipe客户端交给他们。 在查看文档之后,如果我不再想要为存储桶负责,似乎最简单的select是将新存储桶的内容复制到由新组织控制的新存储桶中,并使任何现有应用程序写入文件从现在起到新的水桶。 斗不是很大: aws s3 ls –human-readable –recursive –summarize s3://some-client-bucket # (snip… lots of files listed, all less than 10mb) # Total Objects: 22764 # Total Size: 2.4 GiB 但是,有些文件是版本化的,我每天都会看到一些去年的文件快照,我也希望能够跨越这些文件。 有没有一个简单的方法来做到这一点? 我知道如何将一个存储桶的当前内容复制到由另一个组织控制的新存储内容,然后授予我访问权限,如下所示: aws s3 sync s3://some-client-bucket s3://new-client-bucket –recursive 但是,我不认为这也会跨越这些版本,而我一直依靠S3的每个文件版本,而不是自己的时间戳文件。 我是否需要偷工减料? 下载每个版本化的文件 用时间戳重命名 将其上传到新的存储桶 或者是S3有一些漂亮的额外function为我自动做到这一点?
我想控制谁可以通过应用程序下载文件(就好像它在本地FS上一样)。 考虑到S3不能作为符合POSIX标准的文件系统安装,有什么正确的方法呢?
现在,我有一个完全在EC2实例上的站点,包括所有静态文件,如css,js和图像。 我想知道处理移动它们的最佳方法。 例如,在给定的html页面的<HEAD> ,我有这个对.js文件的引用: <script src="js/somefile.js"></script> 我想避免的是不得不进入并更新这个(和其他一些)如下: <script src="https://SOMETHING.cloudfront.net/js/somefile.js"></script> 我并不担心将文件移到S3(但),但更多的是如何重写这些链接。 我想这应该有一些解决办法。 为了完整起见,我目前在EC3实例前面使用了一个负载平衡器(这也是我的SSL)。 我也使用路由53的DNS。 任何见解都会有帮助。
后续我原来的问题: 没有caching控制标题从AWS CloudFront与S3来源的文件 我使用AWS CloudFront以AWS S3为原点提供静态文件。 我尝试使用AWS Web控制台为我的对象设置Cache-Control标题,如我原始问题(上面的链接)中的答案中所述。 当我使用AWS S3链接访问文件时, 我已经可以看到我添加的标题 : Cache-Control:public,max-age = 31536000 。 问题是浏览器不尊重标题。 当我重新加载/刷新相同的链接,我得到一个304 – 未修改的响应,而不是一个200(caching)的响应。 我也尝试了max-age = 300 (没有公开 )的值,并尝试了内部的值,但我总是得到304响应。 我也尝试从S3添加Expires头,但结果相同。 如何让浏览器尊重caching头? 我想利用浏览器caching,并节省使用AWS的成本。 附加说明:我的S3存储桶未设置为静态网站托pipe。 以防万一,这与此有关。 编辑:下面是活的HTTP头 https://cdn.example.com/path/logo.png GET /path/logo.png HTTP/1.1 Host: cdn.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate, br Referer: […]