我正在尝试从生产服务器访问我的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)
})
感谢任何建议!
6条答案
按热度按时间dced5bon1#
这个答案很晚,但也许有人会发现它很有用。上述错误是在您切换
AWS KEY ID
和AWS ACCESS KEY
时引起的。在正确的地方使用正确的凭据,它应该可以解决您的问题。
uoifb46i2#
检查事项:
e37o9pze3#
因为错误提示凭据设置不正确。一个可能的原因(因为in在开发环境中工作)是配置变量access_key_id和secret_access_key可能是特定于环境的。
rks48beu4#
cnwbcb6i5#
在我的例子中,问题是我使用RestAssured库编写测试,并对从API调用中获得的签名URL发出GET请求。URL将
"<YOUR-AKID>/YYYYMMDD/REGION/SERVICE/aws4_request"
url中的斜线编码,然后RestAssured将已经编码的URL中的百分比符号编码。所以我最终用%252F
代替了%2F
。我的解决方法是在将签名的URL传递给RestAssured之前对其进行解码。9ceoxa926#
此外,得到了同样的错误,但问题是我交换了访问密钥和秘密密钥的值错误。