Chef Vault 与 Test-Kitchen、Vagrant 和 Chef-Zero 供应商

Chef Vault with Test-Kitchen, Vagrant and Chef-Zero provisioner

我有一个使用 Test-Kitchen v1.5.0、Vagrant v1.8.1 的环境设置。我有一个使用 chef vault 来解密我们在 data_bags_path/passwords/pilot.json 文件中的加密密码的食谱。

我在这里 https://github.com/chef/chef-vault/issues/58 使用 daxgames 在页面末尾提供的解决方案。

我的.kitchen.yml:

---
driver:
  name: vagrant

provisioner:
  name: chef_zero
  require_chef_omnibus: 12.14.77
  roles_path: ../../roles
  environments_path: ../../environments
  data_bags_path: ../../data_bags
  client_rb:
    environment: lgrid2-dev
    node_name: "ltylapp400a"
    client_key: "/etc/chef/ltylapp400a.pem"

platforms:
  - name: centos-6.8
    driver:
    synced_folders:
      - ["/Users/212466756/.chef", "/etc/chef", "disabled:false"]

 suites:
   - name: ltylapp400a
     run_list:
       - role[lgrid-db]
     attributes:
       chef_client:

我的食谱中有关 chef-vault 的片段:

case node["customer_conf"]["status"]
when 'pilot'
  passwords = ChefVault::Item.load('passwords', 'pilot')
when 'production'
  passwords = ChefVault::Item.load('passwords', node[:hostname][1..3])
end

我的相关目录结构data_bags:

data_bags
  --passwords
     --pilot.json
     --pilot_keys.json

我收到的错误是我的 client.pem 是 vagrant 在 /etc/chef/ltylapp400a.pem 生成的,无法解密该数据包的内容。 Chef 建议我 运行 knife vault refresh,我没有连接到本地计算机上的 chef 服务器,所以如果我 运行 这会给出一个错误没有要连接的厨师服务器。我的问题是如何将 vagrant 生成的新密钥添加到 pilot_keys.json 以便它能够解密 data_bag?

回答越详细越好我对厨师、试厨等还是有些陌生...

我能够让这个工作,下面是我的结果和结论。如上所述,我的问题是我无法解密 data_bag,因为我无法将 vag运行t 创建的新密钥添加到 pilot_key.json 文件,因为我没有连接到厨师服务器,无法 运行 刀库 refresh/update. 我必须做的是从已经具有访问权限的服务器获取 client.pem 密钥到 pilot.json data_bag。我使用了我们的实用服务器密钥,因为它在不久的将来不会被销毁。

所以在我的本地 PC 上,我的主目录下有一个 .chef/ 目录,我有从实用程序服务器复制的 client.pem 密钥并同步这与 /tmp/kitchen/ 一起充当测试厨房环境中的 /etc/chef 目录。

---
driver:
  name: vagrant

provisioner:
  name: chef_zero
  require_chef_omnibus: 12.14.77
  roles_path: ../../roles
  environments_path: ../../environments
  data_bags_path: ../../data_bags
  client_rb:
    node_name: "utilityServer"
    client_key: "/tmp/kitchen/client.pem"       #The Chef::Vault needs a client.pem file to authenticate back to the data_bag to decrypt it, this needs to be stored at /tmp/kitchen/client.pem
    environment: dev
    no_proxy: 10.0.2.2

platforms:
  - name: centos-6.8
    driver:
      synced_folders:
        - ["~/.chef","/tmp/kitchen/","disabled:false"] # Allows the vagrant box to have  access to your .chef directory in your home directory. This is where you will store the client.pem for authentication.

suites:
  - name: lzzzdbx400a
    run_list:
      - role[lgrid-db]
attributes:

data_bags/passwords/pilot_key.json 看起来像这样:

{
 "id": "pilot_keys",
 "admins": [
   "utilityServer"
 ],
 "clients": [
   "webserver",
   "database"
 ],
 "search_query":"*:*"
 "utilityServer":"key",
 "webserver":"key",
 "database": "key"
 }

由于 utilityServer 密钥已经能够解密 passwords/pilot data_bag 它 运行 在下一次我 运行厨房收敛。

在之前与 Kitchen 和 chef-vault 斗争期间,我使用 synced_folders 方法访问密钥。重新访问这个主题我找到了另一个解决方案。

Kitchen Support To make this work in kitchen, just put a cleartext data bag in the data_bags folder that your kitchen run refers to (probably in test/integration/data_bags). Then the vault commands fall back into using that dummy data when you use chef_vault_item to retrieve it.

参考:http://hedge-ops.com/chef-vault-tutorial/