我尝试使用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 Server,从Localhost中关闭,我正在对此进行测试,并重新启动了整个过程,但没有运气。是的,我已经切换了访问键,并确保我使用正确的键,具体取决于它是针对root用户还是我创建的IAM用户。
我的本地.env文件
S3_BUCKET_NAME=bucket-name
AWS_ACCESS_KEY_ID=*************
AWS_SECRET_ACCESS_KEY=************
AWS_REGION=us-east-1
我正在使用carrierwave-aws宝石,我的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/*"
]
}
]
}
您的存储桶策略不允许访问存储桶内的资源,通常只是添加一个允许以下内容的策略:
{
"Id": "Policy***********",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1545097638***",
"Action": "s3:*",
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::bucketnamehere",
"arn:aws:s3:::bucketnamehere/*"
],
"Principal": {
"AWS": [
"arn:aws:iam::ACCOUNTID:user/USERNAME"
]
}
}
]
}
然后,通过以下策略使您的用户访问对象:
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::BUCKETNAME",
"arn:aws:s3:::BUCKETNAME/*"
]
}