Techioz Blog

AWS と Rails: 認証ヘッダーの形式が正しくありません。資格情報の形式が正しくありません

概要

運用サーバーから 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)
})

アドバイスをよろしくお願いします!

解決策

この回答は非常に遅れていますが、誰かが役立つと思うかもしれません。上記のエラーは、AWS KEY ID と AWS ACCESS KEY を切り替えるときに発生します。

適切な場所で正しい資格情報を使用すると、問題が解決されるはずです。