はじめに
Embulk は「(IN)データ→変換→(OUT)データ」なバッチ処理を簡単に実現するbulk data loaderです。
ファイルを暗号化して欲しいと言われたので暗号化Zipを使ったら、
鍵の漏洩リスクを減らしたいので gpg のような仕組みで暗号化鍵と復号化鍵を別々にしたいと言われることがあります。 orz
いまいち PGP とか GPG とかしっかりと理解していないのですが、公開鍵のみを用いてファイルを暗号化するencoder pluginを作りました(この表現が正しいのかも少し自信がない...)。
※ ちなみに署名とかしていないからかdecryptしたときに警告が出ます。微妙だ。
Version
- Embulk: 0.7.4, 0.8.6
で動作確認しています。
Code
使い方
install
embulk gem install embulk-encoder-pgp_encryption
設定例
encoder plugin なので、 out
の配下に設定を書きます。
out:
encoders:
- type: pgp_encryption
public_key_ring: ./sample/pubring.gpg
key_name: mokemokechicken@example.com
type: file
path_prefix: ./path/to/output/data
file_ext: gpg
formatter:
type: csv
- public_key_ring: GPGなどの key ringファイルのPathを指定します
- key_name: key ringの中のどの鍵を使うか指定します(省略時には最初にみつかった鍵を指定します)。この指定は完全一致ではなく、部分一致です。見つかった最初の鍵を使います。
メモ
public_key_ring の値
gpg --list-keys
を実行したときに出てくるファイルへのPATHを指定します。 下記で言うと /Users/k_morishita/.gnupg/pubring.gpg
になります。
% gpg --list-keys
/Users/k_morishita/.gnupg/pubring.gpg
-------------------------------------
pub 2048R/59E5A4C4 2016-03-08
uid Yamada Taro (test user) <mokemokechicken@example.com>
sub 2048R/3623FEBE 2016-03-08
decrypt
出力されたファイルは 下記のコマンドで decryptできる形式になります。
% gpg -d sample/result000.00.csv.gpg
次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:“Yamada Taro (test user) <mokemokechicken@example.com>”
2048ビットRSA鍵, ID 59E5A4C4作成日付は2016-03-08
gpg: 2048-ビットRSA鍵, ID 59E5A4C4, 日付2016-03-08に暗号化されました
“Yamada Taro (test user) <mokemokechicken@example.com>”
id,account,time,purchase,comment
1,32864,2015-01-27 19:23:49.000000 +0000,2015-01-27 00:00:00.000000 +0000,embulk
2,14824,2015-01-27 19:01:23.000000 +0000,2015-01-27 00:00:00.000000 +0000,embulk jruby
3,27559,2015-01-28 02:20:02.000000 +0000,2015-01-28 00:00:00.000000 +0000,"Embulk ""csv"" parser plugin"
4,11270,2015-01-29 11:54:36.000000 +0000,2015-01-29 00:00:00.000000 +0000,NULL
gpg: 警告: メッセージの完全性は保護されていません
gpg: 警告: メッセージの完全性は保護されていません
と出力されるのが微妙な感じです。
さいごに
GPGとか懐かしい名前を久しぶりに聞いたなぁ・・・