Aws :: S3 ::错误:: AccessDenied:访问被拒绝

时间:2017-11-30 11:06:12

标签: ruby-on-rails amazon-s3 ruby-on-rails-5.1

我正在尝试使用Aws-S3 gem将文件上传到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 ::错误:: AccessDenied:访问被拒绝。

但如果我想提供

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

它工作正常并列出我手动上传的所有文件。 这似乎是一个权限问题,但无法弄清楚问题出在哪里?

3 个答案:

答案 0 :(得分:1)

附加到您正在使用的访问/密钥的IAM策略可能存在问题。确保授予适当的S3权限,以便通过SDK执行操作。

答案 1 :(得分:0)

由于帐户权限,您收到此错误 尝试

    :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"
  }
}

答案 2 :(得分:-1)

问题也可能出在您的系统时间上。

只用Google搜索“ Aws :: S3 :: Errors :: RequestTimeTooSkewed”。

S3生成的url包含时间,并且根据生成它的系统时间具有到期时间。 可能的解决方案在这里: https://www.howtogeek.com/tips/how-to-sync-your-linux-server-time-with-network-time-servers-ntp/