加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用ACL调用upload_file时,Ruby S3“访问被拒绝”错误

发布时间:2020-12-17 03:42:13 所属栏目:百科 来源:网络整理
导读:我正在尝试编写一个 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) 这
我正在尝试编写一个 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)

这似乎工作正常,除了该文件不公开,我无法获得它的公共URL.但是当我登录S3时,我可以看到我的文件很好.

为了使其公开,我将最后一行更改为

obj.upload_file(filename,acl: 'public-read')

但是当我这样做时,我收到了拒绝访问的错误.我的S3存储桶上是否存在一些导致问题的权限设置,或者我是否以某种方式错误地调用了这个?

解决方法

花了更多的时间比我想承认使用S3存储桶策略,我想出了如何让它工作.

我强烈推荐这三个AWS资源:

> Example Bucket Policies
> Policy Generator
> IAM Policy Elements Reference

我创建了一个策略,允许特定用户为我的存储桶提供对象上载,对象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/*"
    }
]
}

一些提示:

>上面第3点中的参考有助于理解JSON的“Principal”部分.只需在IAM中创建一个用户,并填写相应的信息.>资源部分可能有点挑剔.根据您授予的权限,您需要考虑是否应该指定存储桶中的对象(因此在MY_BUCKET之后为“/ *”)或存储桶本身.如果在尝试保存存储桶时开始出现错误(“操作不适用于语句中的任何资源……”,您可能指定了错误的资源.>最后一件事你可能只是向所有人开放你的权限(指定Principal为“*”),直到你可以获得功能.然后,一旦你开始工作,通过更改Principal来减少访问列表.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读