“拒绝访问” - 用户对S3 Bucket的权限

时间:2015-06-08 17:44:34

标签: ruby-on-rails amazon-web-services amazon-s3 carrierwave

我发送了一封自动发送电子邮件的订单,现在我正试图找到一个下载PDF收据的链接。

用户在尝试下载时在浏览器中收到错误“此XML文件似乎没有与之关联的任何样式信息。文档树如下所示。”

enter image description here

我已经进入水桶并在收据桶上运行“公开”,仍然没有运气。文件结构是:

应用程序名/上传/订单/收据

如果允许用户下载收据的权限,我需要做些什么?

2 个答案:

答案 0 :(得分:0)

当您公开存储桶时,您应该获得一个看起来像这样的新网址

http://bucketName.s3-website-us-east-1.amazonaws.com/uploads/order/receipt

...你应该在邮件中使用那个。

但请记住,所有数据都是公开的,也许您会更好地使用您为每个客户分发的预先签名的s3网址。

答案 1 :(得分:0)

在s3上遇到与特定文件类似的问题。通过使用mv命令和--acl参数更改文件的访问权限来解决此问题。尝试访问名为data.jsonlines的文件时出现ACCESS DENIED错误。通过运行以下命令解决它:

aws s3 cp s3://<s3 bucket name>/path/to/file/data.jsonlines  s3://cfa-opengazettes-ke/gazettes/data_copy.jsonlines 

aws s3 mv --acl public-read s3://<s3 bucket name>/path/to/file/data_copy.jsonlines s3://cfa-opengazettes-ke/gazettes/data.jsonlines

或者您可以通过运行合并

aws s3 cp s3://<s3 bucket name>/path/to/file/data_out.jsonlines  s3://cfa-opengazettes-ke/gazettes/data_out2.jsonlines && aws s3 mv --acl public-read s3://cfa-opengazettes-ke/gazettes/data_out2.jsonlines s3://<s3 bucket name>/path/to/file/data_out.jsonlines

这些命令执行以下步骤:

  • 复制:s3://<s3 bucket name>/path/to/file/data.jsonliness3://c<s3 bucket name>/path/to/file/data_copy.jsonlines

  • 移动:s3://<s3 bucket name>/path/to/file/data_copy.jsonliness3://cfa-opengazettes-ke/path/to/file/data.jsonlines

基本上,它会创建文件的副本,然后在移动过程中删除它,同时更改文件的权限。

请注意--acl选项和参数public-read。来自documentation

  

- acl(string)设置执行命令时对象的ACL。如果您使用此参数,您必须具有   &#34; S3:PutObjectAcl&#34;权限列在您的操作列表中   IAM政策。仅接受私有公开阅读的值,    public-read-write authenticated-read aws-exec-read ,   存储桶拥有者阅读存储桶拥有者完全控制日志传递 - 写入

AWS page

提供了一些更有用的信息