使用 Paperclip 拒绝访问 S3
Access Denied S3 with Paperclip
我正在熟悉使用 S3 和 ruby 将文件上传到 Amazon Web Service。我最近遇到了以下错误:AWS::S3::Errors::AccessDenied Access Denied
。在查看 google 时,我发现了 this post 的错误。它声称存储桶策略不足以允许通过网络应用程序进行访问,并且还必须为用户提供 "Administrator Access"。
我已经试过了,它工作正常,但我觉得这表明我做得不对,因为在我读过的任何其他文档中都没有提到管理员访问权限。我正在使用 aws-sdk gem。谁能权衡是否需要管理员访问权限?非常感谢!
你不应该真的需要 Admin Access
来实现这个。
确保你的 heroku 配置中有 AWS access_key_id
和 secret_access_key
设置。而且,您还需要确保您的用户帐户在 AWS IAM 控制台中设置了 Access Policy
。
有关更多信息,请参阅 this post。
Paperclip 的默认权限是 :public_read
,除非您将存储桶指定为私有。
的信息,请参阅此内容
如已接受的答案中所述,您不需要 "Admin Access"。但是,如 Amazon 提供的一些示例中所记录的那样,授予存储桶访问权限的典型策略对于回形针来说是不够的。
以下政策对我有用:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListAllMyBuckets"
],
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucket-name-to-be-set-by-you"
]
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket-name-to-be-set-by-you/*"
]
}
]
}
None 的现有答案实际上说明了您需要授予哪些政策,所以这里是:s3:PutObject
、s3:DeleteObject
和 s3:PutObjectAcl
.
这是我用来允许 Paperclip 以 :public_read
权限放置对象的完整 S3 存储桶策略:
{
"Version": "2008-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::IAM_USER_ID:user/IAM_USER_NAME"
},
"Action": [
"s3:PutObject",
"s3:DeleteObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::S3_BUCKET_NAME/*"
}
]
}
我正在熟悉使用 S3 和 ruby 将文件上传到 Amazon Web Service。我最近遇到了以下错误:AWS::S3::Errors::AccessDenied Access Denied
。在查看 google 时,我发现了 this post 的错误。它声称存储桶策略不足以允许通过网络应用程序进行访问,并且还必须为用户提供 "Administrator Access"。
我已经试过了,它工作正常,但我觉得这表明我做得不对,因为在我读过的任何其他文档中都没有提到管理员访问权限。我正在使用 aws-sdk gem。谁能权衡是否需要管理员访问权限?非常感谢!
你不应该真的需要 Admin Access
来实现这个。
确保你的 heroku 配置中有 AWS access_key_id
和 secret_access_key
设置。而且,您还需要确保您的用户帐户在 AWS IAM 控制台中设置了 Access Policy
。
有关更多信息,请参阅 this post。
Paperclip 的默认权限是 :public_read
,除非您将存储桶指定为私有。
如已接受的答案中所述,您不需要 "Admin Access"。但是,如 Amazon 提供的一些示例中所记录的那样,授予存储桶访问权限的典型策略对于回形针来说是不够的。
以下政策对我有用:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListAllMyBuckets"
],
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucket-name-to-be-set-by-you"
]
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket-name-to-be-set-by-you/*"
]
}
]
}
None 的现有答案实际上说明了您需要授予哪些政策,所以这里是:s3:PutObject
、s3:DeleteObject
和 s3:PutObjectAcl
.
这是我用来允许 Paperclip 以 :public_read
权限放置对象的完整 S3 存储桶策略:
{
"Version": "2008-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::IAM_USER_ID:user/IAM_USER_NAME"
},
"Action": [
"s3:PutObject",
"s3:DeleteObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::S3_BUCKET_NAME/*"
}
]
}