AWS :: S3 :: Errors :: InvalidAccessKeyId具有有效的凭证

问题描述 投票:0回答:1

[尝试将文件上传到S3存储桶时出现以下错误:

AWS::S3::Errors::InvalidAccessKeyId: The AWS Access Key Id you provided does not exist in our records.

文件存在,存储桶存在,存储桶允许上传,凭据正确,使用具有相同凭据的Cyber​​Duck,我可以连接文件并将其上传到该存储桶就好了。此处的大多数答案都指向凭据,但环境变量会覆盖它们,但实际情况并非如此,我尝试将它们直接作为字符串传递,并输出它们以确保它是正确的凭据。

v1

AWS.config(
  :access_key_id => 'key',
  :secret_access_key => 'secret'
)

s3 = AWS::S3.new
bucket =  AWS::S3.new.buckets['bucket-name']
obj = bucket.objects['filename']
obj.write(file: 'path-to-file', acl:'private')

这使用的是宝石的v1版本(aws-sdk-v1,但我也尝试过使用v3,但出现相同的错误。

v3

Aws.config.update({
  region: 'eu-west-1',
  credentials: Aws::Credentials.new('key_id', 'secret')
})

s3 = Aws::S3::Resource.new(region: 'eu-west-1')

bucket = s3.bucket('bucket-name')
obj = bucket.object('filename')
ok = obj.upload_file('path-to-file')

注意:错误在obj.write行上引发。

注2:这是Ruby on Rails 4应用程序中的rake任务。

ruby-on-rails ruby amazon-s3 aws-sdk
1个回答
0
投票

最后弄清楚了,问题在于,因为我们使用的是自定义端点,所以找不到凭据,我想这与自定义端点的工作原理不同。

现在要指定自定义终结点,您将需要使用出于某些原因is not documented(或至少我在任何地方都找不到它)的配置选项,实际上我必须经过paperclip's code来了解如何家伙正在处理这个。

无论如何,v1的配置与为端点添加的配置是什么样子:

AWS.config(
  :access_key_id => 'key',
  :secret_access_key => 'secret',
  :s3_endpoint => 'custom.endpoint.com'
)

希望这可以节省一些时间。

© www.soinside.com 2019 - 2024. All rights reserved.