gpt4 book ai didi

ruby-on-rails - 403 AccessDenied 用于使用 s3cmd 工具上传到 Amazon S3 的回形针附件

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

我最近使用 s3cmd tool 将一千多个 Paperlclip 附件从本地存储移动到 Amazon S3 .您可以找到有关我如何完成此任务的详细信息 here ,但总而言之,我使用以下命令迁移所有旧附件。

s3cmd sync my-app/public/system/ s3://mybucket 

我更新了我的代码库以使用新的 S3 存储桶,我已经测试了连接并且一切正常。事实上,我可以通过我的应用程序将新附件上传到远程 S3 存储桶并查看/下载它们没有问题。但是,Paperclip 和 S3 似乎在某处彼此不同步,如果我尝试通过我的应用。但是上传到同一个存储桶的新附件加载得很好。

permission denied for old attachments migrated to s3

我有一个具有以下配置的 IAM 组设置:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::mybucket/*"
}
]
}

从我可以将新附件上传到 S3 的事实来看,我会说连接建立得很好。我相信我设置 s3cmd 以通过不同的 IAM 用户帐户连接到我的存储桶,而不是通过我的应用程序访问存储桶的用户帐户。可能是权限问题吗?如果是这样,我可以以任何方式更改上述权限以授予对这些文件的访问权限吗?

我正在使用 aws-sdk将回形针与 S3 集成。

编辑:
我认为这可能是所有权问题,因为我使用管理员 key 而不是我在应用程序中使用的那些文件上传了文件。在将 s3cmd 配置为使用应用程序使用的相同 key 后,我清除了存储桶并重新同步了它。然而,我遇到了同样的结果。

编辑2:
我可以通过进入我的应用程序的生产控制台并手动与我的存储桶交互来进一步验证我的权限和连接。一切工作正常,即我可以检索浏览器返回 403 的文件。
> s3 = AWS::S3.new
=> <AWS::S3>
> bucket = s3.buckets['mybucket']
=> #<AWS::S3::Bucket:mybucket>
> bucket.exists?
=> true
> image = bucket.objects["SomeFolder/SomeImage.jpg"]
=> <AWS::S3::S3Object:SomeFolder/SomeImage.jpg>
> puts image.read
=> ǃ���^�D��턣�����=m������f ... machine code

最佳答案

看起来您的 S3 存储桶策略不允许公共(public)用户正确地进行公共(public)读取访问。尝试类似:

{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::my-brand-new-bucket/*"
]
}
]
}

当您手动应用公共(public)读取权限时,您能够以公共(public)用户身份访问这些文件这一事实确认您的存储桶策略未正确授予读取访问权限。

当您使用公共(public) S3 URL 访问文件时,没有经过身份验证的用户。

关于ruby-on-rails - 403 AccessDenied 用于使用 s3cmd 工具上传到 Amazon S3 的回形针附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20960704/

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