10 KiB
10 KiB
П64 · 2023-06 · Секреты и цепочка поставки — три прохода саморевью
Рамка пакета
- Slug:
editorial-2023-06-practice-secrets-supply-chain,editorial-2023-06-mechanism-secrets-supply-chain,editorial-2023-06-field-secrets-supply-chain. - Голос: М6, июнь 2023 года. Системный практик идёт от наблюдаемого deploy к раздельным фактам source, builder, secret boundary, artifact digest, attestation declaration и release. Формула текста: «симптом → причина → проверка → действие»; без обещаний, будто учебная модель наблюдала CI.
- Главная граница: пакет строит только детерминированные
synthetic-*objects в памяти. Он не читает CI, сеть, registry, secret store, файлы или журналы; не создаёт secret, certificate, signature, attestation, SBOM и deploy; не проверяет provenance, identity, claims, образ или среду. - Sidecar содержит ровно пять новых файлов: этот review, один upgrade-скрипт и три локальных SVG. Registry, README,
articles.json, очередь, документация, Git, чужие файлы и релизные данные не менялись.
Проход 1 — источники, факты и границы
- Историческая граница перепроверена 31.07.2026 по первичным и официальным источникам. К июню 2023 уже были доступны: SLSA v1.0 final, 19.04.2023, версионная SLSA specification v1.0, Cosign v2.0.0, 24.02.2023 и NIST SP 800-218 SSDF v1.1 Final, 03.02.2022. У SLSA v1.0 сейчас retired-статус, но ссылка фиксирует именно сохранённую историческую версию; в тексте не используется текущая v1.2 как материал автора 2023 года.
- Фактическая формулировка ограничена источниками: SLSA v1.0 задаёт язык уровней, provenance и рекомендуемых attestation formats; Cosign v2.0.0 существовал как официальный release; SSDF даёт общий язык безопасной разработки. Ни один источник не используется как доказательство состояния данного проекта или конкретного pipeline.
assembleSyntheticSupplyChain()принимает толькоsynthetic: trueи явно помеченные labels. Она отклоняет отсутствие builder, не-synthetic input, другой subject digest и value-like label секрета. Valid branch намеренно оставляетsignature: not-created,verification: not-run,provenance: not-verifiedиrelease: manual-review-required.runSupplyChainFixture()содержит 16 assertions о памяти: структура links, reference-only secret label, совпадение subject и digest, закрытый набор входных полей, отрицательные ветки, отсутствие создания crypto material, граница модели и предел rollback. Нет assertions о настоящем secret, certificate, signature, attestation, scanner, CI, network, registry, deploy или provenance.- Во всех трёх статьях отдельно сказано: declaration signing или attestation не доказывает provenance и не доказывает, что deployed artifact является тем же артефактом, пока отдельная проверка не сопоставит subject, доверенную identity, условия builder, digest и deploy input.
Проход 2 — голос, полнота и объём
- Первые два абзаца каждой статьи содержат проблему и цену: аудит видит только deploy, а секрет или неподписанный output может пройти ранние звенья без связанного evidence. Это не объявляется инцидентом, утечкой или свойством локального CI.
- Три статьи различают задачи: practice строит карту trust boundary, mechanism разделяет data/declaration/verification/provenance, field ведёт диагностику неполной цепочки и решение о stop/rollback. В каждой есть отдельная таблица, содержательная SVG с alt/caption, исполнимый fixture/code, упорядоченный маршрут, ограничения, rollback и следующий шаг.
- Внутренний revision builder считает основной текст без списка источников и удерживает диапазон 5 000–15 000 знаков. Фактический объём: practice — 9 084, mechanism — 10 055, field — 10 282 знака. Тон соответствует М6: короткие технические утверждения, отдельные статусы неизвестности и отсутствие выдуманных метрик, incident story или опыта эксплуатации.
- В учебных примерах нет реальных secrets, tokens, URLs рабочей системы, policies, CVE, CI logs или scanner data. External URLs находятся только в списке проверяемых официальных источников; фикстура использует synthetic labels и относительный путь к своему модулю.
Проход 3 — визуалы, безопасность и выпуск
- SVG разделяют вопросы: trust-boundaries показывает шесть звеньев и их неполное доказательное значение; attestation-contract отделяет input fields от declaration и verification; release-decision показывает ручной статус для любой отсутствующей связи. На первом рендере 375 px были исправлены пересечение подписи с boundary и наложение веток дерева; повторный визуальный проход подтвердил читаемость без обрезки текста.
- В SVG нет
script,foreignObject, внешних URL,data:image, event handlers, пользовательского ввода или интерактивности. Подписи фигур прямо отделяют схему от реальной сети, CI, certificate, registry, deploy и policy. - До интеграции выполнены:
node --check web/scripts/upgrade-2023-06.mjs— PASS;node web/scripts/upgrade-2023-06.mjs --verify-fixture— PASS 16/16 после независимого model review;cd web && npm run audit:draft -- scripts/upgrade-2023-06.mjs— PASS для трёх slug; отдельная import-safe проверка — PASS, 3 revisions безdate/author;xmllint --nooutдля трёх SVG — PASS; SVG safety scan — clean; Sharp-review всех SVG на ширине 375 px — PASS после корректировки компоновки. - Пакет сознательно не интегрирован: registry, README,
articles.json, строгий аудит поверх registry, production build, staging, commit и push оставлены главному агенту для отдельного ревью и приёмки.
Приёмка главного редактора
- Первичные источники сверены отдельно от рукописи: SLSA подтверждает выпуск v1.0 19.04.2023 и сохранённая v1.0 specification прямо описывает уровни и рекомендуемые attestation formats, включая provenance; GitHub release Cosign v2.0.0 показывает публикацию 24.02.2023; NIST CSRC фиксирует SSDF v1.1 Final от 03.02.2022. Это исторические опорные точки, не evidence данного pipeline.
- Независимый model review обнаружил, что accepted fixture игнорировал дополнительные входные поля: реальное значение могло оказаться в
secretValue, хотя returned record его не копировал. Вход сделан plain-record и закрытым whitelist; неизвестное поле отклоняется до сборки. Одновременно rollback начал сохранять subject и declaration вместе с четырьмя остальными labels, чтобы не восстанавливать неполный контракт. Fixture проходит 16/16 и включает отрицательный case дляsecretValue. - Все три SVG прошли XML и safety scan; просмотр на 375 px подтвердил порядок стрелок, читаемость критичных подписей и отсутствие обрезки. Строгий audit после подключения revision: 9 132 / 10 261 / 10 350 знаков, по одной фигуре, таблице и примеру. Registry содержит 187 уникальных revision; production build прошёл с 374 статическими страницами.
articles.jsonи чужие рабочие изменения не редактировались. Следующий этап — staging и отдельный коммит только этой июньской партии.