gpt4 book ai didi

ruby-on-rails - 使用Paperclip和IAM策略将文件上传到Amazon时访问被拒绝

转载 作者:行者123 更新时间:2023-12-04 03:11:54 24 4
gpt4 key购买 nike

我无法使用S3 IAM策略使用Paperclip进行上传。我什至在直接jQuery上传(没有Paperclip)方面遇到问题。我的情况如下,我有一个将有许多站点的应用程序。每个站点都有其自己的存储桶,并且只能访问自己的存储桶,而其他人则不能。 IAM Example Policies文档在“示例:允许每个IAM用户访问存储桶中的文件夹”下确切说明了我想做的事情。我为该应用程序设置了一个IAM组,并且该组中每个站点都有一个用户。这些IAM用户属于该组。该组的策略如下:

{
"Version":"2012-10-17",
"Statement":[{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource":"arn:aws:s3:::my-app/${aws:username}/*"
}
]
}

这是我在存储桶上的CORS配置,对于开发人员来说,当然,稍后它会被锁定:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

这是我的回形针设置:
has_attached_file :background_image,
storage: :s3,
s3_credentials: {
access_key_id: "xxx",
secret_access_key: "xxx"
},
bucket: "my-app",
s3_permissions: "public-read",
path: "/background_images/:id/:filename"

我以前直接在存储桶上使用策略,该策略确实有效,但是当我进入具有多个“站点”的生产环境时,灵活性并没有我需要的灵活。据我所知,我完全遵循了文档,但是我所做的任何事情都会导致“访问被拒绝”。此时,我什至不确定我的问题是否出在我的IAM策略或Paperclip配置上。

编辑:澄清。

编辑2:
最终解决方案

这是我基于 this article的最终IAM策略:
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowUserToSeeBucketListInTheConsole",
"Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]
},
{
"Sid": "AllowRootAndHomeListingOfCompanyBucket",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::my-app"],
"Condition":{"StringEquals":{"s3:prefix":["","home/"],"s3:delimiter":["/"]}}
},
{
"Sid": "AllowListingOfUserFolder",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::estimator-app"],
"Condition":{"StringLike":{"s3:prefix":["home/${aws:username}/*"]}}
},
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Effect": "Allow",
"Action": ["s3:*"],
"Resource": ["arn:aws:s3:::my-app/home/${aws:username}/*"]
}
]
}

和我更新的回形针设置:
has_attached_file :background_image,
storage: :s3,
s3_credentials: {
access_key_id: "xxx",
secret_access_key: "xxx"
},
bucket: "estimator-app",
s3_permissions: "public-read",
path: "/home/my_s3_username/background_images/:id/:filename"

在回形针路径中包括用户名很重要。我以为亚马逊会从凭证中推断出这一点,但事实并非如此。

最佳答案

因为您要尝试对上载的对象设置权限,所以还需要为IAM用户赋予s3:PutObjectAcl权限。

关于ruby-on-rails - 使用Paperclip和IAM策略将文件上传到Amazon时访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19184598/

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