Подтвердить что ты не робот

Хранение паролей в шеф-поваре?

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

4b9b3361

Ответ 1

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

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

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

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

Обновление: я написал сообщения в блоге о Шеф-повар на мой блог и sysadvent.

Ответ 2

Этот вопрос старый и не имеет принятого ответа, однако правильный ответ на этот вопрос заключается в том, что Шеф позволяет использовать Encrypted Data Bags для хранения конфиденциальных данных в Data Bags.

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

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

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

{"super_secure_password":"foobar"}

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

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

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

set_unless[:super_secure_password] = "test123"

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

Ответ 6

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

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

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

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

knife[:vault_admins] = [ 'example-alice', 'example-bob', 'example-carol' ]

Ответ 7

Я бы предложил использовать роль 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 }
)

Ответ 8

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

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

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

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

Пример

export EDITOR=vi #sets your favourite text editor 

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

Команда выше создает в элементе secret_data databag: 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

Ответ 9

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

Для exmaple:

{
  /* 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

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

Шифровать data_bag: Элемент пакета данных зашифрован с использованием команды ножа, аналогичной:

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

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

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

$ knife data bag show passwords mysql

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

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