Код-ревью Middle Секреты и управление ключами обновлено
Ревью: пайплайн CI
Вопрос
Найдите проблемы безопасности в workflow GitHub Actions.
on: [push, pull_request_target]
env:
AWS_ACCESS_KEY_ID: AKIAIOSFODNN7EXAMPLE
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET }}
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
- run: npm ci && npm test
- run: echo "token is ${{ secrets.DEPLOY_TOKEN }}" > debug.txt
- uses: actions/upload-artifact@v4
with: { name: debug, path: debug.txt }
- run: ./deploy.sh
Коротко
CI самое привилегированное место компании: у него ключи от прода. Правила: не выполнять недоверенный код с секретами, OIDC вместо статических ключей, секреты не выводить ни в логи, ни в артефакты, деплой только из защищённой ветки.
Что должен найти ревьюер
- Безопасностьстрока 1
pull_request_targetс checkout кода из PR (строки 10-11): код из форка выполняется с доступом к секретам репозитория. - Безопасностьстрока 3Идентификатор ключа AWS захардкожен в файле, а долгоживущие ключи вместо OIDC-федерации с временными учётными данными.
- Безопасностьстрока 13Секрет записывается в файл, который загружается как артефакт: маскирование логов это не спасает.
- Безопасностьстрока 16Деплой выполняется для любого события, включая пулреквесты, без ограничения на ветку и environment с подтверждением.
- Стильстрока 9Сторонние действия лучше закреплять по полному SHA коммита, а не по тегу.
Разбор
CI самое привилегированное место компании: у него ключи от прода. Правила: не выполнять недоверенный код с секретами, OIDC вместо статических ключей, секреты не выводить ни в логи, ни в артефакты, деплой только из защищённой ветки.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.