こんにちは! 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#!/usr/bin/env ruby23require 'rubygems'4require 'aws-sdk'5require 'openssl'67AWS.config(8 :access_key_id => ' access key’,9 :secret_access_key => 'secret key'10)1112s3=AWS::S3.new13bucket = " bucket name"14key = "test.txt”15data="Hello World"1617symmetric_key = OpenSSL::Cipher::AES256.new(:CBC).random_key1819options = { :encryption_key => symmetric_key }20s3_object = AWS.s3.buckets[bucket].objects[key]2122s3_object.write(data, options)2324File.open('file.txt', 'wb') do |file|25 s3_object.read(options) do |chunk|26 file.write(chunk)27 end28end成功すればS3にアップされたファイルでは暗号化されており、
ローカルに取得したファイルでは復号化されているかと思います。
キーの保存と読み込みバージョン
2. 次に、暗号化キーをファイルに保存して、それを読み込んで復号化するバージョンも試してみます。
「encrypt.key」というファイル名でキーを保存して、それを利用してS3にファイルを暗号化してアップします。
1#!/usr/bin/env ruby23require 'rubygems'4require 'aws-sdk'5require 'openssl'67AWS.config(8 :access_key_id => ' access key’,9 :secret_access_key => 'secret key'10)1112s3=AWS::S3.new13bucket = " bucket name"14key = "test.txt”15data="Hello World"1617symmetric_key = OpenSSL::Cipher::AES256.new(:CBC).random_key18File.open('encrypt.key', 'wb') do |file|19 file.write(symmetric_key)20end2122options = { :encryption_key => symmetric_key }23s3_object = AWS.s3.buckets[bucket].objects[key]2425s3_object.write(data, options)3. 次のスクリプトでは保存したキーを利用して、S3にアップしたファイルを復号化して取得します。
1#!/usr/bin/env ruby23require 'rubygems'4require 'aws-sdk'5require 'openssl'67AWS.config(8 :access_key_id => ' access key’,9 :secret_access_key => 'secret key'10)1112s3=AWS::S3.new13bucket = " bucket name"14key = "test.txt”1516symmetric_key = File.read("encrypt.key")17options = { :encryption_key => symmetric_key }18s3_object = AWS.s3.buckets[bucket].objects[key]1920File.open('file.txt', 'wb') do |file|21 s3_object.read(options) do |chunk|22 file.write(chunk)23 end24endいかがでしたでしょうか?
注意点としては、キーを紛失した場合は復号化が出来なくなる為、気をつけましょう!
次回は『 Amazon EC2編 ~ENI~ 』ということで、AmazonLinuxで複数のEIPを設定してみます。
お楽しみに!
——————————————————————————————————
ナレコムクラウドのFacebookに『いいね!』をクリックして頂くと
最新のお役立ちレシピが配信されます★
——————————————————————————————————