Секреты при разработке и сборке¶
Требования применяются к исходному коду, локальной среде разработки, тестам и
сборке проекта. Доставка и эксплуатационный жизненный цикл 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 только с проверяемым основанием.