Amazon S3編~Client Side Encryption~

こんにちは! 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に『いいね!』をクリックして頂くと

最新のお役立ちレシピが配信されます★

┏━━━━━━━━━━━━━┓

┃ナレコムクラウド Facebook┃

┗━━━━━━━━━━━━━┛

——————————————————————————————————

この記事を書いた人

aws-recipe-user