こんにちは! JQです。
前回は『Amazon S3編~Server Side Encryption~』ということで、S3でServer Side Encryptionを試してみました。
今回は『Amazon S3編~Client Side Encryption~』と題して、Ruby SDKでClient Side Encryptionを利用してみたいと思います。
Client Side Encryptionとは
Server Side Encryptionとは異なり、暗号化、復号化(復号)、鍵管理を自分で行う方法になります。
Ruby SDKでClient Side Encryptionを利用
サンプルを参考に作成
1. AWS Blogを参考に作成したスクリプトを実行してみます。
流れとしては以下のようになります。
① キーの発行
② 暗号化して「data」をオブジェクトへの書き込み
③ 復号化してファイルの取得
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#!/usr/bin/env ruby require 'rubygems' require 'aws-sdk' require 'openssl' AWS.config( :access_key_id => ' access key’, :secret_access_key => 'secret key' ) s3=AWS::S3.new bucket = " bucket name" key = "test.txt” data="Hello World" symmetric_key = OpenSSL::Cipher::AES256.new(:CBC).random_key options = { :encryption_key => symmetric_key } s3_object = AWS.s3.buckets[bucket].objects[key] s3_object.write(data, options) File.open('file.txt', 'wb') do |file| s3_object.read(options) do |chunk| file.write(chunk) end end |
成功すればS3にアップされたファイルでは暗号化されており、
ローカルに取得したファイルでは復号化されているかと思います。
キーの保存と読み込みバージョン
2. 次に、暗号化キーをファイルに保存して、それを読み込んで復号化するバージョンも試してみます。
「encrypt.key」というファイル名でキーを保存して、それを利用してS3にファイルを暗号化してアップします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#!/usr/bin/env ruby require 'rubygems' require 'aws-sdk' require 'openssl' AWS.config( :access_key_id => ' access key’, :secret_access_key => 'secret key' ) s3=AWS::S3.new bucket = " bucket name" key = "test.txt” data="Hello World" symmetric_key = OpenSSL::Cipher::AES256.new(:CBC).random_key File.open('encrypt.key', 'wb') do |file| file.write(symmetric_key) end options = { :encryption_key => symmetric_key } s3_object = AWS.s3.buckets[bucket].objects[key] s3_object.write(data, options) |
3. 次のスクリプトでは保存したキーを利用して、S3にアップしたファイルを復号化して取得します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#!/usr/bin/env ruby require 'rubygems' require 'aws-sdk' require 'openssl' AWS.config( :access_key_id => ' access key’, :secret_access_key => 'secret key' ) s3=AWS::S3.new bucket = " bucket name" key = "test.txt” symmetric_key = File.read("encrypt.key") options = { :encryption_key => symmetric_key } s3_object = AWS.s3.buckets[bucket].objects[key] File.open('file.txt', 'wb') do |file| s3_object.read(options) do |chunk| file.write(chunk) end end |
いかがでしたでしょうか?
注意点としては、キーを紛失した場合は復号化が出来なくなる為、気をつけましょう!
次回は『Amazon EC2編 ~ENI~』ということで、AmazonLinuxで複数のEIPを設定してみます。
お楽しみに!
——————————————————————————————————
ナレコムクラウドのFacebookに『いいね!』をクリックして頂くと
最新のお役立ちレシピが配信されます★
┏━━━━━━━━━━━━━┓
┃ナレコムクラウド Facebook┃
┗━━━━━━━━━━━━━┛
——————————————————————————————————