AWS和Rails:授权标头格式错误;证书形成不良

时间:2017-03-07 12:57:58

标签: ruby-on-rails ruby amazon-web-services amazon-s3

我正在尝试从生产服务器访问我的S3存储桶。一切都在开发中很好,但是在我的产品控制台中我得到了:

Aws::S3::Errors::AuthorizationHeaderMalformed: The authorization header is malformed; the Credential is mal-formed; expecting "<YOUR-AKID>/YYYYMMDD/REGION/SERVICE/aws4_request".

我的代码:

class AwsFileDownloader
  def initialize(args)
    @s3 = Aws::S3::Client.new
    @aws_file_path = ...
  end

  def get_file
    temp_file = File.new('temp.csv', 'r+')
    @s3.get_object({bucket: Rails.application.secrets.aws_bucket, key: @aws_file_path}, target: temp_file)
    ...
  end
end

我的aws初始化程序(在两种环境下似乎都能正常工作):

require 'aws-sdk'

Aws.config.update({
  region: Rails.application.secrets.aws_region,
  credentials: Aws::Credentials.new(Rails.application.secrets.access_key_id, Rails.application.secrets.secret_access_key)
})

欣赏任何建议!

4 个答案:

答案 0 :(得分:2)

要检查的事项:

  • 存储桶ACL和存储桶策略。生产是否符合开发?
  • 你的任何密钥是否包含斜杠,可能会被错误地解析?
  • 你的开发和生产地区有什么不同?如果你尝试不同的地区会有所不同吗?

答案 1 :(得分:1)

这个答案很晚,但是也许有人会觉得有用。当您切换AWS KEY IDAWS ACCESS KEY时,会导致上述错误。

在正确的位置使用正确的凭据,它应该可以解决您的问题。

答案 2 :(得分:0)

由于错误表明未正确设置凭据。一个可能的原因(因为在开发环境中工作)是配置变量access_key_id和secret_access_key可能是特定于环境的。

答案 3 :(得分:0)

也有同样的错误,但是问题是我错误地交换了访问密钥和秘密密钥的值。