Перейти к содержанию

Секреты при разработке и сборке

Требования применяются к исходному коду, локальной среде разработки, тестам и сборке проекта. Доставка и эксплуатационный жизненный цикл production-секретов находятся вне области документа. Уровни обязательности определены в корневом README.md.

SEC-SCRT-001. Отсутствие секретов в исходных материалах

Уровень: MUST

Применяется к: репозиторию, build context и создаваемым артефактам

Секреты и действующие credentials не должны храниться в исходном коде, конфигурации, fixtures, snapshots, документации, истории миграций, build context или артефакте. Пример значения должен быть явно синтетическим и не должен проходить проверку как действующий credential.

Обоснование

Удаление значения из текущей версии не устраняет его из истории и ранее созданных артефактов.

Проверка

  • secret scanning репозитория, истории и build context;
  • поиск тестового секрета в итоговом артефакте и слоях image;
  • review fixtures и примеров.

Исключения

Публичный идентификатор, ошибочно называемый секретом владельцем технологии, не считается секретом после явной классификации в контракте проекта.

SEC-SCRT-002. Явные входы секретов

Уровень: MUST

Применяется к: команде разработки, теста или сборки, которой требуется секрет

Команда должна получать секрет только через явно объявленный secret input локального или CI-окружения. Значение не должно передаваться через аргумент командной строки, обычную build variable, имя файла артефакта или иной канал, доступный в process listing, логе либо metadata сборки. Отсутствующий secret input должен приводить к явной ошибке либо отключать только явно необязательную интеграцию. Input должен быть доступен только использующей его команде и не должен глобально экспортироваться другим jobs, стадиям image или cache. Ошибка должна указывать имя input без его значения; маскирование CI не должно быть единственным средством защиты.

Обоснование

Неявный ввод затрудняет определение доступа и приводит к сохранению значения в логах и metadata.

Проверка

  • запуск команды без обязательного input;
  • review объявления CI secret variables и локального интерфейса запуска;
  • проверка process arguments, job log, build metadata и последующей стадии.

Исключения

Краткоживущий синтетический credential изолированной тестовой системы может создаваться самим тестом и не передаваться как внешний input.

SEC-SCRT-005. Блокирующая проверка утечки

Уровень: MUST

Применяется к: merge request и release-сборке

CI должен выполнять secret scanning исходных файлов и создаваемого release-артефакта. Подтверждённая утечка должна блокировать merge или release. Allowlist должна сопоставлять finding с синтетическим значением или классификацией, иметь узкую область и проверяться вместе с изменением.

Обоснование

Проверка до поставки предотвращает публикацию секрета и превращение исключения в скрытый глобальный пропуск.

Проверка

  • контролируемый fixture с тестовым секретом;
  • проверка блокировки pipeline;
  • review области allowlist.

Исключения

Ложное срабатывание допускается в allowlist только с проверяемым основанием.