Хранить пароли в Chef? - PullRequest
       0

Хранить пароли в Chef?

53 голосов
/ 13 декабря 2010

Как лучше хранить пароль и ключи API с помощью Chef? Действительно заманчиво хранить пароли базы данных, API-ключи AWS и другие конфиденциальные учетные данные в качестве атрибутов Chef Server для использования в рецептах - но как насчет соображений безопасности? Какая лучшая практика для этого?

Ответы [ 9 ]

27 голосов
/ 19 января 2011

На IRC-канале #chef многие люди хранят данные такого типа в сумке данных на сервере chef.

Например, сумкой данных может быть «aws» с элементом «main», ссылаясь на основной аккаунт AWS.Отдельные ключи в элементе будут для каждого конкретного значения.Например:

{
  "id": "main",
  "aws_secret_key": "The secret access key",
  "aws_access_key": "The access key"
}

Вас также могут заинтересовать зашифрованные пакеты данных .Я написал о них более подробно для управления постфиксной аутентификацией SASL .

Обновление : я написал сообщения в блоге о Chef Vault on мой блог и sysadvent .

13 голосов
/ 22 февраля 2012

Этот вопрос старый и не имеет принятого ответа, однако правильный ответ на этот вопрос заключается в том, что Chef позволяет использовать Зашифрованные пакеты данных для хранения конфиденциальных данных в Пакеты данных .

4 голосов
/ 26 апреля 2016

Я думаю, что Хранилище Хашикорпа действительно многообещающе как способ динамического извлечения зашифрованной информации и оставления некоторых странностей рабочего процесса шеф-повара в этой области.

Это интересный пост, который начинает затрагивать тему.https://www.hashicorp.com/blog/using-hashicorp-vault-with-chef.html

2 голосов
/ 20 октября 2014

Chef Vault может быть хорошим выбором.Предоставляет простой интерфейс для хранения зашифрованных данных на chef-сервере, управления доступом.Загружайте, редактируйте, обновляйте данные с помощью команд knife vault ....

Для получения данных из рецепта используйте команду ChefVault::Item.load

chef_gem "chef-vault"
require 'chef-vault'
item = ChefVault::Item.load("passwords", "root")
item["password"]

Для настройки пользователей, которые могут обновлять данные, используйте нож vault_adminsсобственность.

knife[:vault_admins] = [ 'example-alice', 'example-bob', 'example-carol' ]
2 голосов
/ 22 октября 2013

Chef Encrypted data_bags - действительно законное решение. Кроме того, вы также можете использовать рубиновый самоцвет, который позволяет шифровать элемент мешка данных Chef, используя открытые ключи списка узлов chef. Это позволяет только тем узлам chef расшифровывать зашифрованные значения. ср https://github.com/Nordstrom/chef-vault

1 голос
/ 20 мая 2017

Лучше всего хранить ключи и пароли в chef data_bags.Пакет данных содержит элементы пакета данных.Отдельный элемент data_bag представлен в формате json.

Например:

{
  /* This is a supported comment style */
  // This style is also supported
  "id": "ITEM_NAME",
  "key": "value"
}

Шифровать элемент мешка данных: Элемент мешка данных может быть зашифрован с использованием общего секретного шифрования.Это позволяет каждому элементу пакета данных хранить конфиденциальную информацию (например, пароль базы данных или ключи ssh) или управляться в системе контроля версий (без данных в текстовом виде, появляющихся в истории изменений).Это можно сделать следующим образом:

Crete Secret Keys: Создать секретный ключ с именем encrypted_data_bag_secret, например,

$ openssl rand -base64 512 | tr -d '\r\n' > encrypted_data_bag_secret

, где encrypted_data_bag_secret - это имя файла, который будетсодержит секретный ключ

Шифрование data_bag: Элемент пакета данных шифруется с помощью команды ножа, подобной:

$ knife data bag create passwords mysql --secret-file /tmp/my_data_bag_key

