Files
huncode 42e4060f92
Build and deploy / deploy (push) Successful in 15s
revise June 2023 supply chain articles
2026-07-31 14:53:35 +03:00

10 KiB
Raw Permalink Blame History

П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 и отдельный коммит только этой июньской партии.