gpt4 book ai didi

ruby-on-rails - 使用 Rails 和 Paperclip 的 s3 的简单 Amazon IAM 策略

转载 作者:行者123 更新时间:2023-12-04 06:17:38 25 4
gpt4 key购买 nike

我的 IAM 策略应该是什么样子才能允许用户 my-user访问名为 my-bucket 的 Amazon S3 存储桶?

目前,我已将以下策略分配给 my-user :

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::my-bucket"]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::my-bucket/*"]
}
]
}

我从以下链接的“示例 1”中获得了此政策:

http://blogs.aws.amazon.com/security/post/Tx3VRSWZ6B3SHAV/Writing-IAM-Policies-How-to-grant-access-to-an-Amazon-S3-bucket

在我的 production.rb文件,我已经实现了告诉回形针使用 S3 的配置设置:
config.paperclip_defaults = {
:storage => :s3,
:s3_credentials => {
:bucket => 'my-bucket',
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
}
}

当我尝试使用我的应用上传照片时,我收到了 AWS::S3::Errors::AccessDenied异常(exception)。

奇怪的是,如果我加载 rails 控制台,并运行以下代码手动上传文件,它可以正常工作:
s3 = AWS::S3.new(access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'])
bucket = s3.buckets['my-bucket']
obj = bucket.objects['new_file']
obj.write(Pathname.new('/path/to/file'))

这正确地将文件上传到我的 S3 存储桶。我很困惑为什么我显然有权以这种方式上传文件,但是当我尝试通过具有相同凭据的回形针执行此操作时,出现权限被拒绝错误。

更令人困惑的是,当我分配 AdministratorAccess 时政策到 my-user ,回形针能够成功上传文件。

知道我该如何解决这个问题吗?

最佳答案

解决方法在这里:https://stackoverflow.com/a/19185045/736864

当回形针将文件上传到 S3 时,它还会尝试将文件设置为可公开查看,这意味着需要授予用户访问权限以设置权限。添加 s3:PutObjectAcl对我的 IAM 政策的许可解决了这个问题。

关于ruby-on-rails - 使用 Rails 和 Paperclip 的 s3 的简单 Amazon IAM 策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35326711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com