ruby AWS和Rails:授权标头格式不正确;凭据格式错误

vohkndzv  于 2023-10-18  发布在  Ruby
关注(0)|答案(6)|浏览(126)

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

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)
})

感谢任何建议!

dced5bon

dced5bon1#

这个答案很晚,但也许有人会发现它很有用。上述错误是在您切换AWS KEY IDAWS ACCESS KEY时引起的。
在正确的地方使用正确的凭据,它应该可以解决您的问题。

uoifb46i

uoifb46i2#

检查事项:

  • 桶策略和桶策略。生产与开发是否匹配?
  • 你的键中是否包含斜线,这可能会被错误地解析?
  • 开发区和生产区是否不同?如果你尝试不同的地区,会有什么不同吗?
e37o9pze

e37o9pze3#

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

rks48beu

rks48beu4#

  • 对于Windows用户 * 我一次又一次地遇到同样的问题,即使在复制了正确的凭据之后。原来Windows Bash不接受CTRL+C和CTRL+V进行复制和粘贴。只有右键单击和复制粘贴选项为我工作。
cnwbcb6i

cnwbcb6i5#

在我的例子中,问题是我使用RestAssured库编写测试,并对从API调用中获得的签名URL发出GET请求。URL将"<YOUR-AKID>/YYYYMMDD/REGION/SERVICE/aws4_request" url中的斜线编码,然后RestAssured将已经编码的URL中的百分比符号编码。所以我最终用%252F代替了%2F。我的解决方法是在将签名的URL传递给RestAssured之前对其进行解码。

given(requestSpec)
  .when()
  .get(URLDecoder.decode(s3SignedUrl, StandardCharsets.UTF_8))
9ceoxa92

9ceoxa926#

此外,得到了同样的错误,但问题是我交换了访问密钥和秘密密钥的值错误。

相关问题