где «passwords» - это имяпакет данных, «mysql» - это имя элемента пакета данных, а «/ tmp / my_data_bag_key» - это путь к папке, в которой находится файл, содержащий секретный ключ

Проверка шифрования: Когда содержимое элемента пакета данных зашифровано, оно не будет доступно для чтения, пока не будет расшифровано.Шифрование можно проверить с помощью команды ножа, аналогичной:

$ knife data bag show passwords mysql

Расшифровка пакета данных: Зашифрованный элемент пакета данных расшифровывается с помощью команды ножа, аналогичной:

$ knife data bag show --secret-file /tmp/my_data_bag_key passwords mysql
1 голос
/ 05 июля 2016

В настоящее время наиболее широко используемым подходом и в большинстве случаев достаточно безопасным является использование chef-vault.

Он использует общий секрет для шифрования ваших данных (аналогично зашифрованному chef-пакету). Этот общий секрет зашифрован для каждого клиента и / или пользователя, который будет его использовать (если Вы разрешите его использовать).

Преимущества:

  • в тестовой среде вы можете использовать незашифрованные данные
  • Нельзя хранить общий секрет в виде простого текста
  • Можно предоставить доступ лишь немногим из их серверов для чтения и записи некоторых пакетов данных

Пример

export EDITOR=vi #sets your favourite text editor 

knife vault create secret_data john_doe  --admins "admin" --search "*:*" --mode client 

Команда выше создает в secret_data элемент базы данных: john_doe, который может быть изменен на admin и использоваться всеми клиентами. После этого откроется команда EDITOR, чтобы вы могли ввести o вставить свои секретные данные (в формате json).

Поисковый запрос может быть: "role:basic" - Это означает, что только серверы с ролью basic могут читать эти данные. knife vault нужна дополнительная установка

В вашей кулинарной книге

chef_gem 'chef-vault' do
    compile_time true if respond_to?(:compile_time)
end

require 'chef-vault'

item = ChefVault::Item.load("secret_data", "john_doe")
item["password"]

и metadata.rb: depends 'chef-vault', '1.3.0'

подробнее здесь: https://blog.chef.io/2016/01/21/chef-vault-what-is-it-and-what-can-it-do-for-you/

и здесь: https://github.com/chef/chef-vault

1 голос
/ 09 апреля 2011

Я никогда не пробовал пакеты данных, но это, вероятно, потому что я нахожу все, кроме chef-solo, слишком сложным. Вот почему я использую рецепты от шеф-повара с сервисом Scalarium .

Так что проблема с паролями или, например, закрытые ключи и все другие учетные данные довольно сложны. У меня тоже есть куча рецептов, где пароли нужно создавать или устанавливать правильно.

Обычно я задаю то, что скаляры называют custom json . Этот json похож на node.json, который некоторые люди дают шеф-повару, используя chef-solo -j node.json.

Так, например, в моем настраиваемом json в веб-интерфейсе Scalarium у меня есть следующее:

{"super_secure_password":"foobar"}

Для этого мой суперзащищенный пароль 1019 * доступен во время работы моего шеф-повара в node[:super_secure_password], и я могу использовать его в рецептах или шаблонах.

Это прекрасно работает, пока я развертываю свой сервер только с помощью Scalarium, но мы также используем наши рецепты в локальных бродячих коробках для среды разработки и более простого тестирования. И когда я использую vagrant (или даже сам по себе chef-solo), у меня нет доступа к custom json в Scalarium.

Это то, что я делаю, чтобы исправить это, в my_recipe/attributes/default:

set_unless[:super_secure_password] = "test123"

Это означает, что когда мой рецепт запускается вне скалярия, пароль все еще доступен в node[:super_secure_password], и мои рецепты работают и так далее. Когда рецепт выполняется в контексте скалярия, он не будет переопределять то, что они предоставляют.

0 голосов
/ 08 сентября 2015

Я бы предложил использовать роль IAM с обеспечением шеф-повара.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...