我在S3上创建了一个存储桶,我希望它是一个私有存储桶,因此没有任何对象直接链接的人不能访问该对象,并且只能通过我的应用访问该存储桶的所有对象。
我已经在 Ruby on Rails 中开发了我的应用,并部署在 Heroku 上,并使用 PaperClip 进行文件存储。
由于我不想公共访问,因此我在 权限 下的 公共访问设置 中阻止了公共访问。桶信息中心的“ strong>”标签。
设置屏幕截图图像: 我创建了一个IAM用户,还创建了一个IAM策略并分配给该用户。这是我的政策。 但是我收到访问被拒绝错误
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListAllMyBuckets"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucket-name"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::bucket-name/*"
]
}
]
}
在我的production.rb
中,我正在使用Paper3cip的S3凭据,如下所示:
config.paperclip_defaults = {
storage: :s3,
s3_credentials: {
bucket: ENV['S3_BUCKET_NAME'],
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
s3_region: ENV['AWS_REGION'],
}
}
并且我已经在Heroku中定义了这些环境变量。访问密钥ID和秘密访问密钥是我的IAM用户的。
在我的paperclip.rb
中,我有:
Paperclip::Attachment.default_options[:s3_host_name] = 's3.amazonaws.com'
错误:
我在Chrome控制台中收到的错误是Failed to load resource: the server responded with a status of 403 (Forbidden)