S3の署名バージョンをアップデートさせる
「Amazon S3 における AWS 署名バージョン 2 の廃止」
先日このような記事が出て、このままでは古い環境でS3へのアクセスができなくなる可能性があるため、回収を行いました。
詳しくはこちらを御覧ください
【超重要】対応しないと使えなくなるかも?!今、全S3ユーザがチェックすべき署名バージョン2の廃止について | DevelopersIO
環境はrailsでまさかの ruby-version 2.2.1
まずはrubyのアップデートをしろよ!!というツッコミも多いかと思いますが、
今回はS3の部分のみアップデートしていきます。
元のGEMバージョンはそれぞれ
Gemfile
gem 'paperclip', '~> 4.2'
Gemfile.lock
json (~> 1.4)
nokogiri (>= 1.4.4)
paperclip (4.3.0)
activemodel (>= 3.2.0)
activesupport (>= 3.2.0)
今までこのようにしていた指定をこのように変更致しました。
Gemfile
gem 'paperclip', '~> 6'
Gemfile.lock
aws-eventstream (1.0.2)
aws-partitions (1.144.0)
・・・・
paperclip (6.1.0)
activemodel (>= 4.2.0)
activesupport (>= 4.2.0)
rails部分の変更は下記のようになりました。
【アップロード】
変更前
AWS.config(
access_key_id: [access_key_id],
secret_access_key: [secret_access_key],
region: 'ap-northeast-1' )
s3 = AWS::S3.new
upload_file_name = "hoge"
file = s3.bucketsbucket.objects[upload_file_name]
s3_object = file.write(file: params['hoge_img'].tempfile)
変更後
::Aws.config = {
access_key_id: [access_key_id],
secret_access_key: [secret_access_key],
}
s3 = ::Aws::S3::Client.new(:region => 'ap-northeast-1')
upload_file_name = "hoge"
s3.put_object(
:key => upload_file_name,
:body => params['estimate_pdf'].tempfile
)
【ダウンロード】
変更前
AWS.config(
access_key_id: [access_key_id],
secret_access_key: [secret_access_key],
region: 'ap-northeast-1'
)
s3 = AWS::S3.new
file_name = 'hoge'
file = s3.bucketsbucket.objects[file_name]
send_data file.read, filename: params[:file_name], disposition: 'attachment', stream: 'true', buffer_size: '4096'
変更後
::Aws.config = {
access_key_id: [access_key_id],
secret_access_key: [secret_access_key],
}
s3 = ::Aws::S3::Client.new(:region => 'ap-northeast-1')
file_name = 'hoge'
object = s3.get_object({ :bucket => [bucket], :key => file_name, })
send_data object.body.read, filename: params[:file_name], disposition: 'attachment', stream: 'true', buffer_size: '4096'
もっとよい書き方があったら、教えていただきたいです。