Мне кажется, что рекомендуемый способ добавления клиентов на сервер шеф-повара - или мое понимание этого - ошибочен.
При запуске chef-client проверяет, есть ли у него клиентский ключ. Если ключ клиента не существует, он затем пытается «позаимствовать» удостоверение клиента проверки, чтобы зарегистрироваться на сервере. Для этого закрытый ключ клиента проверки необходимо скопировать на хост и поместить в /etc/chef/validation.pem.
Таким образом, «ключ проверки» - это в основном учетные данные суперпользователя, позволяющие любому, кто владеет им, получить полный доступ к серверу Chef? Я правильно читаю?
Несомненно, правильная модель для клиентов - создать свою собственную пару ключей и отправить открытый ключ на сервер шеф-повара. Клиентам никогда не потребуется доступ к этому «ключу проверки» суперпользователя.
Как я могу сделать это более безопасным способом?
Это не так уж и небезопасно. Ключ проверки можно использовать только для пары операций, необходимых для добавления узла.
Например, если я попытаюсь удалить узел с помощью ключа проверки Chef:
$ knife node delete -y foo \
-u chef-validator \
-k ~/.chef/chef-validator.pem \
-s http://chef-server:4000
ERROR: You authenticated successfully to http://chef-server:4000 as chef-validator but you are not authorized for this action
Response: You are not the correct node (auth_user name: chef-validator, params[:id]: foo), or are not an API administrator (admin: false).
Лучше всего удалить файл validation.pem после того, как узел присоединится к серверу Chef.
Чтобы действительно ответить на вопрос, вы можете создать клиентские ключи, используя knife client create
команда, но вы должны передать эти ключи клиентам.
Безопасное распространение ключей - сложная проблема.