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

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

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

在此处输入图像描述

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

应用程序名称/上传/顺序/收据

我需要做什么才能允许用户下载收据的权限?

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

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

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

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

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

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

或者您可以通过运行来组合它们:

 aws s3 cp s3:///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:///path/to/file/data_out.jsonlines 

这些命令执行以下步骤:

  • copy: s3:///path/to/file/data.jsonlines to s3://c/path/to/file/data_copy.jsonlines

  • move: s3:///path/to/file/data_copy.jsonlines to s3://cfa-opengazettes-ke/path/to/file/data.jsonlines

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

注意--acl选项和参数public-read 。 从文档 :

–acl(string)设置执行命令时对象的ACL。 如果使用此参数,则必须在IAM策略的操作列表中包含“s3:PutObjectAcl”权限。 仅接受privatepublic-readpublic-read-writeauthenticated-readaws-exec-readbucket-owner-readbucket-owner-full-controllog-delivery-write的值

此AWS页面上的一些更有用的信息