(Этот пост первоначально появился на Блог Sysadvent )
sta · bil · i · ty Stuh-bil-i-tee
- состояние или качество стабильного.
- твердость в положении.
- продолжение без изменений; постоянство.
- Сопротивление к изменениям, особенно внезапные изменения или ухудшение.
- стойкость; постоянство, как характер или цель.
Стабильность — это то, что мы пытаемся обеспечить, чтобы уменьшить векторы, которые могут внести изменения в систему. На практике это означает, что «развертывание выполняется доверенными лицами с доступом к администратору».
Проблема с подходом «разделения обязанностей» к решению всех ваших проблем стабильности заключается в том, что каждый может совершать ошибки. Должность не подразумевает непогрешимость. Каждый Sysadmin, который думает, что их название означает, что они не ошибются, расскажет мне историю о нескольких пинтах о том, когда они полностью испортили производство.
Это также огромное бремя для одной группы, чтобы иметь возможность понять все варианты и дисперсию, которые приведет к «книге« запустить ».
Как мы обычно это делаем? У нас может быть проект длиной 8 спринтов, но мы не думаем о безопасности до 8 -го спринта, который является «закаленным» спринтом.
Естественно, мы терпят неудачу все это упрочнение, потому что до сих пор не думали о безопасности. Безопасность и соблюдение должны быть рассмотрены с самого начала. Мы делаем это с инструментами и с культурой. В этом посте я в основном сосредотачиваюсь на том, как использовать инструменты, чтобы помочь в поддержке требуемых культурных изменений. В частности, я сосредоточусь на использовании Inspec для проверки вашего инфракода (в данном случае я буду использовать шеф -повар, но это будет работать так же хорошо с другими инструментами инфракоды).
Сдвиг слева
Что в любом случае «сдвигается налево»? Идея состоит в том, что мы перемещаем наше тестирование дальше «влево» в нашем трубопроводе. Чем ближе к введению дефекта, который он обнаружен, тем дешевле и проще его исправить.
Конечно, это вводит некоторые проблемы, верно? Если мои тесты не проходят, я могу изменить тесты. Нам нужно структурировать наши системы, чтобы предотвратить это.
Как это помогает с безопасностью?
Соответствие и безопасность — это просто еще один аспект качества. Было бы звучать нелегко только тестировать наши приложения прямо перед тем, как мы развертываем производство. Это должно звучать так же нелепо ждать, пока «укрепляет спринт», чтобы начать думать о безопасности и соответствии.
Другая проблема заключается в том, что часто эти тесты, которые мы делаем в конце, тяжелые. То есть они образно или буквально дороги; Они требуют больших ресурсов или дорогих лицензий на место, поэтому мы не используем их так часто, как должны.
Нам нужно что -то лучше.
Попытка предотвратить конкретное поведение — это проигрышная битва
- Вы проводите время, не давая людям делать x, y или z
- Они делают A, B или C, чтобы получить результат они хотят
- Никакого общения не происходит. Понимание потеряно.
Независимо от того, сколько вы пытаетесь заблокировать «как», вы должны сосредоточиться на «что». Рассмотрим результат, а не механизм, который приводит к этому исходу.
Воспринимаемая проблема с управлением распределенной конфигурацией
Когда я предлагаю SysAdmins, чтобы разработчики должны писать поваренные книги шеф -повара, это, как правило, то, что, по их мнению, произойдет:
- Разработчик читает на переполнении стека, который отключает
selinux
сделает его приложение для узла лучше работать - Разработчик обновляет свою кулинарную книгу, чтобы отключить
selinux
- Sysadmins увольняются из -за 3vil haxx0rz
Лучший путь
- Разработчик читает на переполнении стека, который отключает
selinux
сделает его приложение для узла лучше работать - Разработчик обновляет свою кулинарную книгу, чтобы отключить
selinux
- Разработчик запускает локальные тесты, которые включают проверки соответствия
- Тест на проверку соответствия для состояния
selinux
- Испытания терпят неудачу. Разработчик говорит: «Уэлп, я думаю, я не могу этого сделать».
Что если разработчики не проводят эти локальные тесты?
Трубопровод поймает их.
В следующий раз они подойдут лучше.
Даже организации, которые имеют тест на культуру с высокой точностью Все Анкет Возьмите страницу от Рональда Рейгана — «Доверие, но проверь». Я даже не доверяю я помнить, чтобы тестировать все время. Помните, мы включаем локальное тестирование, но мы Не рассчитывайте на это Анкет
Если вы действительно заботитесь о чем -то, вы достаточно заботитесь, чтобы написать тест
Часто оправдание дано: «У меня нет времени, чтобы написать тест на эту вещь». Это отговорка, и я здесь, чтобы сказать вам, что он не летит. Это восходит к моменту легких инструментов для соответствия и тестирования — если это слишком обременительно, чтобы писать эти тесты, никто их не сделает. Хорошая новость в том, что это не так сложно.
Когда вы пишете эти тесты, подумайте об этом: мы тестируем результаты. Результаты — это то, что имеет значение. Наш трубопровод создает артефакт (в случае инфракода этот артефакт является конвергентным узлом). Важно состояние этого результата. Как Вы поняли, что нет вопроса. Мы должны проверять соблюдение и безопасность против артефактов, и результат, который мы тестируем, — это «такая вещь, как должна быть, или это страшный кошмар, который никогда не должен видеть производство»?
Демократизировать ваше тестирование
Помните, когда я говорил о высокочастоте Sysadmins? Infosec, люди делают это тоже. Инструменты — это наименьшая важная вещь, о которой нужно подумать, но убедитесь, что это не инструмент, который может запускать только тесты от людей безопасности. Если вы заботитесь о соответствии, переместите это влево. Если ваш инструмент не может этого сделать, пришло время найти другой инструмент.
Это не значит, что вам нужно выбрасывать то, что у вас есть, но подумайте о том, чтобы добавить что -то. Чем больше вы можете подражать тому, что вы заботитесь о тестировании в производстве в своем трубопроводе, тем счастливее вы будете. Мониторинг — это просто тестирование с измерением времени; Это относится и к соответствию.
Что ты делаешь не Хочу сделать тест в трубопроводе, который не может управлять местным разработчиком. По сути, если вы это сделаете, вы большой здравый смысл [1].
Введите Inspec
Inspec является соответствием как код. Мы пишем элементы управления, которые тестируют на состояние системы и сообщаем об этом состоянии. Его также довольно легко читать, как написано на языке спецификации. Рассмотрим разницу между этими двумя способами проверки версии протокола SSH в системе:
Ракушка
> grep "^Protocol" /etc/ssh/sshd_config | sed 's/Protocol //' 2
### Inspec
control 'ssh-1234' do impact 1.0 title 'Server: Set protocol version to SSHv2' desc " Set the SSH protocol version to 2. Don't use legacy insecure SSHv1 connections anymore... " describe sshd_config do its('Protocol') { should eq 2 } end end
Как вы можете видеть, с помощью Inspec не только если справедливо читается человеком, но и предоставляет контекст . Мы понимаем влияние управления, и мы даже можем добавить хорошее описание, чтобы объяснить, что это такое. Пользовательский опыт [2] лучше.
Примеры
(Весь код для этого поста можно найти по адресу github.com/mattstratton/sysadvent-2017 )
Кулинарная книга
Мы начинаем с рассмотрения основной кулинарной книги, которая создает пользователя и дает ему право собственности на /var/log
каталог (которого мы, вероятно, не хотим происходить):
user 'sa2017-app' do comment 'SysAdvent User' system true shell '/bin/false' end directory '/var/log' do owner 'sa2017-app' end
Профиль соответствия
Наш профиль соответствия для подтверждения этого /var/log
принадлежит корне, выглядит так:
title 'Directory Tests' control 'log-1.0' do impact 0.7 title 'Ownership of /var/log' desc 'The /var/log directory should be owned by root' describe file('/var/log') do it { should be_directory } it { should be_owned_by 'root' } end end
Связывая его вместе
В этом случае я создал трубопровод Jenkins, который реагирует на изменения в репо кулинарной книге. Jenkinsfile Определяет следующие этапы:
- Lint — Runs
FoodCritic
иCookstyle
против кулинарной книги - Дым — пробеги
кухонный тест
Использование тестов в самой поваренной книге - Соответствие — Забегает
кухонный тест
, но включает наш профиль соответствия, загруженныйgit
URL
Для достижения Соответствие
Этап, мы генерируем новый Kitchen.yml
Файл, который включает в себя путь к тесту, который мы хотим включить. Есть и другие способы сделать это, и это будет зависеть от того, как вы строите свои трубопроводы. Но, надеюсь, это иллюстрирует один из способов, которым это можно сделать.
Чтобы доказать смысл, вот результат в Дженкинсе, когда стадия соответствия запускается:
Profile: My Compliance (sa2017-compliance) Version: 0.1.0 Target: docker://4967508ea0b8f431b161edf561164ab8a49eba780b58ed85673f64c60b3bb8bd [38;5;9m × log-1.0: Ownership of /var/log (1 failed)[0m [38;5;41m ✔ File /var/log should be directory[0m [38;5;9m × File /var/log should be owned by "root" expected `File /var/log.owned_by?("root")` to return true, got false[0m Profile Summary: 0 successful controls, [38;5;9m1 control failure[0m, 0 controls skipped
[1] — Извините за сильный язык. [2] — И держу пари, что вы подумали, что «пользовательский опыт» был только для фронт-разработчиков.
Оригинал: «https://dev.to/mattstratton/shifting-left-securely-with-inspec-6fk»