Код-ревью 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. Безопасностьстрока 1
    pull_request_target с checkout кода из PR (строки 10-11): код из форка выполняется с доступом к секретам репозитория.
  2. Безопасностьстрока 3
    Идентификатор ключа AWS захардкожен в файле, а долгоживущие ключи вместо OIDC-федерации с временными учётными данными.
  3. Безопасностьстрока 13
    Секрет записывается в файл, который загружается как артефакт: маскирование логов это не спасает.
  4. Безопасностьстрока 16
    Деплой выполняется для любого события, включая пулреквесты, без ограничения на ветку и environment с подтверждением.
  5. Стильстрока 9
    Сторонние действия лучше закреплять по полному SHA коммита, а не по тегу.

Разбор

CI самое привилегированное место компании: у него ключи от прода. Правила: не выполнять недоверенный код с секретами, OIDC вместо статических ключей, секреты не выводить ни в логи, ни в артефакты, деплой только из защищённой ветки.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме