Aws::S3:: Ошибки::AccessDenied: доступ запрещен

Я пытаюсь загрузить файлы на S3, используя гем Aws-S3.

s3 = Aws::S3::Resource.new(
 credentials: Aws::Credentials.new('XXX', 'XXX'),  
region: 'us-east-1') 

obj = s3.bucket('bucket-name').object('key')

obj.upload_file('/Users/saghosh/Downloads/projecttimeline_Dec 2017_MajorprojectN.pdf',acl:'public-read')

Но каждый раз он дает мне Aws::S3::Errors::AccessDenied: доступ запрещен.

Но если я пытаюсь дать

s32 = Aws::S3::Client.new(
  access_key_id: 'XXX',
  secret_access_key: 'XXX',
  region: 'us-east-1'
)
 s32.list_objects({bucket: 'bucket-name'})

он работает нормально и перечисляет все мои загруженные вручную файлы. Это похоже на проблему с разрешением, но не в состоянии понять, где проблема?

2 ответа

Это может быть проблема с политикой IAM, прикрепленной к секретным ключам доступа, которые вы использовали. Убедитесь, что соответствующие разрешения S3 предоставлены для выполнения действий через SDK.

Вы получаете эту ошибку из-за разрешения учетной записи попробуйте

    :s3_permissions => 'public-read'
:s3_permissions => 'private'


 config.paperclip_defaults = {
   :storage => :s3,
   :s3_permissions => 'public-read',
   :s3_credentials => {
    :bucket => "",
    :access_key_id => "",
    :secret_access_key => "",
    :s3_region => "us-east-1"
  }
}

Также проблема может быть в вашем системном времени.

Просто погуглите "Aws::S3::Errors::RequestTimeTooSkewed".

URL-адрес, сгенерированный S3, содержит время и срок действия зависит от времени системы, в которой он был создан. Возможное решение здесь: https://www.howtogeek.com/tips/how-to-sync-your-linux-server-time-with-network-time-servers-ntp/

Другие вопросы по тегам