chefで共通cookbookつくったりしていると出てくるのがパスワード。ガチなパスワードな場合はEncrypted data bagsに入れるのがいいと思いますが、サーバ上には平文保存するようなちょっとしたものにはオーバースペック、というか面倒ですよね。
というわけで、ぱっと見でわからなくなる程度のライトなやつ。
ちなみに 英数字(小文字のみ) しか使えません!!
やりかた
パスワード文字列の難読化
シェルで難読化文字列を得ます。
get_encode_password
$ irb
irb(main):001:0> "password".to_i 36
=> 1982613533017
難読化したパスワードをattributeにセット
knife node edit
等でパスワードをattributeに入れます。
knife_node_edit
{
"name": "testserver01",
"chef_environment": "_default",
"normal": {
¦ "tags": [
¦ ],
¦ "yurui": {
¦ ¦ "password": 1982613533017
¦ }
},
"run_list": [
¦ "recipe[yurui::password]"
]
}
使うときに復号化
テンプレートファイルなどで以下のようにして復号化
sample_template
password=<%= node[:yurui][:password].to_s 36 %>
これだけでなんと不思議、元のパスワードが復号化されます。
attributeに難読化状態で入れておけば、cookbookやnodeのjsonファイルなどをgitに入れる段で難読化されるので、恥ずかしいパスワード文字列がぱっと見ではわからなくなります。
あとがき
data bags使うのめんどいなーと思いながらぐぐっていたときに発見したブログが元ネタです。
大文字が混ざっちゃってる場合は、一番楽なのはBase64とかでしょうか。
base64_sample
irb(main):001:0> require 'base64'
=> true
irb(main):002:0> encoded_pass = Base64.encode64('P@ssw0rd')
=> "UEBzc3cwcmQ=\n"
irb(main):003:0> decoded_pass = Base64.decode64('UEBzc3cwcmQ=\n')
=> "P@ssw0rd"