頭の整理

JavaScript, Ruby, RSpec, Node.js, Rails TDDなどに興味があるWeb系SEが学んだことを整理していきます

【Ruby】AWS S3へのクライアント側暗号化用のコマンドを作成しました

AWS SDK for Rubyを使ってS3へファイルをクライアント側で暗号化(Client Side Encryption)してアップロード,暗号化したファイルを復号化してダウンロードするためのコマンドを作りました.使う際はRubyGemsからインストールしてください. 前提として理解しておいてほしい情報と簡単にですが使い方をまとめました.

前提条件

Credentialsの設定

access_key_idsecret_access_key_idなどのAWSのCredentialsはEC2インスタンスのロールや,環境変数などにすでに与えられている必要があります.

この辺を参考にしてください. http://docs.aws.amazon.com/AWSSdkDocsRuby/latest//DeveloperGuide/prog-basics-creds.html http://docs.aws.amazon.com/AWSSdkDocsRuby/latest/DeveloperGuide/ruby-dg-roles.html

S3へのアクセスコントロールの制御

アクセス制限などを担保するものではないため,そこはバケットポリシーやIAMへの権限付与などで適切に行なってください.あくまでもS3へアップロードする際にそのデータを暗号化してアップロードしてそれをダウンロードするためのものです.

S3のアクセスコントロールに関してはこちらのエントリにわかりやすくまとめられています. S3のアクセスコントロールまとめ

Client Side Encryptionに関して

AWS SDK for RubyだとこちらのドキュメントのClient Side Encryptionの部分が参考になります. 簡単に流れを説明すると

  1. 暗号化のためのAES鍵を作成
  2. アップロードの際にその鍵で暗号化してアップロード
  3. ダウンロードの時も同じ鍵を使って復号化してダウンロード

といった感じです.

インストール方法,使い方など

GithubのREADMEを参考にしてください. https://github.com/nabewata07/encrypted_s3_copy/blob/master/README.md

インストール後の使い方を簡単に説明すると

  1. (AES鍵がすでにある場合は2.へ) aes_key_genコマンドでAES鍵を作成.その際に-kオプションで鍵ファイルのパスを指定
  2. encrypt_s3_copyコマンドで-sオプションでアップロードしたいローカルファイルのパスを指定 -dオプションでアップロード先のS3のパスを指定 バケット名は省略できません
  3. ダウンロードするときは2.と同様のコマンドで-sにS3のファイルパス,-dにダウンロード先のローカルパスを指定してください

といった流れです.--recursiveオプションも用意しています.

RubyGemsのページはこちら https://rubygems.org/gems/encrypted_s3_copy