【Ruby】AWS S3へのクライアント側暗号化用のコマンドを作成しました
AWS SDK for Rubyを使ってS3へファイルをクライアント側で暗号化(Client Side Encryption)してアップロード,暗号化したファイルを復号化してダウンロードするためのコマンドを作りました.使う際はRubyGemsからインストールしてください. 前提として理解しておいてほしい情報と簡単にですが使い方をまとめました.
前提条件
Credentialsの設定
access_key_id
やsecret_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
の部分が参考になります.
簡単に流れを説明すると
- 暗号化のためのAES鍵を作成
- アップロードの際にその鍵で暗号化してアップロード
- ダウンロードの時も同じ鍵を使って復号化してダウンロード
といった感じです.
インストール方法,使い方など
GithubのREADMEを参考にしてください. https://github.com/nabewata07/encrypted_s3_copy/blob/master/README.md
インストール後の使い方を簡単に説明すると
- (AES鍵がすでにある場合は2.へ)
aes_key_gen
コマンドでAES鍵を作成.その際に-k
オプションで鍵ファイルのパスを指定 encrypt_s3_copy
コマンドで-s
オプションでアップロードしたいローカルファイルのパスを指定-d
オプションでアップロード先のS3のパスを指定 バケット名は省略できません- ダウンロードするときは2.と同様のコマンドで
-s
にS3のファイルパス,-d
にダウンロード先のローカルパスを指定してください
といった流れです.--recursive
オプションも用意しています.
RubyGemsのページはこちら https://rubygems.org/gems/encrypted_s3_copy