Spec-Zone.ru › Chef 18

Безопасность клиента Chef Infra

[править на GitHub]

API сервера Chef Infra обрабатывает все коммуникации между клиентом Chef Infra или рабочей станцией Chef. API сервера Chef Infra — это аутентифицированный REST API, что означает, что все запросы требуют аутентификации и авторизации. Инструменты Chef Infra, такие как команды knife и chef-server, используют API сервера Chef Infra за вас.

Аутентификация

Процесс аутентификации гарантирует, что сервер Chef Infra отвечает только на запросы от доверенных пользователей или клиентов. Сервер Chef Infra использует шифрование с открытым ключом. Вы создаете открытый и закрытый ключи при настройке клиента Chef Infra или настройке рабочей станции Chef.

  • Сервер Chef Infra хранит открытый ключ
  • Рабочая станция сохраняет закрытый ключ в ~/.chef/
  • Клиент Chef Infra сохраняет закрытый ключ в /etc/chef

Как клиент Chef Infra, так и рабочая станция Chef взаимодействуют с сервером Chef Infra с помощью API сервера Chef Infra. Каждый раз, когда клиент Chef Infra или рабочая станция отправляют запрос на сервер Chef Infra, они используют специальный набор HTTP-заголовков и подписывают остальную часть запроса с помощью своего закрытого ключа. Сервер Chef Infra затем использует открытый ключ для проверки заголовков и содержимого.

chef-validator

Каждый запрос, отправленный клиентом Chef Infra на сервер Chef Infra, должен быть аутентифицированным запросом через API сервера Chef Infra и закрытый ключ. Когда клиент Chef Infra отправляет запрос на сервер Chef Infra, он аутентифицирует каждый запрос с помощью закрытого ключа, расположенного в /etc/chef/client.pem.

Закрытый ключ еще не существует при первом запуске клиента Chef Infra с нового узла.

Во время первого запуска клиента Chef Infra:

  1. Клиент Chef Infra использует закрытый ключ chef-validator, расположенный в /etc/chef/validation.pem, для регистрации на сервере Chef Infra
  2. Сервер Chef Infra присваивает клиенту Chef Infra закрытый ключ для всех будущих аутентифицированных запросов на сервер Chef Infra
  3. Клиент Chef Infra сохраняет закрытый ключ на узле как /etc/chef/client.pem

Если запрос на взаимодействие с сервером Chef Infra с ключом chef-validator не удается, весь первый запуск клиента Chef Infra завершается неудачей.

После первого завершенного запуска клиента Chef Infra удалите закрытый ключ chef-validator по адресу /etc/chef/validation.pem

Сертификаты SSL

Предупреждение

Следующая информация относится к локальному серверу Chef Infra и не относится к хостинговому Chef.

Сервер Chef Infra 12 и более поздние версии по умолчанию включают проверку SSL для всех запросов на сервер, таких как запросы от knife и клиента Chef Infra. Сертификат, созданный при установке сервера Chef Infra, является самоподписанным, то есть он не подписан доверенной сертификационной организацией (CA), признанной клиентом Chef Infra. Сертификат, созданный сервером Chef Infra, должен быть загружен на любой компьютер, с которого knife и/или клиент Chef Infra будут отправлять запросы на сервер Chef Infra.

Например, без загрузки сертификата SSL следующая команда knife:

knife client list

выдает ошибку, похожую на:

ERROR: SSL Validation failure connecting to host: chef-server.example.com ...
ERROR: OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 ...

Это сделано по дизайну и произойдет до тех пор, пока верифицируемый сертификат не будет добавлен на компьютер, с которого отправляется запрос.

/.chef/trusted_certs

В каталоге /.chef/trusted_certs хранятся доверенные сертификаты SSL, используемые для доступа к серверу Chef Infra:

  • На каждой рабочей станции этот каталог — место, куда помещаются сертификаты SS после их загрузки с сервера CheInfra с помощью подкоманды knife ssl fetch
  • На каждом узле этот каталог — место, куда помещаются сертификаты SSL, когда узел был запущен с помощью клиента ChefInfra с рабочей станции

SSL_CERT_FILE

Используйте переменную среды SSL_CERT_FILE, чтобы указать расположение пакета сертификатов SSL-центра сертификации (CA) для клиента Chef Infra.

Значение для SSL_CERT_FILE по умолчанию не задано. Если не обновлено, клиент Chef Infra будет искать сертификаты SSL в следующих местах:

  • Клиент Chef Infra: /opt/chef/embedded/ssl/certs/cacert.pem
  • Рабочая станция Chef: /opt/chef-workstation/embedded/ssl/certs/cacert.pem

Чтобы использовать пользовательский пакет CA, обновите переменную среды, указав путь к пользовательскому пакету CA. Первым шагом при устранении неполадок с сертификатом SSL является проверка местоположения SSL_CERT_FILE.

Параметры client.rb

Используйте следующие параметры client.rb для управления настройками сертификатов SSL:

