О фазе соответствия
Фаза соответствия Chef Infra Client позволяет автоматически выполнять проверки соответствия и просматривать результаты в рамках любого выполнения Chef Infra Client. Фаза соответствия выполнения Chef Infra Client заменяет устаревшее кулинарное руководство audit и работает с существующими атрибутами кулинарного руководства audit, а также может быть настроено для новых кулинарных руководств. Эта дополнительная фаза предоставляет новейшие возможности соответствия без необходимости управления зависимостями кулинарного руководства или одновременного управления версиями при обновлениях Chef Infra Client.
Пользователи существующего кулинарного руководства audit могут мигрировать в новую фазу соответствия, удалив кулинарное руководство audit из своего списка выполнения и установив атрибут node['audit']['compliance_phase'] в значение true.
Фаза соответствия заменяет audit cookbook, интегрируя проверки соответствия InSpec в выполнение Chef Infra Client. Фаза соответствия разработана для работы на любом узле вашей системы, который настроен — или “запущен” — для выполнения chef-client.
Переход к фазе соответствия из кулинарного руководства audit
Для фазы соответствия требуется Chef Infra Client версии 17 или выше.
Если ваша система настроена для использования audit cookbook, внесите эти изменения, чтобы перейти к фазе соответствия:
-
Установите атрибут
node['audit']['compliance_phase']в значениеtrueчерез файл Policyfile или файл атрибутов кулинарного руководства. -
Удалите
audit cookbookиз вашего списка выполнения. -
При следующем выполнении Chef Infra Client вы должны увидеть результаты фазы соответствия.
Настройка фазы соответствия в новых кулинарных руководствах
Включить фазу соответствия
Фаза соответствия включается путем установки атрибута node['audit']['compliance_phase'] в значение true через атрибуты кулинарного руководства или файлы Policyfiles. Чтобы включить фазу соответствия, используя атрибуты кулинарного руководства, добавьте следующую строку в файл attributes/default.rb вашего кулинарного руководства.
default['audit']['compliance_phase'] = true
Настройка профилей InSpec
Настройка одного или нескольких профилей Chef InSpec включает фазу соответствия в выполнении Chef Infra Client. Наличие этой конфигурации в вашем файле атрибутов указывает Chef Infra Client на получение и выполнение определенных профилей Chef InSpec и запись результатов на диск с помощью стандартных репортеров cli и json-file.
Получите профили Chef InSpec из Chef Automate, Supermarket, локального файла, GitHub или по протоколу HTTP с помощью атрибута node['audit']['profiles'].
Следующие примеры:
- Получение профилей из Chef Automate, Supermarket, локального файла, GitHub или по HTTP.
- Отображение результатов в командной строке с помощью стандартного репортера
cli. - Запись результатов на диск с помощью стандартного репортера
json-fileв<chef_cache_path>/compliance_reports/compliance-<timestamp>.json.
# Invoke the Compliance Phase
default['audit']['compliance_phase'] = true
# Set profile locations
default['audit']['profiles']['linux-baseline'] = {
'compliance': 'user/linux-baseline',
'version': '2.1.0'
}
Предупреждение
data_collector.server_url и data_collector.token в вашем client.rb, чтобы получать профили из Chef Automate. Эта конфигурация более подробно описана в документации по сборщику данных Chef Automate . # Invoke the Compliance Phase
default['audit']['compliance_phase'] = true
# Set profile locations
default['audit']['profiles']['ssh'] = {
'supermarket': 'hardening/ssh-hardening'
}
# Invoke the Compliance Phase
default['audit']['compliance_phase'] = true
# Set profile locations
default['audit']['profiles']['4thcafe/win2012_audit'] = {
'path': 'E:/profiles/win2012_audit'
}
# Invoke the Compliance Phase
default['audit']['compliance_phase'] = true
# Set profile locations
default['audit']['profiles']['ssl'] = {
'git': 'https://github.com/dev-sec/ssl-benchmark.git'
}
# Invoke the Compliance Phase
default['audit']['compliance_phase'] = true
# Set profile locations
default['audit']['profiles']['ssh2'] = {
'url': 'https://github.com/dev-sec/tests-ssh-hardening/archive/master.zip'
}
Получение профилей
Установите атрибут fetcher со значением default['audit']['fetcher'], чтобы получить профили соответствия InSpec из Chef Automate или Chef Infra Server помимо места, определённого default ['audit']['profile']. Без указания значения, фаза соответствия использует по умолчанию функции получения, включённые в Chef InSpec. Сборщики данных Chef Infra и Chef InSpec взаимоисключающие, поэтому вы можете использовать только одну из этих конфигураций.
Следующие примеры:
- Получение профиля «ssh» из Chef Supermarket.
- Получение дополнительных профилей из Chef Automate или Chef Server.
- Отображение результатов в командной строке с помощью стандартного репортера
cli. - Запись результатов на диск с помощью стандартного репортера
json-fileв<chef_cache_path>/compliance_reports/compliance-<timestamp>.json.
# Invoke the Compliance Phase
default['audit']['compliance_phase'] = true
# Set profile location
default['audit']['profiles']['ssh'] = {
'supermarket': 'hardening/ssh-hardening'
}
# Fetch additional profiles
default['audit']['fetcher'] = 'chef-automate'
Предупреждение
data_collector.server_url и data_collector.token в вашем client.rb, чтобы получать профили из Chef Automate. Эта конфигурация более подробно описана в документации по сборщику данных Chef Automate . # Invoke the Compliance Phase
default['audit']['compliance_phase'] = true
# Set profile location
default['audit']['profiles']['ssh'] = {
'supermarket': 'hardening/ssh-hardening'
}
# Fetch additional profiles
default['audit']['fetcher'] = 'chef-server'
Репортеры
Репортеры контролируют действия с отчетом после выполнения Chef InSpec. Поддерживается как одно, так и несколько значений. По умолчанию используются репортеры cli и json-file.
Репортеры могут отправлять результаты фазы соответствия в:
- Chef Automate, проксированный через Chef Infra Server.
- Непосредственно в Chef Automate (требуется дополнительная аутентификация).
- Терминал, если Chef Infra Client запускается пользователем в интерактивном режиме.
- Файл на диске.
Следующие примеры:
- Получение профиля «ssh» из Chef Supermarket
- Получение дополнительных профилей из Chef Automate
- Отправка результатов в Chef Automate, Chef Automate, проксированный через Chef Infra Server, или в файл на диске.
# Invoke the Compliance Phase
default['audit']['compliance_phase'] = true
# Set profile location
default['audit']['profiles']['ssh'] = {
'supermarket': 'hardening/ssh-hardening'
}
# Fetch additional profiles
default['audit']['fetcher'] = 'chef-automate'
# Set reporter
default['audit']['reporter'] = 'chef-automate'
Предупреждение
data_collector.server_url и data_collector.token в вашем client.rb, чтобы получать профили из Chef Automate. Эта конфигурация более подробно описана в документации по сборщику данных Chef Automate . # Invoke the Compliance Phase
default['audit']['compliance_phase'] = true
# Set profile location
default['audit']['profiles']['ssh'] = {
'supermarket': 'hardening/ssh-hardening'
}
# Fetch additional profiles
default['audit']['fetcher'] = 'chef-automate'
# Set reporter
default['audit']['reporter'] = 'chef-server-automate'
# Invoke the Compliance Phase
default['audit']['compliance_phase'] = true
# Set profile location
default['audit']['profiles']['ssh'] = {
'supermarket': 'hardening/ssh-hardening'
}
# Fetch additional profiles
default['audit']['fetcher'] = 'chef-automate'
# Set two reporters
default['audit']['reporter'] = 'json-file', 'cli'
# Set the location of the json-file output
# Note that the location attribute uses json_file
default['audit']['json_file']['location'] = '/file/path/report.json'
Путь по умолчанию для json-file: <chef_cache_path>/compliance_reports/compliance-<timestamp>.json.
Путь также будет выведен в журнал Chef Infra Client:
['2017-08-29T00:22:10+00:00'] INFO: Reporting to json-file
['2017-08-29T00:22:10+00:00'] INFO: Writing report to /opt/kitchen/cache/compliance-reports/compliance-20170829002210.json
['2017-08-29T00:22:10+00:00'] INFO: Report handlers complete
Настройка профилей
Вы можете загрузить профили в Chef Automate, используя API Chef Automate или команду inspec compliance.
Отклонения
Используйте «отклонения», чтобы отметить отдельные несоответствия как административно принятые, временно или постоянно.
Чтобы использовать отклонения:
- Подготовьте файл отклонения в формате YAML.
- Передайте файл отклонения на узел в cookbook_file или remote_file.
- Установите атрибут
waiver_fileдля фазы соответствия в этом местоположении. Например:
default['audit']['waiver_file'] = "waivers.yaml"
Внешние данные
Профили InSpec должны быть самодостаточными и независимыми от внешних данных. В некоторых случаях тест профиля может вести себя по-разному в зависимости от аспектов тестируемого узла, и в таких случаях вы можете использовать внешние данные. Профили Chef InSpec принимают «входные данные», которые позволяют настроить тест.
Входные данные InSpec
Вы можете передать «входные данные Chef InSpec» исполнителю Chef InSpec. Предыдущее название «входных данных Chef InSpec» было attributes, и вы зададите их в хеше ['audit']['attributes'] в вашем файле атрибутов. Любые данные, добавленные в ['audit']['attributes'] как хеш, передаются Chef InSpec в качестве отдельных атрибутов.
default['audit']['attributes'] = {
first_input: 'some value',
second_input: 'another value',
}
Данные узла Chef
Существует два основных способа передачи данных узла Chef Infra исполнителю Chef InSpec во время фазы соответствия.
Явно передать необходимые данные (рекомендуется)
Любые данные, добавленные в хеш node['audit']['attributes'], будут переданы как отдельные атрибуты Chef InSpec. Это обеспечивает чистый интерфейс между выполнением Chef Infra client и профилем Chef InSpec, позволяя легко назначать значения по умолчанию в профиле InSpec. Этот метод особенно рекомендуется, если профиль Chef InSpec предполагается использовать вне контекста фазы соответствия, поэтому для потребителей профиля явным образом указано, какие атрибуты необходимы. Установите атрибуты в файле атрибутов кулинарного руководства, а затем используйте их в вашем профиле InSpec.
Установите атрибуты в файле атрибутов кулинарной книги:
node['audit']['attributes']{
'key1' = 'value1',
'debug_enabled' = node['my_cookbook']['debug_enabled'],
'environment' = node.chef_environment
}
Используйте атрибуты в профиле InSpec:
environment = attribute('environment', description: 'The Chef Infra environment for the node', default: 'dev')
control 'debug-disabled-in-production' do
title 'Debug logs disabled in production'
desc 'Debug logs contain potentially sensitive information and should not be on in production.'
impact 1.0
describe file('/path/to/my/app/config') do
its('content') { should_not include "debug=true" }
end
only_if { environment == 'production' }
end
Использование объекта узла Chef Infra
Фаза соответствия может быть настроена для передачи объекта узла Chef Infra как атрибута Chef InSpec под названием chef_node.
Использование объекта chef_node позволяет создавать более гибкие профили, но повторное использование этих профилей вне фазы соответствия затруднено. Для повторного использования этих профилей необходимо понять, как передать один атрибут, содержащий данные, подобные данным Chef Infra. Мы рекомендуем явное указание внешних данных всякий раз, когда это возможно.
Чтобы использовать этот вариант, сначала включите его в оболочке кулинарной книги или аналогичном инструменте:
node.override['audit']['chef_node_attribute_enabled'] = true
… а затем используйте его в вашем профиле:
chef_node = attribute('chef_node', description: 'Chef Node')
control 'no-password-auth-in-prod' do
title 'No Password Authentication in Production'
desc 'Password authentication is allowed in all environments except production'
impact 1.0
describe sshd_config do
its('PasswordAuthentication') { should cmp 'No' }
end
only_if { chef_node['chef_environment'] == 'production' }
end
Полезные атрибуты фазы соответствия
audit-enforcer
Специальный репортер, который заставляет выполнение соответствия сгенерировать ошибку и немедленно завершить выполнение клиента Chef Infra, если какой-либо контроль любого профиля Chef InSpec завершится с ошибкой. Если вы указываете несколько репортеров, поместите audit-enforcer в конец списка, позволяя другим репортерам сгенерировать свой вывод перед завершением выполнения. Пример:
# fail on error
default['audit']['reporter'] = 'audit-enforcer'.
chef_node_attribute_enabled
Если включено, хеш-представление объекта узла Chef Infra будет отправлено в входной параметр под названием chef_node. По умолчанию: false
# enable sending a hash representation of the Chef Infra node object
default['audit']['chef_node_attribute_enabled'] = true
фаза_соответствия
Включить встроенное выполнение фазы соответствия. Возможные значения: true, false, nil
# Turn on Compliance Phase
default['audit']['compliance_phase] = true
control_results_limit
Список результатов на контроль будет усечен до этого количества для уменьшения размера отчетов. Сводка удаленных результатов будет отправлена для каждого затронутого контроля. По умолчанию 50.
# allow 100 results
default['audit']['control_results_limit'] = 100
fetcher
Управляет местоположением дополнительных местоположений профилей для профилей Chef InSpec, местоположения по умолчанию для извлечения предоставляются через атрибут [audit][profiles]. Допустимые значения: nil, ‘chef-server’, ‘chef-automate’.
# fetch additional profiles from Chef Server
default[audit][fetcher] = 'chef-server'
insecure
Установление атрибута default['audit']['insecure'] в значение true позволит пропустить проверку сертификата SSL для репортеров chef-automate и chef-server-automate. Это позволяет подключаться к конечным точкам HTTPS с самозаверенными сертификатами ssl. Значение по умолчанию false
# allow self-signed certificates
default['audit']['insecure'] = true
json_file
Расположение на диске, куда сохраняются json-отчеты Chef InSpec при использовании репортера ‘json-file’. По умолчанию: <chef_cache_path>/compliance_reports/compliance-<timestamp>.json
default['audit']['reporter'] = 'json-file'
default['audit']['json_file']['location'] = '/path/to/file.json'
inspec_backend_cache
Chef InSpec кэширует результаты команд, выполняемых на узле во время фазы соответствия. Кэширование улучшает производительность фазы соответствия при выполнении многократно медленных команд во время выполнения Chef Infra Client. Отключите эту функцию, если ваш профиль Chef InSpec выполняет команду несколько раз, ожидая различного вывода во время выполнения. По умолчанию: true. Пример:
# Disable caching of commands
default['audit']['inspec_backend_cache'] = false
профили
Профили соответствия Chef InSpec для сканирования узлов.
# use the ssh-hardening profile from Supermarket
default['audit']['profiles']['ssh'] = {
'supermarket': 'hardening/ssh-hardening'
}
quiet
Управляет подробностью выполнения Chef InSpec. По умолчанию true. Чтобы отключить, установите атрибут default['audit']['quiet'] в значение false.
# verbose
default['audit']['quiet'] = false
репортер
Управляет обработкой результирующего отчета после выполнения Chef InSpec. Принимает одно строковое значение или массив нескольких значений. Репортер ‘cli’ имитирует вывод InSpec в командной строке в вашем терминале, что позволяет увидеть статус соответствия вашей системы в конце фазы соответствия. Допустимые значения: ‘chef-server-automate’, ‘chef-automate’, ‘json-file’, ‘audit-enforcer’, ‘cli’
# set the reporter to Chef Automate
default['audit']['reporter'] = 'chef-automate', 'cli'
run_time_limit
Результаты, у которых run_time ниже этого предела, будут лишены полей start_time и run_time для уменьшения размера отчетов. По умолчанию 1.0. Установите этот атрибут с помощью default['audit']['run_time_limit'].
# allow 5 minutes run time
default['audit']['run_time_limit'] = 5.0
result_include_backtrace
Когда ресурс Chef InSpec вызывает исключение, результаты содержат краткое сообщение об ошибке и подробный стек вызовов Ruby ошибки. По умолчанию: false (не отправляет стек вызовов). Пример:
# include backtrace
default['audit']['result_include_backtrace'] = true
result_message_limit
Усекает любые сообщения результатов контроля, превышающие этот предел символов. Chef Automate имеет ограничение размера отчета 4 МБ и не может обрабатывать отчеты, превышающие это ограничение. Chef InSpec добавит этот текст в конец усеченных сообщений: [Truncated to 10000 characters] Значение по умолчанию: 10000.
default['audit']['result_message_limit] = 10000
сервер
При отправке отчетов в экземпляр Chef Automate, проксируемый через Chef Infra Server, фаза соответствия может быть настроена на использование другого URL, отличного от chef_server_url , настроенного в client.rb. Это включается с помощью атрибута default['audit']['server'].
default['audit']['server'] = 'https://server.4thcafe.com'.
waiver_file
Строковый путь или массив путей к файлам исключений Chef InSpec.
default['audit']['waiver_file'] = 'path/to/waiver.yml'.
Ошибки и устранение неполадок
Кэширование результатов
Chef InSpec кэширует результаты команд, выполняемых на узле во время фазы соответствия. Кэширование улучшает производительность фазы соответствия при выполнении многократно медленных команд во время выполнения Chef Infra Client. Отключите эту функцию, если ваш профиль Chef InSpec выполняет команду несколько раз, ожидая различного вывода во время выполнения. По умолчанию: true. Пример:
# Disable caching of commands
default['audit']['inspec_backend_cache'] = false
Ограничения размера отчетов Chef InSpec
Размер отчета, генерируемого при выполнении фазы соответствия, зависит от нескольких факторов, таких как:
- количество контролей и тестов в профиле
- количество профильных ошибок для узла
- метаданные контролей (заголовок, описание, теги и т. д.)
- количество ресурсов (пользователей, процессов и т. д.), которые тестируются
В зависимости от вашей настройки, вы должны учитывать некоторые ограничения. Общее ограничение – это стандартный размер запроса (1 МБ) сервера Chef Infra Server. Превышение этого ограничения приведет к отклонению отчета с сообщением ERROR: 413 "Request Entity Too Large". Для получения более подробной информации об этих ограничениях обратитесь к «документации по устранению неполадок с ошибками 413».
HTTP-ошибки
401, 403 Неавторизован — неверные данные времени
Иногда система даты/времени может сдвигаться между клиентом и сервером. Если этот сдвиг превышает несколько минут, сервер Chef Infra Server выдаст ошибку 401 «Неавторизован», и запрос не будет перенаправлен на сервер Chef Automate.
На сервере Chef Infra Server вы можете увидеть это в следующих логах:
# chef-server-ctl tail
==> /var/log/opscode/nginx/access.log <==
192.168.200.102 - - ['28/Aug/2016:14:57:36 +0000'] "GET /organizations/4thcafe/nodes/vagrant-c0971990 HTTP/1.1" 401 "0.004" 93 "-" "Chef Client/12.14.38 (ruby-2.3.1-p112; ohai-8.19.2; x86_64-linux; +https://chef.io)" "127.0.0.1:8000" "401" "0.003" "12.14.38" "algorithm=sha1;version=1.1;" "vagrant-c0971990" "2013-09-25T15:00:14Z" "2jmj7l5rSw0yVb/vlWAYkK/YBwk=" 1060
==> /var/log/opscode/opscode-erchef/crash.log <==
2016-08-28 14:57:36 =ERROR REPORT====
{<<"method=GET; path=/organizations/4thcafe/nodes/vagrant-c0971990; status=401; ">>,"Unauthorized"}
==> /var/log/opscode/opscode-erchef/erchef.log <==
2016-08-28 14:57:36.521 ['error'] {<<"method=GET; path=/organizations/4thcafe/nodes/vagrant-c0971990; status=401; ">>,"Unauthorized"}
==> /var/log/opscode/opscode-erchef/current <==
2016-08-28_14:57:36.52659 ['error'] {<<"method=GET; path=/organizations/4thcafe/nodes/vagrant-c0971990; status=401; ">>,"Unauthorized"}
==> /var/log/opscode/opscode-erchef/requests.log.1 <==
2016-08-28T14:57:36Z erchef@127.0.0.1 method=GET; path=/organizations/4thcafe/nodes/vagrant-c0971990; status=401; req_id=g3IAA2QAEGVyY2hlZkAxMjcuMC4wLjEBAAOFrgAAAAAAAAAA; org_name=4thcafe; msg=bad_clock; couchdb_groups=false; couchdb_organizations=false; couchdb_containers=false; couchdb_acls=false; 503_mode=false; couchdb_associations=false; couchdb_association_requests=false; req_time=1; user=vagrant-c0971990; req_api_version=1;
Кроме того, в журнале chef_gate будет содержаться подобное сообщение:
# /var/log/opscode/chef_gate/current
2016-08-28_15:01:34.88702 ['GIN'] 2016/08/28 - 15:01:34 | 401 | 13.650403ms | 192.168.200.102 | POST /compliance/organizations/4thcafe/inspec
2016-08-28_15:01:34.88704 Error #01: Authentication failed. Please check your system's clock.
401 Аутентификация по токену и токену обновления
В случае неправильного или не заданного токена сервер Chef Automate запишет ошибку токена в журнал:
==> /var/log/chef-compliance/core/current <==
2016-08-28_20:41:46.17496 20:41:46.174 ERR => Token authentication: %!(EXTRA *errors.errorString=malformed JWS, only 1 segments)
2016-08-28_20:41:46.17498 ['GIN'] 2016/08/28 - 20:41:46 | 401 | 53.824us | 192.168.200.102 | GET /owners/base/compliance/linux/tar
==> /var/log/chef-compliance/nginx/compliance.access.log <==
192.168.200.102 - - ['28/Aug/2016:21:23:46 +0000'] "GET /api/owners/base/compliance/linux/tar HTTP/1.1" 401 0 "-" "Ruby"
413 Запрос слишком большой
Эта ошибка указывает на то, что вы превысили ограничение размера запроса erchef на сервере Chef Infra Server. Значение по умолчанию для версий до 13.0 составляло 1 МБ. Начиная с версии 13.0, значение по умолчанию составляет 2 МБ.
Для решения этой ошибки установите значение opscode_erchef['max_request_size'] на сервере Chef Infra Server в большее значение. В данном примере ограничение устанавливается в 3 МБ:
opscode_erchef['max_request_size'] = 3000000
Затем выполните chef-server-ctl reconfigure для применения этого изменения.
Журналы ошибок 413
Ошибка 413 «Запрос слишком большой» отображается как в стеке вызовов, так и в логах сервера Chef Infra Server Nginx.
Стек вызовов показывает ошибку 413:
Running handlers:
['2017-12-21T16:21:15+00:00'] WARN: Compliance report size is 1.71 MB.
['2017-12-21T16:21:15+00:00'] ERROR: 413 "Request Entity Too Large" (Net::HTTPServerException)
/opt/chef/embedded/lib/ruby/2.4.0/net/http/response.rb:122:in `error!'
/opt/chef/embedded/lib/ruby/gems/2.4.0/gems/chef-13.6.4/lib/chef/http.rb:152:in `request'
/opt/chef/embedded/lib/ruby/gems/2.4.0/gems/chef-13.6.4/lib/chef/http.rb:131:in `post'
/var/chef/cache/cookbooks/audit/libraries/reporters/cs_automate.rb:37:in `block in send_report'
...
Журнал Nginx сервера Chef Infra Server подтверждает ошибку 413:
==> /var/log/opscode/nginx/access.log <==
192.168.56.40 - - ['21/Dec/2017:11:35:30 +0000'] "POST /organizations/eu_org/data-collector HTTP/1.1" 413 "0.803" 64 "-" "Chef Client/13.6.4 (ruby-2.4.2-p198; ohai-13.6.0; x86_64-linux; +https://chef.io)" "-" "-" "-" "13.6.4" "algorithm=sha1;version=1.1;" "bootstrapped-node" "2017-12-21T11:35:31Z" "GR6RyPvKkZDaGyQDYCPfoQGS8G4=" 1793064
Ошибки бэкенда Chef Automate
Chef Automate автоматически устанавливает ограничение logstash на 10% от системной памяти в рамках выполнения команды automate-ctl reconfigure . Вы достигли предела размера кучи Java (-Xmx) logstash, если отчет Chef InSpec не становится доступным в Chef Automate, и эта ошибка присутствует в логах logstash:
/var/log/delivery/logstash/current
2017-12-21_13:59:54.69949 DEBUG: Ruby filter is processing an 'inspec_profile' event
2017-12-21_14:00:16.51553 java.lang.OutOfMemoryError: Java heap space
2017-12-21_14:00:16.51556 Dumping heap to /opt/delivery/embedded/logstash/heapdump.hprof ...
2017-12-21_14:00:16.51556 Unable to create /opt/delivery/embedded/logstash/heapdump.hprof: File exists
2017-12-21_14:00:18.50676 Error: Your application used more memory than the safety cap of 383M.
2017-12-21_14:00:18.50694 Specify -J-Xmx####m to increase it (#### = cap size in MB).
2017-12-21_14:00:18.50703 Specify -w for full OutOfMemoryError stack trace
© 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_compliance_phase/