我正在开发一个AngularJS(前端)+ Rails API(后端)网站。我正在使用Amazon S3来存储图像。亚马逊S3 GET对象访问被拒绝
我能够使用aws sdk将图像从Rails上传到S3。我看到我S3中的图像变得更强大。但是,当我尝试从AngularJS视图中稍后获取它时,我的GET请求会收到Forbidden:Access拒绝错误。我想这个问题与桶或图像对象权限有关,但我无法弄清楚什么。
这是我怎么上传图片摘要:
AWS.config(
:access_key_id => 'access-key',
:secret_access_key => 'secret-key',
:s3_endpoint => 's3-eu-west-1.amazonaws.com'
)
key = 'key_path_in_bucket'
# Image is stored in S3
s3 = AWS::S3.new
puts "S3=" + s3.inspect
bucket = s3.buckets[bucketName]
obj = bucket.objects[key]
puts "obj=" + obj.inspect
obj.write(photo)
注:我不在上传请求使用任何权限(当我检查在S3中的形象,我在属性看心不是任何权限设置)。
这是我斗政策:
{
"Version": "2008-10-17",
"Id": "Policy1399551968880",
"Statement": [
{
"Sid": "Stmt1399551891404",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::yanpy.dev/*"
},
{
"Sid": "Stmt1399551962551",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::yanpy.dev/*"
}
]
}
这是我的GET请求:
Remote Address:178.236.7.33:80
Request URL:http://yanpy.dev.s3.amazonaws.com/img/boats/6/52.jpg
Request Method:GET
Status Code:403 Forbidden
Request Headersview source
Accept:image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,es;q=0.6
Connection:keep-alive
Host:yanpy.dev.s3.amazonaws.com
Referer:http://localhost:1234/app/index.html
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.132 Safari/537.36
Response Headersview source
Content-Type:application/xml
Date:Thu, 08 May 2014 15:04:42 GMT
Server:AmazonS3
Transfer-Encoding:chunked
x-amz-id-2:8QWnbecCc4nXd8+0zDxkqcECs+Sqkh8eBqq/FAWcy62mBRvK3VoCUbcBMywwCcyr
x-amz-request-id:A7D2E1F80F3F0612
万一有帮助,当我在一个水桶手动创建一个对象,我也可以将其设置为公共(使用公共菜单)。但是,当我从aws sdk API上传图像时,我无法做到这一点(我得到以下对象因错误而未公开)。
你想让图像公开可读吗? – Sebastian
@塞巴斯蒂安我对安全性几乎一无所知。所以,任何帮助真的很受欢迎。我对你的问题的猜测实际上不是。我想我只是想公开图片来请求来自我的域名。是否有意义?我已经阅读过,您可以添加更多内容来实现此目的。但无论如何,我甚至无法将它们公诸于众。 – Rober
@塞巴斯蒂安出现了我的想法。是否有可能检查谁是对象的用户或所有者?我有两个AWS账户,我有可能使用其他用户的凭证上传文件。在我的政策中,我授予了所有人的权利,对吧?它是有道理的,或者我会变得疯狂...... – Rober