Practical Magic: The Resilience Potion & Security Chaos Engineering • Kelly Shortridge • GOTO 2023
Интересное
выступление от Kelly Shortridge, Senior Principal at Fastly, про Security Chaos Engineering, про которую она написала
одноименную книгу.
В самом докладе автор рассказывает про 5 составляющих устойчивость (resilience) системы:
1.
Define the system’s critical functions
Зная что относится к критическому функционалу, легко понять что в него не входит, а это позволяет более осознанно действовать как при разработке, так и во время инцидентов. Например, ясно где стоит использовать скучные, но предсказуемые технологии:) Новые и модные технологии стоит использовать там, где это выступает для бизнес-проблем в качестве market differentiator. Здесь же идет речь про важность стандартизации: языков, бибилиотек и tooling. Автор обращает внимание на вопрос memory safety, а потом переходит к важности понимания и работы со своими зависимостями. Также работа с данными требует особого обращения - надо ограничивать доступ к чувствительной информации.
2. Define the system’s safe boundaries
Здесь автор выдает такую фразу "A lot of getting security “right” is just solid engineering. Security is a facet of quality", которая позволяет аргументировать внедрение хороших инженерных практик не только с точки зрения оптимизации темпа разработки или улучшения качества, но и с точки зрения рисков (как любят строить аргументы security специалисты). В этом же разделе автор говорит о том, что надо предвидеть масштабирование системы и думать о том, как она будет себя чувствовать при изменившихся условиях. Нам надо предвидеть потребность в реакции на инциденты наших ops/SRE команд. Дальше здесь опять идет речь про стандартизацию, но на этот раз паттернов и инструментов. Автор предлагает не создавать самим middleware, но предоставить командам список проверенных библиотек и сервис провайдеров, которые им стоит использовать. Плюс команды опять же должны знать про свои зависимости и понимать какие там могут быть ошибки. Если думать про уязвимости, то их надо классифицировать по тому, насколько атаку легко автоматизировать и масштабировать, а также насколько атака далека от целей атакующего. И с учетом этого можно приоритизировать устранение уязвимостей.
3. Observe system interactions across spacetime
Для построения безопасных и устойчивых систем нам нужна observability как с точки зрения топологии систем, так и с точки зрения изменений во времени. Дальше идет речь про ментальные модели, которые мы строим для понимания системы, а также про тестирование как систем, так и наших ментальных моделей. Автор топит за integration tests и ругает unit tests, но это кажется последствия профессиональной деформации. Дальше заходит речь про chaos engineering (например, есть такая
книга), а потом про то, как это переходит в security chaos engineering. Автор рассказывает про стандартный цикл: постановку гипотезы, проведение экспериментов, анализ результатов и постановку задач на улучшение.
4. Feedback loops and a learning culture
Здесь автор говорит про важность обратных связей и обучения для улучшения ситуации. И тут на сцену выходит distributing tracing, который нам просто необходим:) Про тему с распределенным трейсингом можно прочитать отдельную книгу "
Distributed Tracing in Practice"
5. Flexibility and willingness to change
В общем и целом, без желания меняться и менять систему не построить устойчивую систему. Это про адаптацию и про рефакторинг, про изменение кода наших систем и про простоту внесения изменений. Дальше автор рассказывает про статическую типизацию кода как помощь при рефакторинге:) Дальше автор переходит к модульности и появляются отсылки к coupling и тому, что модули формируют локальные границы для изоляции друг от друга. А isolation - это ключевое свойство, которое поддерживает system resilience. Дальше автор рассказывает про использование sandbox для исполнения опасного кода.
Напоследок автор рассказывает как менять систему, используя паттерн "Strangler Fig", про которую
рассказывал неплохо Мартин Фаулер почти 20 лет назад.