monumental-archive-db

Проекты, которые следуют приведенным ниже лучшим практикам, могут добровольно и самостоятельно оценить себя и продемонстрировать, что они получили значок Open Source Security Foundation (OpenSSF).

Не существует набора практик, гарантирующего, что у программного обеспечения никогда не будет недостатков или уязвимостей; даже формальные методы могут не помочь, если спецификации или допущения ошибочны. Также не существует какой-либо практики, которая могла бы гарантировать, что проект будет поддерживать здоровое и хорошо функционирующее сообщество разработчиков. Однако следующие хорошие правила могут помочь улучшить результаты проектов. Например, некоторые правила описывают ревью несколькими участниками перед выпуском, что может помочь найти технические уязвимости, которые было бы сложно найти другим способом, и помочь построить доверие и желание дальнейшего взаимодействия между разработчиками из разных компаний. Чтобы получить значок, нужно выполнить все критерии с ключевыми словами "НЕОБХОДИМО"/"ОБЯЗАН"/"НЕДОПУСТИМО", все критерии со словом "СЛЕДУЕТ" либо должны удовлетворяться, либо должно быть приведено обоснование их невыполнения, и все критерии со словом "ЖЕЛАТЕЛЬНО" могут быть удовлетворены ИЛИ неудовлетворены (желательно, чтобы они были хотя бы рассмотрены). Если вы хотите ввести общий комментарий вместо объяснения, почему текущая ситуация приемлема, начните текст с '//' и пробела. Приветствуется обратная связь через сайт на GitHub в виде issues или pull requests. Существует также список рассылки для общих вопросов.

