3

最近aws-sdk (バージョン 2)にアップグレードする必要が生じるまで、私はmarcel/s3を使用してきました。

私たちが気付いた変更の 1 つは、例外が発生したため、有効期限が 1 週間を超える URL に署名できないようになったことです: ArgumentError: expires_in value of #{X} exceeds one-week maximum.

署名付き URL を作成できるONE_WEEK 定数をオーバーライドしてみました。問題は、取得した URL を curl すること400ですX-Amz-Expires must be less than a week (in seconds); that is, the given X-Amz-Expires must be less than 604800 seconds

aws-sdk v2を使用して 1 週間以上 URL に署名するにはどうすればよいmarcel/s3ですか? aws-sdk v1これを達成するために代替手段に切り替えていますか?

各ライブラリによって生成される URL の違いは次のとおりです。

  • marcel-s3:およびをクエリ パラメータとして使用しますAWSAccessKeyIdExpiresSignature
  • aws-sdk v2: 、、、、およびをクエリパラメータとして使用しますX-Amz-AlgorithmX-Amz-CredentialX-Amz-DateX-Amz-ExpiresX-Amz-SignedHeadersX-Amz-Signature
4

1 に答える 1

0

aws-sdk の v1 を (他のものには v2 と共に) 使用するとうまくいきました。サンプルコード:

def url s3_key, public_path=false
  s3 = AWS::S3.new # aws-sdk v1 s3 client
  v1_obj = s3.buckets[BUCKET_NAME].objects[s3_key]
  if public_path
    v1_obj.public_url.to_s
  else
    v1_obj.url_for(:read, expires: (2.weeks.since - Time.now).to_i).to_s
end
于 2016-02-04T15:33:59.707 に答える