Spec-Zone.ru › Chef 16

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

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

Все коммуникации с сервером Chef Infra должны быть аутентифицированы с использованием API сервера Chef Infra, который является REST API, позволяющим отправлять запросы на сервер Chef Infra. Только аутентифицированные запросы будут авторизованы. В большинстве случаев, особенно при использовании knife, Chef Infra Client или веб-интерфейса сервера Chef Infra, использование API сервера Chef Infra прозрачно. В некоторых случаях использование API сервера Chef Infra требует более подробного описания, например, при отправке запроса в коде Ruby, с помощью плагина knife или с помощью cURL.

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

Процесс аутентификации гарантирует, что сервер Chef Infra отвечает только на запросы от авторизованных пользователей. Сервер Chef Infra использует шифрование с открытым ключом. При конфигурации узла и/или рабочей станции для запуска Chef Infra Client создаются открытый и закрытый ключи. Открытый ключ хранится на сервере Chef Infra, а закрытый ключ возвращается пользователю для безопасного хранения. (Закрытый ключ — это файл .pem, расположенный в каталоге .chef или в /etc/chef)

Как Chef Infra Client, так и knife используют API сервера Chef Infra при общении с сервером Chef Infra. chef-validator использует API сервера Chef Infra, но только во время первого запуска Chef Infra Client на узле.

Каждый запрос на сервер Chef Infra от этих исполняемых файлов подписывает специальную группу HTTP-заголовков закрытым ключом. Затем сервер Chef Infra использует открытый ключ для проверки заголовков и содержимого.

chef-validator

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

Однако во время первого запуска Chef Infra Client такого закрытого ключа не существует. Вместо этого Chef Infra Client пытается использовать закрытый ключ, назначенный chef-validator, расположенный в /etc/chef/validation.pem. (Если по какой-либо причине chef-validator не может отправить аутентифицированный запрос на сервер Chef Infra, начальный запуск Chef Infra Client завершится ошибкой.)

Во время первоначального запуска Chef Infra Client, Chef Infra Client регистрирует себя на сервере Chef Infra с помощью закрытого ключа, назначенного chef-validator, после чего Chef Infra Client получит закрытый ключ client.pem для всех будущих аутентифицированных запросов на сервер Chef Infra.

После успешного завершения первоначального запуска Chef Infra Client chef-validator больше не требуется и может быть удалён с узла. Используйте рецепт delete_validation из кулинарной книги chef-client (https://github.com/chef-cookbooks/chef-client), чтобы удалить chef-validator.

Во время работы Chef Infra Client

В рамках каждого запуска Chef Infra Client, Chef Infra Client аутентифицируется на сервере Chef Infra с использованием закрытого ключа RSA и API сервера Chef Infra.

authentication_protocol_version

Параметр authentication_protocol_version в файле client.rb используется для определения протокола аутентификации, взаимодействующего с сервером Chef Infra. Например, укажите версию протокола 1.3, чтобы включить поддержку алгоритмов SHA-256:

knife[:authentication_protocol_version] = '1.3'

Обратите внимание, что протокол аутентификации 1.3 поддерживается только на версиях Chef Server 12.4.0 и выше.

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

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

Следующая информация не относится к размещённому серверу Chef Server 12, а только к локальному серверу Chef Server 12.

Сервер Chef Server 12 и более поздние версии по умолчанию включают проверку SSL для всех запросов на сервер, таких как запросы knife и Chef Infra Client. Сертификат, созданный во время установки сервера Chef Infra, является самозаверяющим, что означает, что он не подписан доверенным центром сертификации (CA), поставляемым с Chef Infra Client. Сертификат, созданный сервером Chef Infra, должен быть загружен на любую машину, с которой knife и/или Chef Infra Client будут отправлять запросы на сервер 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:

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

SSL_CERT_FILE

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

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

  • Chef Infra Client: /opt/chef/embedded/ssl/certs/cacert.pem
  • ChefDK: /opt/chefdk/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 Client генерирует пару ключей и отправляет открытый ключ на сервер Chef Infra. Значение по умолчанию: true.
ssl_ca_file Файл, в котором сохранён открытый ключ OpenSSL. Chef Infra Client автоматически генерирует это значение, и большинству пользователей не нужно его изменять.
ssl_ca_path Путь к расположению открытого ключа OpenSSL. Chef Infra Client автоматически генерирует это значение, и большинству пользователей не нужно его изменять.
ssl_client_cert Сертификат OpenSSL X.509, используемый для взаимной проверки сертификатов. Это значение необходимо только при настройке взаимной проверки сертификатов на сервере Chef Infra. Значение по умолчанию: nil.
ssl_client_key Ключ OpenSSL X.509, используемый для взаимной проверки сертификатов. Это значение необходимо только при настройке взаимной проверки сертификатов на сервере Chef Infra. Значение по умолчанию: nil.

ssl_verify_mode

Установите режим проверки для HTTPS-запросов.

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

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

verify_api_cert Проверять SSL-сертификат на сервере Chef Infra. При значении true, Chef Infra Client всегда проверяет SSL-сертификат. При значении false, Chef Infra Client использует значение ssl_verify_mode для определения необходимости проверки SSL-сертификата. Значение по умолчанию: false.

Подкоманды knife

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

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

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

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