Мы с удовольствием предоставляем информацию на нескольких языках, однако, если есть какой-либо конфликт или несоответствие между переводами, английская версия является авторитетной.
Если это ваш проект, пожалуйста, отобразите статус вашего базового значка на странице проекта! Статус базового значка выглядит так: Базовый уровень значка для проекта 13998 - baseline-1 Вот как встроить базовый значок:
Вы можете показать статус базового значка, вставив это в ваш файл markdown:
[![OpenSSF Baseline](https://www.bestpractices.dev/projects/13998/baseline)](https://www.bestpractices.dev/projects/13998)
или вставив это в ваш HTML:
<a href="https://www.bestpractices.dev/projects/13998"><img src="https://www.bestpractices.dev/projects/13998/baseline"></a>


Это критерии Базового Уровня 3. Это критерии версии v2026.08.28.

Baseline Series: Базовый уровень 1 Базовый Уровень 2 Базовый Уровень 3

        

 Основы

  • Общая

    Обратите внимание, что другие проекты могут использовать то же имя.

    The Monumental Archive's PostgreSQL image: official postgres + PostGIS, pgaudit, edtf_postgres — native multi-arch, tested before published, cosign-signed

    Используйте формат выражения лицензии SPDX; примеры включают «Apache-2.0», «BSD-2-Clause», «BSD-3-Clause», «GPL-2.0+», «LGPL-3.0+», «MIT» и «(BSD-2-Clause OR Ruby)».
    Если используется более одного языка, перечислите их через запятую (пробелы необязательны), и отсортируйте их от наиболее до наименее используемого. Если список длинный, пожалуйста, перечислите по крайней мере три наиболее распространенных. Если языка нет (например, это проект только для документации или только для тестирования), используйте один символ «-» (минус). Для каждого языка используйте общепринятую капитализацию названия, например «JavaScript».
    Common Platform Enumeration (CPE) - это структурированная схема именования для информационных систем, программного обеспечения и пакетов. Она используется в ряде систем и баз данных для отчетов об уязвимостях.

 Элементы управления 18/21 ●

  • Элементы управления


    Когда задаче назначаются разрешения в конвейере CI/CD, исходный код или конфигурация ДОЛЖНЫ назначать только минимальные привилегии, необходимые для соответствующей деятельности. [OSPS-AC-04.02]
    Настройте конвейеры CI/CD проекта так, чтобы по умолчанию назначать пользователям и службам наименьшие доступные разрешения, повышая разрешения только когда это необходимо для конкретных задач. В некоторых системах контроля версий это может быть возможно на уровне организации или репозитория. Если нет, установите разрешения на верхнем уровне конвейера.

    Scopes are granted per job and each grant carries an inline comment saying why: packages: write only on the jobs that push an image, id-token: write only on the job that needs Sigstore OIDC. Everything else inherits the top-level contents: read. Runners additionally enforce egress-policy: block and disable-sudo where applicable.



    Конвейеры CI/CD, принимающие входные данные от доверенных коллабораторов, ДОЛЖНЫ санировать и проверять эти входные данные перед их использованием в конвейере. [OSPS-BR-01.04]
    Конвейеры CI/CD должны санировать (заключать в кавычки, экранировать или завершаться при ожидаемых значениях) все входные данные коллабораторов при явном выполнении рабочих процессов. Хотя коллабораторы в целом являются доверенными, ручные входные данные для рабочего процесса не могут быть проверены и могут быть использованы в злоумышленных целях при захвате учётной записи или угрозе изнутри.

    No collaborator-supplied value is interpolated into a shell step. Enforced rather than asserted: zizmor at --persona=pedantic and actionlint run on every commit and in CI, and CodeQL analyses the workflows as its actions language — the combination is specifically good at template injection, which is the form this failure takes in GitHub Actions.



    Когда создается официальный релиз, все активы в этом релизе ДОЛЖНЫ быть четко связаны с идентификатором релиза или другим уникальным идентификатором для актива. [OSPS-BR-02.02]
    Назначьте уникальный идентификатор версии каждому программному активу, произведенному проектом, следуя единообразному соглашению об именовании или схеме нумерации. Примеры включают SemVer, CalVer или идентификатор git-коммита.

    Every asset is identified by content: each layer and each per-architecture manifest carries its own sha256 digest, and the multi-arch index digest commits to all of them. The index is additionally tagged :sha-<commit>, associating the whole set with the exact commit that produced it. Nothing in a publish is identified by anything mutable.



    НЕОБХОДИМО, чтобы проект определил политику управления секретами и учетными данными, используемыми проектом. Политика должна включать руководства по хранению, доступу и ротации секретов и учетных данных. [OSPS-BR-07.02]
    Задокументируйте, как секреты и учетные данные управляются и используются в рамках проекта. Это должно включать подробную информацию о том, как хранятся секреты (например, с использованием инструмента управления секретами), как контролируется доступ, и как секреты ротируются или обновляются. Убедитесь, что конфиденциальная информация не встроена в исходный код и не хранится в системах контроля версий.

    The policy is documented and unusually simple, because the project deliberately holds nothing to manage: no long-lived registry or signing credential exists. GHCR authentication uses the workflow run's own short-lived token, and signing is keyless — an ephemeral Sigstore certificate bound to the workflow's OIDC identity, so there is no private key at rest to store, access or rotate. https://github.com/CarlAllenn/monumental-archive-db/blob/main/GOVERNANCE.md#access-continuity states this explicitly and gives the reason it was chosen: a private key is precisely the artifact that cannot be inherited by a successor. On the consumer side, https://github.com/CarlAllenn/monumental-archive-db/blob/main/SECURITY.md is equally explicit that the image ships no credentials and that POSTGRES_PASSWORD handling is the deployer's. Enforcement against accidents: gitleaks on every commit and over full history, plus persist-credentials: false on every checkout.



    Когда проект выпустил релиз, документация проекта ДОЛЖНА содержать инструкции по проверке целостности и подлинности активов релиза. [OSPS-DO-03.01]
    Инструкции в проекте должны содержать информацию об используемой технологии, командах для выполнения и ожидаемом выводе. По возможности избегайте хранения этой документации в том же месте, что и конвейер сборки и выпуска, чтобы избежать компрометации как программного обеспечения, так и документации для проверки целостности программного обеспечения в случае единичного нарушения безопасности.

    Both the README and https://github.com/CarlAllenn/monumental-archive-db/blob/main/SECURITY.md#verifying-what-you-pulled give the exact cosign command, including the certificate identity regexp and the OIDC issuer. Integrity is additionally verifiable by digest alone, since consumers pin digests rather than tags.



    Когда проект выпустил релиз, документация проекта ДОЛЖНА содержать инструкции по проверке ожидаемой личности человека или процесса, создающего программный релиз. [OSPS-DO-03.02]
    Ожидаемая личность может быть в форме идентификаторов ключей, используемых для подписи, эмитента и личности из сертификата sigstore или других подобных форм. По возможности избегайте хранения этой документации в том же месте, что и конвейер сборки и выпуска, чтобы избежать компрометации как программного обеспечения, так и документации для проверки целостности программного обеспечения в случае единичного нарушения безопасности.

    The published verification command names the expected author process precisely: the certificate identity is this repository's publish workflow, anchored through @refs/heads/main$ so a signature minted from any other ref does not verify. The documentation states plainly that a signature not verifying against that identity is not ours, whatever the tag says. The same string appears in the README, SECURITY.md and the pipeline's own post-signing verification step, so the three cannot drift apart silently.



    Когда проект выпустил релиз, документация проекта ДОЛЖНА включать описательное заявление о масштабе и сроках поддержки для каждого релиза. [OSPS-DO-04.01]
    Для информирования о масштабе и сроках поддержки выпущенных программных активов проекта, проект должен иметь файл SUPPORT.md, раздел "Поддержка" в SECURITY.md или другую документацию, объясняющую жизненный цикл поддержки, включая ожидаемую продолжительность поддержки для каждого релиза, типы предоставляемой поддержки (например, исправления ошибок, обновления безопасности) и любые соответствующие политики или процедуры получения поддержки.

    https://github.com/CarlAllenn/monumental-archive-db/blob/main/SECURITY.md#supported-versions — the latest published digest only, with the reasoning: this image has no version surface of its own, so there are no back-branches to maintain. Support consists of the weekly cache-free rebuild plus pin bumps, and the upgrade path is a digest bump, which is what Renovate is for.



    Когда проект выпустил релиз, документация проекта ДОЛЖНА предоставлять описательное заявление о том, когда релизы или версии больше не будут получать обновления безопасности. [OSPS-DO-05.01]
    Для информирования о масштабе и сроках поддержки исправлений безопасности, проект должен иметь SUPPORT.md или другую документацию, объясняющую политику проекта в отношении обновлений безопасности.

    The same section states it without euphemism: only the latest published digest is supported. A superseded digest receives no further security updates — it is immutable and remains exactly as published. Because consumers pin digests, this is a property they control directly: a fix reaches you when you bump the digest.



    Документация проекта ОБЯЗАНА содержать политику, согласно которой соавторы кода проходят проверку перед предоставлением им расширенных прав доступа к чувствительным ресурсам. [OSPS-GV-04.01]
    Опубликуйте исполняемую политику в документации проекта, которая требует, чтобы участники кода были проверены и одобрены до предоставления повышенных разрешений на доступ к критическим ресурсам, таким как одобрение слияния или доступ к секретам. Рекомендуется, чтобы проверка включала установление обоснованной линии идентичности, такой как подтверждение связи участника с известной доверенной организацией.

    Honest miss. https://github.com/CarlAllenn/monumental-archive-db/blob/main/GOVERNANCE.md describes the current single-maintainer model and says committer status would evolve with the project if it gained regular contributors, but it does not state a policy for vetting a collaborator before escalated permissions are granted. Nothing has been granted to date, so the gap is theoretical rather than active — but a policy written after the first request is worth less than one written before it, which is the point of this control. Tracked for fix as a short addition to GOVERNANCE.md.



    Когда проект выпустил релиз, все скомпилированные выпущенные программные активы ДОЛЖНЫ поставляться со списком компонентов программного обеспечения (Software Bill of Materials). [OSPS-QA-02.02]
    Рекомендуется автоматически генерировать SBOM во время сборки с использованием инструмента, который был проверен на точность. Это позволяет пользователям получать эти данные стандартизированным способом наряду с другими проектами в их среде.

    Every published image carries an SPDX SBOM attestation generated at build time (sbom: true), alongside a provenance attestation at mode=max. Both are attached to the manifest and retrievable by digest. Note the SBOM is generated by the build that produced the image rather than reconstructed afterwards, so it describes the bytes that shipped.



    Когда проект выпустил релиз, состоящий из нескольких репозиториев исходного кода, все подпроекты ДОЛЖНЫ применять требования безопасности, которые являются столь же строгими или более строгими, чем первичная кодовая база. [OSPS-QA-04.02]
    Любые дополнительные репозитории кода подпроектов, созданные проектом и скомпилированные в релиз, должны применять требования безопасности в соответствии со статусом и целями соответствующей кодовой базы. В дополнение к следованию соответствующим требованиям OSPS Baseline, это может включать требование проверки безопасности, обеспечение отсутствия уязвимостей и обеспечение отсутствия известных проблем безопасности.

    The project is a single repository with no subprojects.



    Документация проекта ОБЯЗАНА четко описывать, когда и как выполняются тесты. [OSPS-QA-06.02]
    Добавьте раздел в документацию по участию в проекте, объясняющий, как запускать тесты локально и как запускать тесты в конвейере CI/CD. Документация должна объяснять, что тестируют тесты и как интерпретировать результаты.

    https://github.com/CarlAllenn/monumental-archive-db/blob/main/CONTRIBUTING.md#development-quick-start documents how — task smoke for the test suite, task ci for the whole gate, identical locally and in CI — and when: the lefthook hooks run the lint suite on every commit and build and smoke the image on push when the Dockerfile or the smoke script changed, and CI runs the full gate on every pull request. CONTRIBUTING also documents the one trap in the smoke script (the official entrypoint starts postgres twice on a fresh volume, so the script waits for the second ready line).



    Документация проекта ОБЯЗАНА включать политику, согласно которой все существенные изменения в программном обеспечении, создаваемом проектом, должны сопровождаться добавлением или обновлением тестов соответствующей функциональности в наборе автоматических тестов. [OSPS-QA-06.03]
    Добавьте раздел в документацию по участию в проекте, объясняющий политику добавления или обновления тестов. Политика должна объяснять, что представляет собой значительное изменение и какие тесты должны быть добавлены или обновлены.

    https://github.com/CarlAllenn/monumental-archive-db/blob/main/CONTRIBUTING.md#tests-are-part-of-the-change — a change to what the image contains comes with a smoke assertion that fails without it, with the reasoning stated: adding an extension without its assertion means the next refactor can silently drop it and the gate stays green. It is listed as one of the four ordered review checks, so it is applied at review rather than merely written down.



    Когда совершается коммит в основную ветку, система контроля версий проекта ДОЛЖНА требовать как минимум одного одобрения изменений человеком, не являющимся автором, перед слиянием. [OSPS-QA-07.01]
    Настройте систему контроля версий проекта так, чтобы она требовала как минимум одного одобрения изменений человеком, не являющимся автором, перед слиянием в релизную или основную ветку. Это можно достичь, требуя, чтобы запрос на включение изменений был рассмотрен и одобрен как минимум одним другим участником, прежде чем его можно будет объединить.

    Structurally unreachable, not an oversight. This is a single-maintainer project, so no non-author human approval is available; requiring one would block the only path to main rather than improve review. The compensating controls are documented: every change including the maintainer's own goes through a pull request against a ruleset-protected main with the full gate green as required status checks, and https://github.com/CarlAllenn/monumental-archive-db/blob/main/CONTRIBUTING.md#code-review sets out the ordered checks applied — which is explicit that maintainer-authored changes are self-reviewed against that list. Note the ruleset deliberately does not set require_last_push_approval: at required_approving_review_count 0 it reads like a free toggle but instead demands an approval a lone maintainer cannot give.



    Когда проект выпустил релиз, проект ДОЛЖЕН выполнить моделирование угроз и анализ поверхности атаки для понимания и защиты от атак на критические пути кода, функции и взаимодействия внутри системы. [OSPS-SA-03.02]
    Моделирование угроз - это деятельность, при которой проект рассматривает кодовую базу, связанные процессы и инфраструктуру, интерфейсы, ключевые компоненты и "думает как хакер", проводя мозговой штурм о том, как система может быть взломана или скомпрометирована. Каждая выявленная угроза перечисляется, чтобы проект мог затем подумать о том, как проактивно избежать или закрыть любые бреши/уязвимости, которые могут возникнуть. Убедитесь, что это обновляется для новых функций или критических изменений.

    https://github.com/CarlAllenn/monumental-archive-db/blob/main/docs/assurance-case.md#threat-model is an explicit threat model ordered by exposure, naming supply-chain substitution as primary and enumerating its four distinct points (base image, extension build stage, apt layer, published manifest), then CI compromise, known-vulnerable OS packages, and configuration that misleads a consumer — each with what is explicitly out of scope. The attack surface analysis is the trust-boundary section, which states what crosses each boundary and by what mechanism. https://github.com/CarlAllenn/monumental-archive-db/blob/main/docs/security-review-2026.md then tests that model against the implementation on a dated pass and records where it did not hold.



    Любые уязвимости в программных компонентах, не затрагивающие проект, ОБЯЗАНЫ учитываться в документе VEX, дополняющем отчет об уязвимости сведениями о невозможности эксплуатации. [OSPS-VM-04.02]
    Создайте поток VEX, сообщающий о статусе эксплуатируемости известных уязвимостей, включая детали оценки или любые меры по смягчению, препятствующие выполнению уязвимого кода.

    No VEX document is produced. trivy runs with --ignore-unfixed, so unfixed upstream findings are excluded from the gate rather than asserted non-exploitable with a machine-readable justification, and the report-only publish scan puts raw findings on the run log without dispositions. For an image whose CVE surface is almost entirely inherited from PostgreSQL, PostGIS, GDAL and Debian, a VEX would be genuinely useful to consumers — it would let them distinguish 'present in the image but not reachable in this configuration' from 'unremediated'. Tracked for fix.



    Документация проекта ОБЯЗАНА включать политику, определяющую порог для устранения проблем, выявленных при анализе состава программного обеспечения (SCA), связанных с уязвимостями и лицензиями. [OSPS-VM-05.01]
    Задокументируйте в проекте политику, определяющую порог для устранения результатов SCA, связанных с уязвимостями и лицензиями. Включите процесс выявления, приоритизации и устранения этих результатов.

    The threshold is documented and is the strictest available: trivy runs at all severities — UNKNOWN through CRITICAL — with --ignore-unfixed, so any finding with an available fix fails the gate. There is no severity cutoff below which a fixable vulnerability is tolerated. The configuration is https://github.com/CarlAllenn/monumental-archive-db/blob/main/trivy.yaml, listed in the coding-standard table at https://github.com/CarlAllenn/monumental-archive-db/blob/main/CONTRIBUTING.md#coding-standard, and the remediation model behind it is https://github.com/CarlAllenn/monumental-archive-db/blob/main/SECURITY.md. Licence findings are handled separately and more strictly by reuse lint, which gates CI on full REUSE 3.3 compliance.



    Документация проекта ОБЯЗАНА включать политику устранения нарушений, выявленных при анализе состава программного обеспечения (SCA), перед каждым выпуском. [OSPS-VM-05.02]
    Задокументируйте в проекте политику для устранения применимых результатов анализа состава программного обеспечения перед любым релизом и добавьте проверки статуса, которые подтверждают соответствие этой политике перед релизом.

    Documented, and the placement is a deliberate decision rather than an accident, so it is worth stating precisely. The blocking CVE gate lives on pull requests: nothing merges with a fixable vulnerability. It is deliberately NOT on the publish path, and https://github.com/CarlAllenn/monumental-archive-db/blob/main/SECURITY.md explains why — a CVE published tomorrow must not retroactively kill a publish, and the weekly remediation rebuild especially must not die because a scanner had a bad day. Publish runs scan report-only so every published digest still has its CVE state on the run log, and the actual remediation for the inherited layer is the weekly cache-free rebuild rather than a gate.



    Все изменения в кодовой базе проекта ОБЯЗАНЫ автоматически проверяться на соответствие задокументированной политике в отношении вредоносных зависимостей и известных уязвимостей в зависимостях, и блокироваться при выявлении нарушений, за исключением случаев, когда они заявлены и подавлены как неэксплуатируемые. [OSPS-VM-05.03]
    Создайте проверку статуса в системе контроля версий проекта, которая запускает инструмент анализа состава программного обеспечения для всех изменений в кодовой базе. Требуйте, чтобы проверка статуса проходила успешно, прежде чем изменения могут быть объединены.

    Every change is evaluated automatically and blocked on violation: trivy scans the filesystem and the built image on every pull request, and the scan tasks are deliberately never checksum-fingerprinted because vulnerability databases change without commits and a cached skip would be a false pass. Dependency provenance is gated too — https://github.com/CarlAllenn/monumental-archive-db/blob/main/scripts/check-edtf-attestation.sh proves the pinned extension image carries GitHub-attested provenance from edtf's own publish workflow at the matching release tag, which is a malicious-dependency control rather than a vulnerability one. Renovate keeps pins current between scans.



    Документация проекта ОБЯЗАНА включать политику, определяющую порог для устранения проблем, выявленных статическим анализом кода безопасности (SAST). [OSPS-VM-06.01]
    Задокументируйте в проекте политику, определяющую порог для устранения результатов статического тестирования безопасности приложений (SAST). Включите процесс выявления, приоритизации и устранения этих результатов.

    The threshold is zero, documented as such: https://github.com/CarlAllenn/monumental-archive-db/blob/main/CONTRIBUTING.md states that fixing tool output is never optional and that there are no bypass flags. Any finding from hadolint, shellcheck, actionlint, zizmor --persona=pedantic or CodeQL fails the gate regardless of severity, and the gate is enforced twice — locally by the lefthook hooks and remotely by required status checks on main.



    Все изменения в кодовой базе проекта ОБЯЗАНЫ автоматически проверяться на соответствие задокументированной политике в отношении слабых мест безопасности и блокироваться при выявлении нарушений, за исключением случаев, когда они заявлены и подавлены как неэксплуатируемые. [OSPS-VM-06.02]
    Создайте проверку статуса в системе контроля версий проекта, которая запускает инструмент статического тестирования безопасности приложений (SAST) для всех изменений в кодовой базе. Требуйте, чтобы проверка статуса проходила успешно, прежде чем изменения могут быть объединены.

    All changes are evaluated automatically and blocked on violation. Static analysis of everything this repository actually authors: hadolint on the Dockerfile, shellcheck and shfmt on the two scripts, actionlint and zizmor at --persona=pedantic on the workflows, and CodeQL's actions analysis on the workflows — which is where this repository's real privilege lives, since that is what holds GHCR push, OIDC and cosign signing. Suppression is not available as a bypass: new words go in .codespellrc rather than a lint disable, by documented policy.



Вы можете использовать инструменты и системы ИИ для предложения изменений через простой URL, например https://www.bestpractices.dev/ru/projects/13998/choose/edit?osps_ac_01_01_status=Met&osps_ac_01_01_justification=GitHub+enforced. Смотрите нашу систему автоматизированных предложений о том, как это сделать. Эти данные доступны по лицензии Community Data License Agreement – Permissive, Version 2.0 (CDLA-Permissive-2.0). Это означает, что получатель данных может распространять данные с изменениями или без них, при условии, что получатель данных предоставляет текст данного соглашения вместе с распространяемыми данными. Пожалуйста, укажите в качестве источника Carl Allen и участников OpenSSF Best Practices badge.

Владелец анкеты на значок проекта: Carl Allen.
2026-08-09 00:45:46 UTC, последнее изменение сделано 2026-08-09 01:33:27 UTC. Последний раз условия для получения значка были выполнены 2026-08-09 00:58:03 UTC.