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.
我有一个使用 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.