monumental-archive-db

本サイトが提示する下記のベストプラクティスを実行するプロジェクトは、Open Source Security Foundation (OpenSSF) バッジを達成したことを自主的に自己認証し、そのことを外部に示すことができます。

ソフトウェアに欠陥や脆弱性がないことを保証する手立てはありません。形式論的な証明ができたとしても、仕様や前提が間違っていると誤動作の可能性があります。また、プロジェクトが健全で、かつ機能的な開発コミュニティであり続けることを保証する手立てもありません。しかし、ベストプラクティスの採用は、プロジェクトの成果の向上に寄与する可能性があります。たとえば、いくつものベストプラクティスがリリース前の複数人によるレビューを定めていますが、それによりレビュー以外では発見困難な技術的脆弱性を見つけるのを助け、同時に異なる企業の開発者間の信頼を築き、さらに交流を続けることに対する意欲を生んでいます。バッジを獲得するには、すべてのMUSTおよびMUST NOT基準を満たさなければなりません。すべてのSHOULD基準も満たさなければなりませんが、正当な理由がある場合は満たさなくても構いません。そしてすべてのSUGGESTED基準も満たさなければなりませんが、満たさないとしても、少なくとも考慮することが望まれます。フィードバックは、 GitHubサイトのissueまたはpull requestとして提示されれば歓迎します。また、議論のためのメールリストも用意されています。

私たちは多言語で情報を提供していますが、翻訳版に矛盾や意味の不一致がある場合は、英語版を正式な記述とします。
これがあなたのプロジェクトである場合は、プロジェクトページにベースラインバッジステータスを表示してください!ベースラインバッジステータスは次のようになります: プロジェクト13998のベースラインバッジレベルはbaseline-1です ベースラインバッジを埋め込む方法は次のとおりです:
ベースラインバッジステータスを表示するには、マークダウンファイルに以下を埋め込みます:
[![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)」。一重引用符または二重引用符を含めないでください。
    複数の言語がある場合は、コンマを区切り(スペースを入れてもよい)としてリストし、使用頻度の高いものから順に並べます。使用言語が多くある場合は、少なくとも最初の3つの最も多く使われるものをリストアップしてください。言語がない場合(例:ドキュメントだけ、またはテスト専用のプロジェクトの場合)、1文字 " - "を使用します。言語ごとにある大文字・小文字の慣用を踏襲してください(例:「JavaScript」)。
    Common Platform Enumeration(CPE)は、情報技術(IT)システム、ソフトウェア、およびパッケージのための構造化された命名体系です。脆弱性を報告する際に、多くのシステムやデータベースで使用されています。

 管理策 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コミットIDなどがあります。

    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.



    プロジェクトがリリースを作成した場合、プロジェクトのドキュメントには、ソフトウェアリリースを作成した人またはプロセスの期待されるIDを検証するための手順が含まれている必要があります。 [OSPS-DO-03.02]
    期待されるIDは、署名に使用される鍵ID、sigstore証明書からの発行者とID、または他の類似の形式である可能性があります。可能であれば、このドキュメントをビルドおよびリリースパイプラインと同じ場所に保存しないようにして、単一の侵害によってソフトウェアとその整合性を検証するためのドキュメントの両方が侵害されることを避けてください。

    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.



    プロジェクトの文書には、機密リソースへの昇格された権限を付与する前に、コード共同作業者がレビューされるというポリシーを含めなければなりません(MUST)。 [OSPS-GV-04.01]
    マージ承認やシークレットへのアクセスなど、機密リソースへのエスカレートされた権限を付与される前に、コード共同作業者がレビューおよび承認される必要があるという実行可能なポリシーをプロジェクトのドキュメントに公開してください。審査には、既知の信頼できる組織との貢献者の関連性を確認するなど、正当化可能なIDの系統を確立することが推奨されます。

    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.



    プロジェクトがリリースを作成した場合、リリースされたすべてのコンパイル済みソフトウェアアセットは、ソフトウェア部品表とともに配信される必要があります。 [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.



    プロジェクトの文書は、テストがいつ、どのように実行されるかを明確に文書化しなければなりません(MUST)。 [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).



    プロジェクトの文書には、プロジェクトが作成したソフトウェアへのすべての主要な変更が、自動テスト スイート内の該当機能のテストを追加または更新すべきであるというポリシーを含めなければなりません(MUST)。 [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.



    プライマリブランチにコミットが行われる場合、プロジェクトのバージョン管理システムは、マージする前に、作者以外の少なくとも1人の人間による変更の承認を要求しなければなりません(MUST)。 [OSPS-QA-07.01]
    プロジェクトのバージョン管理システムを構成し、リリースまたはプライマリブランチにマージする前に、作者以外の少なくとも1人の人間による変更の承認を要求します。これは、プルリクエストがマージされる前に、少なくとも1人の他のコラボレーターによってレビューおよび承認されることを要求することで実現できます。

    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.



    プロジェクトがリリースを行った場合、プロジェクトは、システム内の重要なコードパス、関数、および相互作用に対する攻撃を理解して防御するために、脅威モデリングと攻撃面分析を実行しなければなりません(MUST)。 [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文書で説明され、悪用不可能性の詳細を伴って脆弱性レポートを補完しなければなりません(MUST)。 [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の検出結果の修正に関するしきい値を定義するポリシーを含めなければなりません(MUST)。 [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違反に対処するポリシーを含めなければなりません(MUST)。 [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.



    プロジェクトのコードベースへのすべての変更は、悪意のある依存関係および依存関係内の既知の脆弱性に関する文書化されたポリシーに照らして自動的に評価され、悪用不可能であると宣言され抑制されている場合を除き、違反があった場合はブロックされなければなりません(MUST)。 [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の検出結果の修正に関するしきい値を定義するポリシーを含めなければなりません(MUST)。 [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.



    プロジェクトのコードベースへのすべての変更は、セキュリティ上の弱点に関する文書化されたポリシーに照らして自動的に評価され、悪用不可能であると宣言され抑制されている場合を除き、違反があった場合はブロックされなければなりません(MUST)。 [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.



ツールやAIシステムを使って、https://www.bestpractices.dev/ja/projects/13998/choose/edit?osps_ac_01_01_status=Met&osps_ac_01_01_justification=GitHub+enforcedのような簡単なURLで変更を提案できます。その方法については、自動化提案システムをご覧ください。 このデータは、Community Data License Agreement – Permissive, Version 2.0 (CDLA-Permissive-2.0)のもとで利用可能です。これは、データ受領者が、データ受領者がこの契約のテキストを共有データとともに利用可能にする限り、変更の有無にかかわらずデータを共有できることを意味します。Carl AllenおよびOpenSSFベストプラクティスバッジのコントリビューターにクレジットを表示してください。

プロジェクト バッジ登録の所有者: Carl Allen.
エントリの作成日時 2026-08-09 00:45:46 UTC、 最終更新日 2026-08-09 01:33:27 UTC 最後に2026-08-09 00:58:03 UTCにバッジ合格を達成しました。