monumental-archive-db

Les projets qui suivent les meilleures pratiques ci-dessous peuvent s'auto-certifier et montrer qu'ils ont obtenu le badge de la Open Source Security Foundation (OpenSSF).

Il n'existe aucun ensemble de pratiques qui garantissent que ce logiciel n'aura jamais de défauts ou de vulnérabilités ; même les méthodes formelles peuvent échouer si les spécifications ou les hypothèses sont fausses. Il n'y a pas non plus de pratiques qui peuvent garantir qu'un projet permettra de maintenir une communauté de développement saine et qui fonctionne bien. Toutefois, suivre les meilleures pratiques peut contribuer à améliorer les résultats des projets. Par exemple, certaines pratiques permettent la revue par plusieurs personnes avant publication, ce qui peut aider à trouver des vulnérabilités techniques difficiles à trouver autrement et à renforcer la confiance et un désir d'interaction répétée entre les développeurs de différentes entreprises. Pour gagner un badge, tous les critères DOIT et NE DOIT PAS doivent être satisfaits, tous les critères DEVRAIT doivent être satisfaits OU non satisfaits avec justification, et tous les critères PROPOSÉ doivent être satisfaits OU non satisfaits (nous voulons au moins qu'ils soient considérés). Si vous voulez entrer un texte de justification pour un commentaire générique, au lieu d'une raison justifiant que la situation est acceptable, commencez le bloc de texte avec '//' suivi d'un espace. Les commentaires sont les bienvenus via le site GitHub en tant que problèmes ou pull requests. Il existe également une liste de diffusion pour discussion générale.

