2

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

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

我的.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:

我的食谱中涉及厨师保险库的片段:

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

我得到的错误是我的 vagrant 在 /etc/chef/ltylapp400a.pem 生成的 client.pem 无法解密该数据包的内容。厨师建议我运行刀库刷新,我没有连接到我本地机器上的厨师服务器,所以如果我运行它,它会给出一个关于没有厨师服务器连接的错误。我的问题是如何将 vagrant 生成的新密钥添加到 Pilot_keys.json 中,以便它能够解密该 data_bag?

更详细的答案更好我对厨师,测试厨房等还是有点陌生​​......

4

2 回答 2

1

我能够做到这一点,以下是我的结果和结论。正如我上面所说,我的问题是我无法解密 data_bag,因为我无法将 vagrant 创建的新密钥添加到 Pilot_key.json 文件中,因为我没有连接到厨师服务器并且无法运行刀库刷新/更新. 我必须做的是从已经可以访问 Pilot.json data_bag 的服务器获取 client.pem 密钥。我使用了我们的实用程序服务器密钥,因为它不会在不久的将来被销毁。

因此,在我的本地 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"
 }

由于实用程序服务器密钥已经能够解密密码/飞行员data_bag,它在我下次运行厨房收敛时运行良好。

于 2016-10-11T13:36:31.067 回答
0

在之前与 Kitchen 和 chef-vault 的斗争中,我使用了 synced_folders 方法来访问密钥。重温这个话题,我找到了另一个解决方案。

厨房支持 要在厨房中进行这项工作,只需将明文数据包放在您的厨房运行所指的 data_bags 文件夹中(可能在 test/integration/data_bags 中)。然后,当您使用 chef_vault_item 检索该虚拟数据时,Vault 命令会退回到使用该虚拟数据。

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

于 2017-01-23T11:39:15.180 回答