mitamae 向けの itamae-secrets を書いた

構成管理ツールを使う上で悩ましい問題として秘匿値の管理があり、それに対する解決策の一つとして itamae 向けには itamae-secrets というものがあった。 自分も秘匿値の管理にこの itamae-secrets を使っていたが、この度 mitamae に移行してみようと思い、mitamae で使える itamae-secrets として mitamae-secrets というものを書いた。

https://github.com/eagletmt/mitamae-secrets

mitamae-secrets の暗号化・復号を実装するためには OpenSSL が必要だが、mruby 向けの OpenSSL バインディングはまだ存在していないようだったので、必要な部分だけ OpenSSL の関数を使いながら C で実装する形にした。 EVP という高レベルの API をそのまま使えたので C 実装部分はわりとすっきり書けた。

mitamae で mitamae-secrets を使うには、まず mitamae を mitamae-secrets と一緒にビルドする必要がある。ここがちょっとめんどくさい点ではある。 自分の場合はこういう build_config.rb を用意してビルドした mitamae バイナリを使っている。 https://aur.archlinux.org/cgit/aur.git/tree/?h=mitamae

node[:secrets] = Itamae::Secrets::Store.new(path) と書いていたものを node[:secrets] = MitamaeSecrets::Store.new(path) に変えればだいたいそのまま動くと思う。 少なくとも自分の使い方ではそのまま動いている。 itamae-secrets set とか itamae-secrets newkey に使う itamae-secrets コマンドの代わりとなる mitamae-secrets コマンドも用意している。 ただし .itamae-secrets.yml を読む機能は現時点ではまだ実装してないので、とりあえず毎回 --base を明示するかんじで……

mitamae 移行の感想

既に itamae を使っているところから mitamae への移行を実際にやってみた感想としては、itamae-secrets 以外の点では Ruby と mruby の標準添付ライブラリの差が地味につらかった。 普通に Ruby を使っている itamae では IPAddr とか Digest とかが使えたのに、mitamae では使えない *1 ので、そこを書き直す必要があった。 個人の環境なのでそこまで大変ではなかったとはいえ無視できないコストはかかっていて、mitamae に移行するメリットが本当にあるのか今もちょっと疑問だけど、今後メリットを自分でも作っていきたい気持ちでしばらくは mitamae を使っていこうと思っている。 とりあえず、外部コマンドを実行しすぎで遅い問題を mitamae で解決していきたい……

*1:それぞれ mrbgem としては mruby-ipaddr や mruby-digest はあります