web-dev-qa-db-ja.com

Ruby)でS3バケットへの署名付きURLを生成するための推奨される方法

ブラウザがS3にアップロードできるように、Railsサーバーで事前に署名されたURLを生成してブラウザに送信しようとしています。

aws-sdk-s3は今後使用する宝石のようです。しかし、残念ながら、私は明確さを提供する宝石のドキュメントに出くわしていません。そうするためのいくつかの異なる方法があるようです、そして以下の方法の違いについてのガイダンスをいただければ幸いです-

  1. Aws::S3::Presigner.newを使用する( https://github.com/aws/aws-sdk-Ruby/blob/master/aws-sdk-core/lib/aws-sdk-core/s3/presigner.rb )しかし、オブジェクトパラメーターまたは認証資格情報を取り込んでいないようです。

  2. Aws::S3::Resource.newを使用していますが、aws-sdk-resourcesは維持されないようです。 ( https://aws.Amazon.com/blogs/developer/upgrading-from-version-2-to-version-3-of-the-aws-sdk-for-Ruby-2/

  3. Aws::S3::Object.newを使用してから、そのオブジェクトでputメソッドを呼び出します。

  4. AWS::SigV4を直接使用します。

私はそれらがどのように異なるのか、そしてどちらかを選択することの意味を疑問に思っていますか?特にaws-sdk-s3の場合、推奨事項は大歓迎です。

ありがとうございました!

8
geoboy

したがって、上記の@strognjzによるヒントのおかげで、これが `aws-sdk-s3 'を使用して私のために働いたものです。

require 'aws-sdk-s3'

#credentials below for the IAM user I am using
s3 = Aws::S3::Client.new(
  region:               'us-west-2', #or any other region
  access_key_id:        AWS_ACCESS_KEY_ID,
  secret_access_key:    AWS_SECRET_ACCESS_KEY
)

signer = Aws::S3::Presigner.new(client: s3)
url = signer.presigned_url(
  :put_object,
  bucket: S3_BUCKET_NAME,
  key: "${filename}-#{SecureRandom.uuid}"
)
14
geoboy

これは、aws-sdk-s3gemを使用して機能します

aws_client = Aws::S3::Client.new(
  region:               'us-west-2', #or any other region
  access_key_id:        AWS_ACCESS_KEY_ID,
  secret_access_key:    AWS_SECRET_ACCESS_KEY
)


s3 = Aws::S3::Resource.new(client: aws_client)
bucket = s3.bucket('bucket-name')
obj = bucket.object("${filename}-#{SecureRandom.uuid}")

url = obj.presigned_url(:put)

追加のhttp動詞:

obj.presigned_url(:put)                              
obj.presigned_url(:head)                    
obj.presigned_url(:delete)
10
csebryam