目的
- chefのdata bagを利用して、ID/PWといった秘匿すべき情報をrecipeに含める。
- knife soloから暗号化されたdata bag を利用するため、knife-solo_data_bagを利用する。
実行
準備
- knife solo で利用できるencrypted databagの設定が別途必要。gemをつかってknife-solo_data_bagをインストールする。
$ gem install knife-solo_data_bag
- 秘密鍵の作成と設定を行う。
$ mkdir data_bag_key
$ cd data_bag_key
$ openssl rand -base64 512 > secret_key
## 作成したkeyは他の場所に保管しておくこと
.chef/knife.rb
cookbook_path ["cookbooks", "site-cookbooks"]
node_path "nodes"
role_path "roles"
environment_path "environments"
data_bag_path "data_bags"
encrypted_data_bag_secret "data_bag_key/secret_key" // これを追加
knife[:berkshelf_path] = "cookbooks"
- knife soloのEDITORを設定する。
$ export EDITOR=emacs # 適当なEDITORを指定しておく
data bag の作成
- data bagの編集を開始。今回は"passwords"の"wordpress"を作成。編集時は平文だが、保存したファイルにはencryptedなデータが保存される。生成されるdata bagファイルは直接編集できないことに注意。更新もknife soloからとなる。
# 下記コマンドの実行で指定のEDITORがOpen
$ knife solo data bag create passwords wordpress # 作成
$ knife solo data bag edit passwords wordpress # 編集の場合こちら
wordpress.json_opened_by_EDITOR
{
"id": "wordpress",
"user": "your name",
"password": "your password"
}
data bagの利用
- 以下のようにrecipesなどから定義したdata bagを利用する(1行目で取り出し→その後は利用例)。
ex)attribute/default.rb
wordpress = Chef::EncryptedDataBagItem.load("passwords", "wordpress")
override['wordpress']['db']['name'] = "wordpress"
override['wordpress']['db']['user'] = wordpress['user']
override['wordpress']['db']['pass'] = wordpress['password']