7

我在 S3 上有一个名为 xyz 的存储桶。在存储桶内,我在 786/html/index.html 有 html 文件,在 786/html/images/ 中有多个图像。文件夹和文件具有所有者完全控制的权限。我正在使用 aws ruby​​-sdk 生成 786/html/index.html 的 url,页面工作正常,但 786/html/images 处的图像未在 786/html/index.html 中呈现。它在浏览器控制台上给了我以下错误:-

Failed to load resource: the server responded with a status of 403 (Forbidden) 

现在我授予了 786/html/images 的公开阅读权限。786 和 786/html 具有唯一所有者的权限。现在 786/html/index.html 能够渲染图像,但现在图像也可以通过 public_url 访问。我很困惑,因为 786 和 786/html 没有公共权限,仍然可以访问图像。

一种可能的解决方案是将 AwsAccessKey 和签名附加到 index.html 内的图像源。但是由于我们有多个图像,因此我们需要一个通用签名。

建议需要

谢谢, Apurva Mayank

4

2 回答 2

3

S3 是一个对象存储。它不是分层文件系统,实际上没有“文件夹”。

对象键可以具有前缀,这些前缀按约定用 . 分隔/

这给人一种文件夹的错觉,但这与实际的层次结构不同。每个对象的权限都是独立的,受制于策略(也可以包括前缀引用)。

但是说“786 和 786/html 没有公共许可”但“786/html/images”确实有公共许可在 S3 中没有任何意义,因为这些“文件夹”“下”的对象实际上并没有与它们相关联。

无论您使用什么来处理您的存储桶,都可能给您一种情况并非如此的印象,或者可能正在操纵“文件夹中”对象的权限,并给您一种这些权限是继承的印象。

如果您的目的是使 html 文件只能通过签名的 URL 可见,或者使图像只能在页面上可见(并且不能自行下载),那么您的代码还需要完全限定和签名嵌入的图像(和文件,如果你也希望它是私有的)。

于 2013-10-22T02:46:05.200 回答
0

创建图像时,添加以下标题:

x-amz-acl: public-read

更多关于 ACL 的信息:

http://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl

此外,如果您发现 Content-Type 错误,标题将解决此问题。

Content-Type: image/jpeg

于 2014-06-06T00:58:37.930 回答