Мои EDB разделены:
- окружающая обстановка
- роль
Мы загружаем все ключи со специальным суффиксом в каждый новый экземпляр EC2, когда загружаем его, а затем удаляем все ключи, которые не использовались ни одним из рецептов в run_list в конце первого запуска chef-client (который будет прямо как экземпляр начинается.)
Все файлы загружаются как владелец и группа "root" и имеют только права на чтение.
Каждый рецепт, который использует EDB, генерирует имя EDB и имя файла ключа во время выполнения рецепта, объединяя 'edb_' + окружение узлов + имя конкретного рецепта / элемента + '.key', а затем ищет ключ с этим именем , (Если он не существует, по умолчанию выдается исключение.)
Таким образом, для нашего сервера couchdb, выполняющего роль под названием «couch», для получения учетных данных, которые мы используем для администраторов (пользователей) в среде dev, рецепт ищет ключ с именем «edb_dev_couch.key».
Затем он ищет в пакете данных с именем «edb_dev» предмет с именем «couch_credentials».
Для управления ключами в настоящее время я использую простой подход:
- загрузить все ключи EDB через скрипт начальной загрузки и добавить '_x' к именам ключей
- Попросите каждый рецепт, использующий EDB, найти в каталоге ключей нужный ключ.
- если ключ существует с суффиксом «_x», переименуйте ключ, чтобы удалить суффикс «_x».
- добавить рецепт в конце каждого run_list, который удаляет все ключи с суффиксом _x
Надеемся, что это ограничивает время, в течение которого ключи вне области действия одного узла восприимчивы до тех пор, пока машина не будет загружена и не выполнит первый запуск chef_client.
Это наш первый раунд тестирования защиты ключей, но пока он отвечает нашим текущим потребностям, поскольку не позволяет одному корневому dev-серверу иметь возможность немедленного доступа к любым другим учетным данным сервера, хранящимся в EDB.
Чтобы сохранить один рецепт в конце каждого списка выполнения, я использую задание exec, которое гарантирует, что этот рецепт delete_keys является точно последним рецептом на каждом узле.