root用户S3拒绝访问,带有ruby在轨道上



我尝试使用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/*"
            ]
        }

最新更新