我试图编写一个Ruby脚本,将文件上传到AWS并使文件公开。我做了以下事情:
s3 = Aws::S3::Resource.new(
credentials: Aws::Credentials.new(KEY, SECRET),
region:'us-west-2'
)
obj = s3.bucket('stg-db').object('key')
obj.upload_file(filename)
这似乎工作正常,但文件不公开,我无法获取公共网址。但是当我登录S3时,我可以很好地看到我的文件。
为了公开发布,我将最后一行更改为
obj.upload_file(filename, acl: 'public-read')
但是当我这样做时,我收到了拒绝访问权限的错误。我的S3存储桶上是否存在一些导致问题的权限设置,或者我是否以某种方式错误地调用了这个设置?
答案 0 :(得分:8)
花了更多的时间比我想承认使用S3存储桶策略,我想出了如何让它工作。
我强烈推荐这三个AWS资源:
我创建了一个策略,允许特定用户拥有对我的存储桶的对象上载,对象ACL和对象删除权限。这是JSON:
{
"Version": "2012-10-17",
"Id": "Policy1441134540846",
"Statement": [
{
"Sid": "Stmt1441134537688",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::MY_USER_ID:user/myemail@example.com"
},
"Action": [
"s3:DeleteObject",
"s3:PutObjectAcl",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::MY_BUCKET/*"
}
]
}
一些提示: