【问题标题】:AWS and Rails: The authorization header is malformed; the Credential is mal-formedAWS 和 Rails:授权标头格式错误;凭证格式错误
【发布时间】:2022-02-02 03:58:33
【问题描述】:

我正在尝试从生产服务器访问我的 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)
})

感谢任何建议!

【问题讨论】:

  • 找到一种方法来查看正在发送的实际请求。此时解决方案应该很直观。

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


【解决方案1】:

这个答案很晚,但也许有人会发现它很有用。上述错误是在您切换AWS KEY IDAWS ACCESS KEY 时引起的。

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

【讨论】:

  • 非常感谢!我将密钥用于登录和秘密。
【解决方案2】:

检查事项:

  • 存储桶 ACL 和存储桶策略。生产与开发匹配吗?
  • 您的任何键是否包含可能被错误解析的斜杠?
  • 您的开发和生产区域是否不同?如果您尝试不同的地区,会有什么不同吗?

【讨论】:

  • 亚马逊生成的密钥不是 URL 安全的,这让我难以置信。
  • 如果密钥包含斜线,您能否告诉别人应该怎么做?
【解决方案3】:

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

【讨论】:

  • 感谢您的采纳,但这绝对不是问题,因为我可以从 prod 控制台看到 aws vars。
【解决方案4】:

适用于 Windows 用户 即使复制了正确的凭据,我也一遍又一遍地遇到同样的问题。原来 Windows Bash 不接受 CTRL+C 和 CTRL+V 进行复制和粘贴。只有右键单击和复制粘贴选项对我有用。

【讨论】:

    【解决方案5】:

    另外,出现同样的错误,但问题是我错误地交换了访问密钥和秘密密钥的值。

    【讨论】:

    • 顶级评论的重复。
    猜你喜欢
    • 2021-08-19
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2020-03-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多