s3上的文件权限
我在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
S3是一个对象存储。 它不是一个分层文件系统,实际上并没有“文件夹”。
对象键可以具有按照惯例用/
分隔的前缀。
这给出了文件夹的错觉,但这与存在实际的层次结构不一样。 每个对象的权限都是独立的,受制于策略(也可以包含前缀引用)。
但要说“786和786 / html没有公共权限”,但“786 / html / images”在S3中没有公共权限,因为这些“文件夹”下的对象实际上并不与它们关联。
无论您使用什么来处理您的存储桶,都可能给您一种其他方式的印象,或者可能是在管理对象“在文件夹中”的权限,并给您这些权限被继承的印象。
如果您的目的是仅使用签名的URL来使html文件可见,或者仅使用该页面使该图像可见(并且不能自行下载),那么您的代码还需要完全限定并签署url的url嵌入式图像(以及该文件,如果您希望它也是私有的)。
当您创建图像时,请添加以下标题:
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