![image](https://habrastorage.org/webt/od/4o/gv/od4ogv5-jd9xuhbvut_ifcrgiwe.jpeg)
DevOps подразумевает автоматизацию процессов сборки, настройки и развертывания ПО. Плюс — помогает наладить работу айтишников с другими подразделениями в компании: сократить time-to-market при запуске новых продуктов, снизить время разрешения инцидентов и упростить выпуск релизов.
Но у положительных качеств есть и обратная сторона — с ускорением цикла разработки возрастает риск увеличения воспроизводимых уязвимостей. Чтобы минимизировать его, компании обращаются к практике DevSecOps.
По основам DevOps-подхода материалов уже много (включая наш бесплатный курс), но о принципах интеграции практик безопасности в непрерывный процесс разработки говорят недостаточно.
Обсудим, какие навыки рекомендуют подтянуть эксперты, чтобы влиться в безопасную разработку приложений — как новичкам, так и тем, кто уже имеет опыт в системном анализе, администрировании и написании кода.
Когда Sec приходит в DevOps
![image](https://habrastorage.org/webt/ez/vm/w2/ezvmw2ev2pm3rrflvwgwh_im3hg.png)
DevSecOps и облако имеют тесную связь. Облако дает возможность быстро развертывать приложения и оперативно получать ресурсы. В рамках DevSecOps-подхода можно разрабатывать и использовать инструменты для автоматизации тестирования, анализа уязвимостей и мониторинга безопасности в облачной среде. Методология поможет в обеспечении безопасности при работе с облачными сервисами.
Важным аспектом DevSecOps является то, что в цикл разработки включаются ИБ-специалисты. Их задача — гарантировать, что компоненты и конфигурационные элементы технологического стека пропатчены, грамотно настроены и имеют актуальную документацию.
DevSecOps-инженеров не хватает, они востребованы. На западном рынке, по данным компании Techstrong Group, число открытых вакансий превышает количество компетентных сотрудников в четыре раза.
Специалистов по DevSecOps не обучают в вузах, а самостоятельно погрузиться в тему бывает затруднительно. Профессиональная среда довольно динамична и сурова к новичкам. Требуемый набор знаний и опыта сопоставим с умениями и навыками крепкого миддла.
Установленного списка лучших практик не существует, поскольку в каждой компании свой набор стандартов и стек, от которого необходимо отталкиваться. Однако можно попытаться выделить несколько общих областей знаний.
Операционные системы
DevSecOps-инженер должен разбираться в устройстве ОС, чтобы решать вопросы оптимизации и обходить стороной потенциальные уязвимости. В этом ключе эксперты рекомендуют изучить:
- сокеты;
- файловые системы;
- хранилища данных;
- виртуализацию.
Позже все это пригодится для взаимодействия с облаком и облачными сервисами — экспертиза в этой области DevSecOps-специалисту также необходима.
Учитывая облачный контекст, в качестве базовой стоит выбрать Linux. Более того, 67% вакансий содержат в списке требований именно эту ОС. Она встречается примерно в два раза чаще, чем Windows. Однако специалисту не нужно проводить сборку ядра и достаточно общего представления о системе.
Как научиться
- Необходимыми навыками обладает подавляющее большинство системных администраторов. Для тех, кто не знаком с темой, хорошей точкой для старта может стать книга How Linux Works. Она частый гость профильных подборок «Лучшие книги по Linux», и её можно найти в свободном доступе.
- Пройдите базовые курсы по администрированию ОС Linux. На YouTube есть много энтузиастов, записывающих тематические ролики — например, посвященные терминальным командам.
- Также можем рекомендовать более продвинутые книги: The Linux Programming Interface и Learning Modern Linux от O’Reilly. В них собрана детальная информация обо всех процессах, происходящих под капотом операционной системы (в том числе, в контексте облака), с примерами программ и практическими упражнениями.
Языки программирования
DevSecOps-инженерам необходимо понимать код, который пишет команда разработки. В требованиях к большей части вакансий на эту должность указан один или сразу несколько языков программирования. Если вы переходите в сферу DevSecOps из системного администрирования, то, очевидно, стоит ознакомиться с наиболее используемым ЯП внутри компании — на котором пишут продукты и сервисы.
Если есть возможность выбрать язык для изучения, то можно остановиться на Python или Go — это хорошие варианты для начинающих. Так, на Go мы пишем корпоративные и клиентские сервисы. Из недавних релизов — сервис сетевой балансировки.
Тем, кто уже знаком с каким-либо ЯП, нужно подтянуть знания в безопасном программировании, изучить соответствующие подходы и концепции. В частности, анализ композиции программного кода (SCA, Software Composition Analysis) — это часть методологии DevSecOps. Она позволяет построить карту зависимостей и получить представление о потенциальных векторах атак. Также стоит присмотреться к статическому тестированию безопасности приложений (SAST, Static application security testing).
Как научиться
- В онлайн-сообществе freeCodeCamp составили дорожную карту для изучения JavaScript, HTML и CSS, но с майлстоунами и для других ЯП.
- Начать знакомство с новым языком можно с профильной литературы. Конкретные книги будут зависеть от ЯП. Например, для Python это может быть бесплатная A Byte of Python, а некоторые ресурсы по Go мы приводили в одном из наших прошлых материалов.
- Если говорить о безопасном программировании, то стоит обратить внимание на блог Secure Code Warrior. Там собраны материалы по ИБ и лучшие практики написания кода.
Облачные технологии
Значительная часть технологий, которые используют DevSecOps-специалисты, связана с облаком. Поэтому важно разбираться хотя бы в базовой облачной терминологии и техниках. После можно переходить к изучению сервисов вашего корпоративного облачного провайдера. Список сильно варьируется — от сетевых утилит до инструментов построения защищенных контуров.
Если говорить о конкретных решениях, стоит уделить внимание Kubernetes. Этот оркестратор — один из ключевых инструментов CI/CD, так как серьезно ускоряет развертку приложений, позволяет создавать сервисы, которые автоматически масштабируются под требуемую нагрузку. Подробнее о Kubernetes и запуске приложений в облако можно узнать на нашем вебинаре.
Из других обязательных технологий — GitHub и Jenkins. Если говорить о сфере Infrastructure as Code, то это — Terraform, с помощью которого можно автоматизировать масштабирование сервисов через запросы API, а в области управления конфигурациями — Ansible, Chef и Puppet.
Как научиться
- Лучший способ погрузиться в облачные технологии — это практика. Например, можно начать с построения Python-приложения.
- Когда необходимо масштабировать приложение, можно обратиться за знаниями к таким ресурсам, как Codelabs и Cloud Skills Boost.
Наконец, навыки коммуникации
Для DevSecOps необходимы коммуникативные навыки, которые помогут наладить контакт с коллегами. Скорее всего, на звонках и совещаниях придется делиться своим видением публично с несколькими подразделениями. Еще и общаться придется на такую тонкую тему как информационная безопасность — обсуждать соответствующие риски, ошибки и недочеты.
Навыки коммуникации жизненно необходимы, чтобы грамотно обосновать внедрение того или иного подхода или системы безопасности.
Как научиться
- О том, как развивать навыки коммуникации, подробно рассказывали на Хабре.
- К списку выше можно добавить такие источники, как «Убеждай и побеждай. Секрет эффективной аргументации», а также «iПрезентация. Уроки убеждения от лидера Apple Стива Джобса».
TL;DR
Если у вас есть опыт в сфере системного администрирования, то для погружения в DevSecOps достаточно подтянуть ЯП, изучить инструментарий для CI/CD (о важности внедрения инструментов безопасности в конвейер CI/CD мы подробно рассказывали тут).
Разработчикам необходимо обратить внимание на особенности Linux и настройку облачной инфраструктуры. Всем специалистам важно поработать над soft skills. В целом этого вполне достаточно, чтобы претендовать на должность DevSecOps-инженера.
Тем, кто только начинает свой путь в сфере DevSecOps, будет сложнее. Придется с нуля изучать весь необходимый инструментарий. В таком случае имеет смысл освоить одну из «переходных» профессий — сисадмина или условного разработчика на Go (см. статью «из аналитиков в Go-разработчики»).
![](https://habrastorage.org/webt/by/sc/ee/bysceeg1h0dg3y_oodvezw6oymo.png)