Доступ запрещен для пользователя root s3, для Ruby on Rails - PullRequest
0 голосов
/ 18 декабря 2018

Я попытался использовать 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"
            ]
        }
    }
  ]
}

Я также обновил указанную выше политику корзины, включив в нее корневые учетные данные для идентификатора пользователя и имени пользователя, но при этом доступ запрещен.Я перезапустил сервер rails, закрылся на локальном хосте, на котором я тестирую, и перезапустил весь процесс, но безуспешно.Да, я переключил ключи доступа и убедился, что использую правильные ключи в зависимости от того, был ли он для пользователя 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

Я попробовал оба ответа ниже, но безуспешно!

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Ваша политика корзины не разрешает доступ к ресурсам внутри корзины, просто корзина в целом, вам нужно добавить политику, которая разрешает что-то вроде следующего:

{
    "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/*"
            ]
        }
0 голосов
/ 18 декабря 2018

Создайте нового пользователя 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/*"
            ]
        }
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...