Nous fournissons volontiers l'information dans plusieurs langues, cependant, s'il existe un conflit ou une contradiction entre les traductions, la version anglaise est la version qui fait autorité.
Si c'est votre projet, veuillez afficher votre statut de badge de référence sur la page de votre projet ! Le statut du badge de référence ressemble à ceci : Le niveau du badge de référence pour le projet 13998 est baseline-1 Voici comment intégrer le badge de référence :
Vous pouvez afficher votre statut de badge de référence en incorporant ceci dans votre fichier markdown :
[![OpenSSF Baseline](https://www.bestpractices.dev/projects/13998/baseline)](https://www.bestpractices.dev/projects/13998)
ou en incorporant ceci dans votre HTML :
<a href="https://www.bestpractices.dev/projects/13998"><img src="https://www.bestpractices.dev/projects/13998/baseline"></a>


Voici les critères du niveau de référence 3. Il s'agit des critères version v2026.08.28.

Baseline Series: Niveau de référence 1 Niveau de référence 2 Niveau de référence 3

        

 Notions de base

  • Général

    Notez que d'autres projets peuvent utiliser le même nom.

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

    Utilisez un format d'expression de licence SPDX ; des exemples sont « Apache-2.0 », « BSD-2-Clause », « BSD-3-Clause », « GPL-2.0+ », « LGPL-3.0+ », « MIT » et « (BSD-2-Clause OU Ruby) ». Ne pas inclure des guillemets simples ou doubles.
    S'il y a plus d'un langage, listez-les en tant que valeurs séparées par des virgules (espaces facultatifs) et triez-les du plus au moins utilisé. S'il y a une longue liste, veuillez lister au moins les trois premiers. S'il n'y a pas de langage (par exemple, il s'agit d'un projet uniquement de documentation ou de test), utilisez le caractère unique « - ». Utilisez une capitalisation conventionnelle pour chaque langage, par exemple « JavaScript ».
    La plate-forme commune d'énumération (CPE) est un schéma de dénomination structuré pour les systèmes, les logiciels et les paquetages des technologies de l'information. Il est utilisé dans un certain nombre de systèmes et de bases de données pour signaler des vulnérabilités.

 Contrôles 18/21 ●

  • Contrôles


    Lorsqu'une tâche se voit attribuer des permissions dans un pipeline CI/CD, le code source ou la configuration DOIT attribuer uniquement les privilèges minimaux nécessaires pour l'activité correspondante. [OSPS-AC-04.02]
    Configurez les pipelines CI/CD du projet pour attribuer les permissions les plus basses disponibles aux utilisateurs et services par défaut, en élevant les permissions seulement lorsque nécessaire pour des tâches spécifiques. Dans certains systèmes de gestion de version, cela peut être possible au niveau de l'organisation ou du dépôt. Sinon, définissez les permissions au niveau supérieur du pipeline.

    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.



    Les pipelines CI/CD qui acceptent des entrées de collaborateurs de confiance DOIVENT assainir et valider ces entrées avant de les utiliser dans le pipeline. [OSPS-BR-01.04]
    Les pipelines CI/CD doivent assainir (mettre entre guillemets, échapper ou quitter pour les valeurs attendues) toutes les entrées des collaborateurs lors des exécutions explicites de workflows. Bien que les collaborateurs soient généralement de confiance, les entrées manuelles dans un workflow ne peuvent pas être revues et pourraient être détournées par une prise de contrôle de compte ou une menace interne.

    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.



    Lorsqu'une version officielle est créée, tous les actifs de cette version DOIVENT être clairement associés à l'identifiant de version ou un autre identifiant unique pour l'actif. [OSPS-BR-02.02]
    Attribuez un identifiant de version unique à chaque actif logiciel produit par le projet, en suivant une convention de nommage ou un schéma de numérotation cohérent. Les exemples incluent SemVer, CalVer, ou l'id de commit 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.



    Le projet DOIT définir une politique pour gérer les secrets et informations d'identification utilisés par le projet. La politique devrait inclure des directives pour stocker, accéder et faire tourner les secrets et informations d'identification. [OSPS-BR-07.02]
    Documentez comment les secrets et informations d'identification sont gérés et utilisés dans le projet. Cela devrait inclure des détails sur la façon dont les secrets sont stockés (par exemple, en utilisant un outil de gestion de secrets), comment l'accès est contrôlé, et comment les secrets sont renouvelés ou mis à jour. Assurez-vous que les informations sensibles ne sont pas codées en dur dans le code source ou stockées dans les systèmes de gestion de version.

    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.



    Lorsque le projet a fait une version, la documentation du projet DOIT contenir des instructions pour vérifier l'intégrité et l'authenticité des actifs de la version. [OSPS-DO-03.01]
    Les instructions dans le projet devraient contenir des informations sur la technologie utilisée, les commandes à exécuter et la sortie attendue. Lorsque cela est possible, évitez de stocker cette documentation au même endroit que le pipeline de construction et de publication pour éviter qu'une seule violation ne compromette à la fois le logiciel et la documentation pour vérifier l'intégrité du logiciel.

    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.



    Lorsque le projet a fait une version, la documentation du projet DOIT contenir des instructions pour vérifier l'identité attendue de la personne ou du processus créant la version logicielle. [OSPS-DO-03.02]
    L'identité attendue peut être sous la forme d'identifiants de clés utilisés pour signer, d'émetteur et d'identité d'un certificat sigstore, ou d'autres formes similaires. Lorsque cela est possible, évitez de stocker cette documentation au même endroit que le pipeline de construction et de publication pour éviter qu'une seule violation ne compromette à la fois le logiciel et la documentation pour vérifier l'intégrité du logiciel.

    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.



    Quand le projet a publié une version, la documentation du projet DOIT inclure une déclaration descriptive sur la portée et la durée du support pour chaque version. [OSPS-DO-04.01]
    Afin de communiquer la portée et la durée du support pour les actifs logiciels publiés par le projet, le projet devrait avoir un fichier SUPPORT.md, une section « Support » dans SECURITY.md, ou toute autre documentation expliquant le cycle de vie du support, y compris la durée prévue du support pour chaque version, les types de support fournis (par exemple, corrections de bugs, mises à jour de sécurité), et toutes politiques ou procédures pertinentes pour obtenir du support.

    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.



    Quand le projet a publié une version, la documentation du projet DOIT fournir une déclaration descriptive sur le moment où les versions ne recevront plus de mises à jour de sécurité. [OSPS-DO-05.01]
    Afin de communiquer la portée et la durée du support pour les corrections de sécurité, le projet devrait avoir un fichier SUPPORT.md ou autre documentation expliquant la politique du projet pour les mises à jour de sécurité.

    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.



    La documentation du projet DOIT comporter une politique selon laquelle les collaborateurs de code sont examinés avant l'octroi de permissions élevées sur des ressources sensibles. [OSPS-GV-04.01]
    Publiez une politique applicable dans la documentation du projet qui exige que les collaborateurs de code soient examinés et approuvés avant de se voir accorder des permissions élevées aux ressources sensibles, telles que l'approbation de fusion ou l'accès aux secrets. Il est recommandé que l'examen comprenne l'établissement d'une lignée d'identité justifiable, comme la confirmation de l'association du contributeur avec une organisation de confiance connue.

    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.



    Quand le projet a publié une version, tous les actifs logiciels compilés publiés DOIVENT être livrés avec une nomenclature logicielle. [OSPS-QA-02.02]
    Il est recommandé de générer automatiquement les SBOM au moment de la compilation en utilisant un outil dont la précision a été vérifiée. Cela permet aux utilisateurs d'ingérer ces données de manière standardisée aux côtés d'autres projets dans leur environnement.

    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.



    Quand le projet a publié une version comprenant plusieurs dépôts de code source, tous les sous-projets DOIVENT appliquer des exigences de sécurité aussi strictes ou plus strictes que la base de code principale. [OSPS-QA-04.02]
    Tous les dépôts de code de sous-projets supplémentaires produits par le projet et compilés dans une version doivent appliquer des exigences de sécurité selon le statut et l'objectif de la base de code respective. En plus de suivre les exigences Baseline OSPS correspondantes, cela peut inclure l'exigence d'un examen de sécurité, garantir qu'il est exempt de vulnérabilités et garantir qu'il est exempt de problèmes de sécurité connus.

    The project is a single repository with no subprojects.



    La documentation du projet DOIT clairement documenter quand et comment les tests sont exécutés. [OSPS-QA-06.02]
    Ajoutez une section à la documentation de contribution qui explique comment exécuter les tests localement et comment exécuter les tests dans le pipeline CI/CD. La documentation devrait expliquer ce que les tests testent et comment interpréter les résultats.

    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).



    La documentation du projet DOIT inclure une politique selon laquelle tous les changements majeurs apportés au logiciel produit par le projet devraient ajouter ou mettre à jour des tests de la fonctionnalité dans une suite de tests automatisée. [OSPS-QA-06.03]
    Ajoutez une section à la documentation de contribution qui explique la politique d'ajout ou de mise à jour des tests. La politique devrait expliquer ce qui constitue un changement majeur et quels tests doivent être ajoutés ou mis à jour.

    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.



    Quand un commit est effectué vers la branche principale, le système de contrôle de version du projet DOIT exiger au moins une approbation humaine non auteur des changements avant la fusion. [OSPS-QA-07.01]
    Configurez le système de contrôle de version du projet pour exiger au moins une approbation humaine non auteur des changements avant la fusion dans la branche de publication ou principale. Cela peut être réalisé en exigeant qu'une pull request soit examinée et approuvée par au moins un autre collaborateur avant qu'elle puisse être fusionnée.

    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.



    Quand le projet a publié une version, le projet DOIT effectuer une modélisation des menaces et une analyse de la surface d'attaque pour comprendre et se protéger contre les attaques sur les chemins de code critiques, les fonctions et les interactions au sein du système. [OSPS-SA-03.02]
    La modélisation des menaces est une activité où le projet examine la base de code, les processus et l'infrastructure associés, les interfaces, les composants clés et « pense comme un pirate » et réfléchit à la manière dont le système pourrait être cassé ou compromis. Chaque menace identifiée est répertoriée afin que le projet puisse ensuite réfléchir à la manière d'éviter ou de combler de manière proactive toute lacune ou vulnérabilité qui pourrait survenir. Assurez-vous que cela est mis à jour pour les nouvelles fonctionnalités ou les changements majeurs.

    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.



    Toute vulnérabilité présente dans les composants logiciels mais n'affectant pas le projet DOIT être prise en compte dans un document VEX, en complétant le rapport de vulnérabilité avec des détails sur la non-exploitabilité. [OSPS-VM-04.02]
    Établissez un flux VEX communiquant le statut d'exploitabilité des vulnérabilités connues, y compris les détails d'évaluation ou toute mesure d'atténuation en place empêchant l'exécution du code vulnérable.

    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.



    La documentation du projet DOIT inclure une politique qui définit un seuil pour la remédiation des résultats d'analyse de composition logicielle (SCA) liés aux vulnérabilités et aux licences. [OSPS-VM-05.01]
    Documentez une politique dans le projet qui définit un seuil pour la résolution des résultats SCA liés aux vulnérabilités et aux licences. Incluez le processus pour identifier, prioriser et résoudre ces résultats.

    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.



    La documentation du projet DOIT inclure une politique pour traiter les violations SCA avant toute publication. [OSPS-VM-05.02]
    Documentez une politique dans le projet pour traiter les résultats applicables de l'analyse de composition du logiciel avant toute publication, et ajoutez des vérifications de statut qui vérifient la conformité avec cette politique avant la publication.

    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.



    Tous les changements apportés à la base de code du projet DOIVENT être automatiquement évalués par rapport à une politique documentée concernant les dépendances malveillantes et les vulnérabilités connues dans les dépendances, puis bloqués en cas de violation, sauf lorsqu'ils sont déclarés et supprimés comme non exploitables. [OSPS-VM-05.03]
    Créez une vérification de statut dans le système de contrôle de version du projet qui exécute un outil d'analyse de composition du logiciel sur toutes les modifications apportées à la base de code. Exigez que la vérification de statut réussisse avant que les modifications puissent être fusionnées.

    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.



    La documentation du projet DOIT inclure une politique qui définit un seuil pour la remédiation des résultats d'analyse statique de sécurité (SAST). [OSPS-VM-06.01]
    Documentez une politique dans le projet qui définit un seuil pour la résolution des résultats des tests de sécurité des applications statiques (SAST). Incluez le processus pour identifier, prioriser et résoudre ces résultats.

    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.



    Tous les changements apportés à la base de code du projet DOIVENT être automatiquement évalués par rapport à une politique documentée concernant les faiblesses de sécurité et bloqués en cas de violation, sauf lorsqu'ils sont déclarés et supprimés comme non exploitables. [OSPS-VM-06.02]
    Créez une vérification de statut dans le système de contrôle de version du projet qui exécute un outil de test de sécurité des applications statiques (SAST) sur toutes les modifications apportées à la base de code. Exigez que la vérification de statut réussisse avant que les modifications puissent être fusionnées.

    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.



Vous pouvez utiliser des outils et des systèmes d'IA pour proposer des modifications via une URL simple, par exemple https://www.bestpractices.dev/fr/projects/13998/choose/edit?osps_ac_01_01_status=Met&osps_ac_01_01_justification=GitHub+enforced. Consultez notre système de propositions d'automatisation pour savoir comment procéder. Ces données sont disponibles sous la licence Community Data License Agreement – Permissive, Version 2.0 (CDLA-Permissive-2.0). Cela signifie qu'un destinataire de données peut partager les données, avec ou sans modifications, à condition que le destinataire de données rende disponible le texte de cet accord avec les données partagées. Veuillez créditer Carl Allen et les contributeurs du badge des meilleures pratiques de la OpenSSF.

Soumission du badge du projet appartenant à : Carl Allen.
Soumission créée le 2026-08-09 00:45:46 UTC, dernière mise à jour le 2026-08-09 01:33:27 UTC. Le dernier badge obtenu l'a été le 2026-08-09 00:58:03 UTC.