Хранение паролей в Chef?

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


person erikcw    schedule 12.12.2010    source источник
comment
Почему за этот вопрос проголосовали? Это похоже на законную проблему.   -  person erikcw    schedule 13.12.2010
comment
Вероятно, потому что кто-то подумал, что это происходит с ServerFault, поскольку это не связано с программированием.   -  person jtimberman    schedule 26.12.2010


Ответы (9)


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

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

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

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

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

person jtimberman    schedule 19.01.2011

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

person warwickp    schedule 22.02.2012
comment
Разве Ной не пренебрегал криптомешками в coderanger.net/data-bags как Code Smell? (TL;DR — вам придется поделиться секретом, чтобы увидеть секреты) - person user2066657; 15.05.2018

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

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

person Ross Edman    schedule 26.04.2016

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

Например:

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

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

Секретные ключи Крита: создайте секретный ключ с именем, например, encrypted_data_bag_secret.

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

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

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

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

где «пароли» — это имя пакета данных, «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
person Innocent Anigbo    schedule 20.05.2017

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

person Francois    schedule 22.10.2013
comment
chef-vault — отличный способ безопасного хранения паролей! - person StephenKing; 22.10.2013

Chef Vault может быть хорошим выбором. Предоставляет простой интерфейс для хранения зашифрованных данных на шеф-сервере, управления доступом. Загружайте, редактируйте, обновляйте данные с помощью 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' ]
person yurinnick    schedule 19.10.2014

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

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

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

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

{"super_secure_password":"foobar"}

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

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

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

set_unless[:super_secure_password] = "test123"

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

person Till    schedule 09.04.2011
comment
Эта услуга была прекращена. - person StephenKing; 13.11.2015

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

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

Выгоды:

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

Пример

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, чтобы вы могли ввести или вставить свои секретные данные (в 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

person MAXIDAVIDPL    schedule 05.07.2016

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

require 'chef/provisioning/aws_driver'
iam = AWS::Core::CredentialProviders::EC2Provider.new
puts iam.credentials.inspect
with_driver(
  'aws:IAM:eu-west-1',
  :aws_credentials => { 'IAM' => iam.credentials }
)
person nitheeshp    schedule 08.09.2015