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 для их получения.

ссылка: http://hedge-ops.com/chef-vault-tutorial/

Другие вопросы по тегам