Pinning версий
Тема дорожной карты · GitHub Actions
Закрепление версий actions — это важный метод обеспечения безопасности и стабильности в процессе разработки. Оно подразумевает ссылку на сторонние actions по неизменяемому SHA коммита, а не по изменяемому тегу, таким образом минимизируя риски, связанные с изменениями кода без вашего ведома. Это особенно важно, учитывая, что злонамеренный force-push или скомпрометированный мейнтейнер могут тихо изменить код, выполняемый runner'ом. Руководство GitHub по безопасности и проект OpenSSF Scorecard считают изменяемые ссылки источником рисков цепочки поставок, поскольку теги могут быть перемещены, тогда как SHA остается неизменным.
Инструменты, такие как Dependabot и Renovate, понимают закреплённые SHA и предлагают pull request с соответствующим semver-тегом в комментариях, что обеспечивает аудитируемость обновлений. Это позволяет контролировать и отслеживать изменения в зависимости, что крайне важно для поддержания качества и безопасности вашего кода. Сочетание закреплённых версий с минимальными правами доступа (permissions: read-all) и ограниченным доступом к секретам является базовым рецептом для упрочнения безопасности каждого workflow.
Как это работает
Pinning версий подразумевает ссылку на сторонние actions по неизменяемому SHA коммита, а не по изменяемому тегу. Это позволяет минимизировать риски, связанные с изменениями кода без вашего ведома. Помимо этого, следует использовать минимальные права доступа (permissions: read-all), чтобы ограничить доступ к секретам и другим чувствительным данным. OIDC (OpenID Connect) для cloud-auth также может быть использован для обеспечения безопасности доступа к ресурсам. Для production-среды рекомендуется использовать environment и требование наличия обязательных рецензентов, а также использовать конкуренцию для отмены старых запусков. Быстрый фидбек (smoke + lint на каждый PR, полный suite после merge) помогает поддерживать качество кода. Reusable workflows для shared-пайплайнов и branch protection с обязательными проверками также являются важными элементами для обеспечения безопасности и стабильности процесса разработки.
Когда применять
Аудит .github/workflows/ раз в квартал — это важная практика для поддержания безопасности и стабильности в процессе разработки. Сборник actions может быстро расти, и права доступа могут расширяться непреднамеренно, что может привести к утечке секретов. Инструменты, такие как pinact или похожие, могут быть использованы для SHA-пина actions массово. Для длинных workflows можно использовать concurrency: для экономии вычислительных ресурсов. Инструмент act (nektos/act) может быть использован для локального запуска workflows без сжигания квоты.
Типичные ошибки
Одной из распространенных ошибок при использовании pinning версий является бесконечное доверие издателям actions. Злонамеренный обновитель популярного action может скомпрометировать все ваши секреты, если вы не пините его по SHA. Другой распространенной ошибкой является превращение workflow-файлов в "junk drawer" — добавление новых зависимостей без должного планирования. Это может привести к накоплению ненужных и устаревших зависимостей. Также важно иметь план для ротации утечек секретов, включая детектирование утечек и план ротации.