我正在尝试使用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'})
它工作正常并列出我手动上传的所有文件。 这似乎是一个权限问题,但无法弄清楚问题出在哪里?
答案 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/