ruby-on-rails - 使用 Ruby on Rails 以 root 用户 s3 拒绝访问
问题描述
我尝试使用 root 访问权限和密钥,但出现拒绝访问错误。我尝试重新生成密钥,并使用了新密钥,但仍然被拒绝访问。我还尝试创建一个 IAM 用户,授予其完全 s3access 权限,以及创建如下存储桶策略,但仍然出现拒绝访问错误。任何帮助,将不胜感激!我知道我可以通过公开存储桶来解决这个问题,它适用于我自己的投资组合网站,我是唯一一个将照片上传到该网站的人,但是,我知道这不是一个好的做法,我希望弄清楚为什么我会收到这个错误。
{
"Id": "Policy***********",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1545097638***",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket-name",
"Principal": {
"AWS": [
"arn:aws:iam::iamidhere:user/useridhere"
]
}
}
]
}
我还更新了上述存储桶策略以包含用户 ID 和用户名的根凭据,但仍拒绝访问。我重新启动了rails服务器,关闭了我正在测试的本地主机并重新启动了整个过程,但没有运气。是的,我已经切换了访问密钥,并确保我使用正确的访问密钥,具体取决于它是用于根用户还是我创建的 IAM 用户。
我的本地 .env 文件
S3_BUCKET_NAME=bucket-name
AWS_ACCESS_KEY_ID=*************
AWS_SECRET_ACCESS_KEY=************
AWS_REGION=us-east-1
我正在使用carrierwave-aws gem,我的carrierwave.rb 文件:
CarrierWave.configure do |config|
config.storage = :aws
config.aws_bucket = ENV.fetch('S3_BUCKET_NAME')
config.aws_acl = 'public-read'
config.aws_authenticated_url_expiration = 60 * 60 * 24 * 7
config.aws_attributes = {
expires: 1.week.from_now.httpdate,
cache_control: 'max-age=604800'
}
config.aws_credentials = {
access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
region: ENV.fetch('AWS_REGION'),
stub_responses: Rails.env.test?
}
end
我尝试了以下两个答案,但均未成功!
解决方案
创建一个新的 IAM 用户并将以下策略附加到该用户并尝试它,它在我的服务器上运行。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListAllMyBuckets"
],
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::YOUR-BUCKET",
"arn:aws:s3:::YOUR-BUCKET/*"
]
}
]
}
推荐阅读
- selenium - 如何等待值处于可选择状态
- ios - 键盘动画移动 UITableView 部分标题
- ios - 以编程方式更改 Facebook 的语言 IOS
- c++ - 使用 STL 的 C++ 中的比较器函数错误
- google-apps-script - 关于减少 Google Apps 脚本数据移动操作的运行时间的建议
- python - 如何在图像上添加文本
- javascript - 使用本地 IP 在移动设备上进行测试时,服务人员无法工作
- context-free-grammar - Rascal 中有没有办法从其相应的数据类型生成语法的语法定义?
- python - 有自定义刻度时将条形值添加到子条形图中
- node.js - NodeJS 用户授权获取特定数据