Настройка Описание
local_key_generation Создает ли сервер Chef Infra или клиент Chef Infra пару закрытого/открытого ключа. Когда true, клиент Chef Infra генерирует пару ключей, а затем отправляет открытый ключ на сервер Chef Infra. Значение по умолчанию: true.
ssl_ca_file Файл ключа OpenSSL. Клиент Chef Infra генерирует эту настройку автоматически.
ssl_ca_path Расположение файла ключа OpenSSL. Клиент Chef Infra генерирует эту настройку автоматически.
ssl_client_cert Сертификат OpenSSL X.509 для взаимной проверки сертификатов. Требуется для взаимной проверки сертификатов на сервере Chef Infra. Значение по умолчанию: nil.
ssl_client_key Ключ OpenSSL X.509, используемый для взаимной проверки сертификатов. Требуется для взаимной проверки сертификатов на сервере Chef Infra. Значение по умолчанию: nil.

ssl_verify_mode

Установите режим проверки для HTTPS-запросов. Рекомендуемое значение — :verify_peer. В зависимости от вашей конфигурации OpenSSL, вам может потребоваться установить ssl_ca_path. Значение по умолчанию: :verify_peer.

  • Используйте :verify_none для запуска без проверки сертификатов SSL.
  • Используйте :verify_peer для проверки всех сертификатов SSL, включая подключения к серверу Chef Infra, подключения к S3 и любые HTTPS-URL ресурсов remote_file, используемые в выполнении клиента Chef Infra.
verify_api_cert Проверить сертификат SSL на сервере Chef Infra. Установлено на true, клиент Chef Infra всегда проверяет сертификат SSL. Установлено на false, клиент Chef Infra использует ssl_verify_mode для определения, требуется ли проверка сертификата SSL. Значение по умолчанию: false.

Подкоманды Knife

Клиент Chef Infra включает две команды knife для управления сертификатами SSL:

  • Используйте knife ssl check для устранения неполадок с сертификатами SS
  • Используйте knife ssl fetch для загрузки сертификата с сервера Chef Infra в каталог /.chef/trusted_certs на рабочей станции.

После того, как на рабочей станции будет правильный сертификат SSL, операции инициализации с этой рабочей станции будут использовать сертификат в каталоге /.chef/trusted_certs во время операции инициализации.

knife ssl check

Запустите подкоманду knife ssl check для проверки состояния сертификата SSL, а затем используйте ответ для устранения возможных проблем.

Проверено

Если сертификат SSL можно проверить, ответ на

knife ssl check

похож на:

Connecting to host chef-server.example.com:443
Successfully verified certificates from 'chef-server.example.com'
Не проверено

Если сертификат SSL нельзя проверить, ответ на

knife ssl check

похож на:

Connecting to host chef-server.example.com:443
ERROR: The SSL certificate of chef-server.example.com could not be verified
Certificate issuer data:
  /C=US/ST=WA/L=S/O=Corp/OU=Ops/CN=chef-server.example.com/emailAddress=you@example.com

Configuration Info:

OpenSSL Configuration:
* Version: OpenSSL 1.0.2u  20 Dec 2019
* Certificate file: /opt/chef-workstation/embedded/ssl/cert.pem
* Certificate directory: /opt/chef-workstation/embedded/ssl/certs
Chef SSL Configuration:
* ssl_ca_path: nil
* ssl_ca_file: nil
* trusted_certs_dir: "/Users/grantmc/Downloads/chef-repo/.chef/trusted_certs"

TO FIX THIS ERROR:

If the server you are connecting to uses a self-signed certificate,
you must configure chef to trust that certificate.

By default, the certificate is stored in the following location on the
host where your Chef Infra Server runs:

  /var/opt/opscode/nginx/ca/SERVER_HOSTNAME.crt

Copy that file to your trusted_certs_dir (currently:

  /Users/grantmc/Downloads/chef-repo/.chef/trusted_certs)

using SSH/SCP or some other secure method, then re-run this command to
confirm that the certificate is now trusted.

knife ssl fetch

Запустите подкоманду knife ssl fetch для загрузки самоподписанного сертификата с сервера Chef Infra в каталог /.chef/trusted_certs на рабочей станции.

Проверка контрольных сумм

Сертификат SSL, загруженный в каталог /.chef/trusted_certs , следует проверить, чтобы убедиться, что это тот же сертификат, что и на сервере Chef Infra. Это можно сделать, сравнив контрольные суммы SHA-256.

  1. Просмотр контрольной суммы на сервере Chef Infra:

    ssh ubuntu@chef-server.example.com sudo sha256sum /var/opt/opscode/nginx/ca/chef-server.example.com.crt
    

    Ответ похож на:

    <ABC123checksum>  /var/opt/opscode/nginx/ca/chef-server.example.com.crt
    
  2. Просмотр контрольной суммы на рабочей станции:

    gsha256sum .chef/trusted_certs/chef-server.example.com.crt
    

    Ответ похож на:

    <ABC123checksum>  .chef/trusted_certs/chef-server.example.com.crt
    
  3. Проверьте, что значения контрольных сумм идентичны.

© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/chef_client_security/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API