Chef Vault с провайдером Test-Kitchen, Vagrant и Chef-Zero
У меня есть настройка среды с Test-Kitchen v1.5.0, Vagrant v1.8.1. У меня есть рецепт, который использует хранилище chef для расшифровки наших зашифрованных паролей, которые есть в нашем файле 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:
Отрывок из моего рецепта, касающийся шеф-хранилища:
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 предлагает мне запустить обновление хранилища ножей, я не подключен к своему серверу chef на моей локальной машине, поэтому, если я запусту его, это выдаст ошибку об отсутствии сервера chef для подключения. У меня вопрос, как я могу добавить свой новый ключ, сгенерированный vagrant, в pilot_keys.json, чтобы он мог расшифровать этот data_bag?
Чем больше подробных ответов, тем лучше я еще новичок в шеф-поваре, тест-кухне и т. Д.
2 ответа
Я смог заставить это работать, ниже приведены мои результаты и выводы. Как я уже говорил выше, моя проблема была в том, что я не смог расшифровать data_bag, так как я не мог добавить новый ключ, созданный vagrant, в файл pilot_key.json, так как я не был подключен к серверу chef и не мог запустить обновление / обновление хранилища ножей, Мне нужно было получить ключ client.pem с сервера, который уже имел доступ к pilot.json data_bag. Я использовал наш ключ служебного сервера, так как он не будет уничтожен в ближайшем будущем.
Итак, на моем локальном ПК у меня есть каталог.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 уже был способен расшифровать пароли / пилот-данные data_bag, он отлично прошел через следующий раз, когда я запустил кухонную конвергенцию.
Во время предыдущих битв с Kitchen и chef-vault я использовал метод synced_folders для доступа к ключу. Пересмотрев эту тему я нашел другое решение.
Поддержка кухни Чтобы это работало на кухне, просто поместите пакет с открытым текстом в папку data_bags, к которой относится ваша кухня (вероятно, в test /gration/data_bags). Затем команды хранилища возвращаются к использованию этих фиктивных данных, когда вы используете chef_vault_item для их получения.