sentinel

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

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

私たちは多言語で情報を提供していますが、翻訳版に矛盾や意味の不一致がある場合は、英語版を正式な記述とします。
これがあなたのプロジェクトである場合は、プロジェクトページにベースラインバッジステータスを表示してください!ベースラインバッジステータスは次のようになります: プロジェクト14063のベースラインバッジレベルはbaseline-1です ベースラインバッジを埋め込む方法は次のとおりです:
ベースラインバッジステータスを表示するには、マークダウンファイルに以下を埋め込みます:
[![OpenSSF Baseline](https://www.bestpractices.dev/projects/14063/baseline)](https://www.bestpractices.dev/projects/14063)
または、HTMLに以下を埋め込みます:
<a href="https://www.bestpractices.dev/projects/14063"><img src="https://www.bestpractices.dev/projects/14063/baseline"></a>


これらはベースラインレベル3の基準です。 これらは基準バージョン v2026.08.28 の評価項目です。

Baseline Series: ベースラインレベル1 ベースラインレベル2 ベースラインレベル3

        

 基本的情報

  • 一般

    他のプロジェクトが同じ名前を使用していないか注意してください。

    The security update management platform for SUSE and openSUSE Linux distributions

    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)システム、ソフトウェア、およびパッケージのための構造化された命名体系です。脆弱性を報告する際に、多くのシステムやデータベースで使用されています。

 管理策 12/21

  • 管理策


    CI/CDパイプラインでジョブに権限が割り当てられる場合、ソースコードまたは設定は、対応するアクティビティに必要な最小限の権限のみを割り当てる必要があります。 [OSPS-AC-04.02]
    プロジェクトのCI/CDパイプラインを構成して、デフォルトでユーザーとサービスに最小限の利用可能な権限を割り当て、特定のタスクに必要な場合にのみ権限を昇格させます。一部のバージョン管理システムでは、組織またはリポジトリレベルで設定できる場合があります。それができない場合は、パイプラインのトップレベルで権限を設定してください。

    Every workflow declares permissions at either the top level or per-job, restricted to the minimum required for that specific activity. Examples: ci.yml uses only contents: read; build-images.yml grants packages: write only to the publish job; deploy-api-docs.yml splits permissions per job (contents: read for build, pages: write + id-token: write only for the deploy job); release-please.yml sets top-level permissions: {} and grants contents: write, issues: write, pull-requests: write only to the single job that needs them. The repository default workflow permissions are set to read, ensuring any job without explicit permissions receives the minimum.



    信頼できる協力者の入力を受け付けるCI/CDパイプラインは、パイプラインで使用する前にその入力をサニタイズおよび検証しなければなりません。 [OSPS-BR-01.04]
    CI/CDパイプラインは、明示的なワークフロー実行時にすべての協力者の入力をサニタイズ(期待値の引用、エスケープ、または終了)する必要があります。協力者は一般的に信頼されていますが、ワークフローへの手動入力はレビューできず、アカウント乗っ取りや内部脅威によって悪用される可能性があります。

    All workflows that consume collaborator-controlled input (PR title, PR body, branch names) pass those values exclusively through environment variables (env:) rather than inline ${{ }} interpolation in run: blocks — preventing shell injection. The pr-metadata.yml workflow (the only one that processes attacker-controllable input like PR titles and bodies) explicitly uses env: PR_TITLE: ${{ github.event.pull_request.title }} and then references "${PR_TITLE}" with proper quoting in the shell script. The build-images.yml workflow similarly passes image tags via env: IMAGE_TAGS with an inline comment explaining this is done "to avoid shell-injection risk from untrusted ref/tag content." No workflow interpolates untrusted input directly into a run: script.



    正式なリリースが作成される場合、そのリリース内のすべてのアセットは、リリース識別子またはアセットの他の一意の識別子と明確に関連付けられている必要があります。 [OSPS-BR-02.02]
    プロジェクトによって生成される各ソフトウェアアセットに一意のバージョン識別子を割り当て、一貫した命名規則または番号体系に従ってください。例としては、SemVer、CalVer、またはgitコミットIDなどがあります。

    Each GitHub Release is associated with its unique version tag (v0.3.0, etc.). The container images published to ghcr.io are tagged with the corresponding semver release tag (e.g., ghcr.io/staypirate/sentinel:0.3.0) alongside latest, ensuring the OCI artifact is clearly tied to the release identifier. The release changelog in the GitHub Release body references the exact Git commits (SHAs) included in that version. The uv.lock file is version-bumped by release-please as part of the release commit, associating the locked dependency set with the release.



    プロジェクトは、プロジェクトで使用されるシークレットと認証情報を管理するためのポリシーを定義する必要があります。このポリシーには、シークレットと認証情報を保存、アクセス、およびローテーションするためのガイドラインが含まれている必要があります。 [OSPS-BR-07.02]
    シークレットと認証情報がプロジェクト内でどのように管理され使用されているかを文書化してください。これには、シークレットがどのように保存されるか(例:シークレット管理ツールを使用)、アクセスがどのように制御されるか、シークレットがどのようにローテーションまたは更新されるかについての詳細が含まれている必要があります。機密情報がソースコードにハードコードされたり、バージョン管理システムに保存されたりしないようにしてください。

    The project defines a multi-layered secrets management policy across its documentation:

    • Storage: docs/deployment.md (No secrets in workflow files) mandates that CI credentials are stored exclusively in GitHub Secrets (${{ secrets.* }}), never as literals in workflow files. The Repository Secrets section documents each secret's purpose and required permissions.
    • Access: docs/conventions.md (Secret Field Typing) requires all secret configuration fields to use Pydantic SecretStr, preventing accidental exposure via repr/logging/serialization. Log statements are forbidden from including secrets (Secrets and PII Discipline in logging.md).
    • Rotation: docs/deployment.md documents JWT_SECRET_KEY rotation impact (session invalidation, off-peak maintenance window). Environment-variable injection ensures secrets are never baked into images.
    • Prevention: gitleaks pre-commit hook scans for accidentally committed secrets; GitHub Push Protection is enabled at the repository level.


    プロジェクトがリリースを作成した場合、プロジェクトのドキュメントには、リリースアセットの整合性と真正性を検証するための手順が含まれている必要があります。 [OSPS-DO-03.01]
    プロジェクトの手順には、使用されている技術、実行するコマンド、および期待される出力に関する情報が含まれている必要があります。可能であれば、このドキュメントをビルドおよびリリースパイプラインと同じ場所に保存しないようにして、単一の侵害によってソフトウェアとその整合性を検証するためのドキュメントの両方が侵害されることを避けてください。

    There are no instructions in the project documentation for verifying the integrity or authenticity of release assets. No cryptographic signatures, checksums, or signed manifests are published alongside releases (as noted in the earlier signing criterion). Without signed assets, there is nothing for a consumer to verify. This is the counterpart to the earlier "release MUST be signed" criterion — both are currently unmet.



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

    The project does not document how to verify who authored a release. Releases are created by the release-please automation using a RELEASE_TOKEN PAT, but there are no instructions for consumers to verify that a given release was produced by an authorized project maintainer (e.g., via GPG-signed tags, Sigstore identity verification, or GitHub's commit signing verification). The Git tags are unsigned, and no provenance attestation links the release to a specific verified identity.



    プロジェクトがリリースを作成した場合、プロジェクトのドキュメントには、各リリースのサポートの範囲と期間に関する説明文が含まれている必要があります。 [OSPS-DO-04.01]
    プロジェクトのリリースされたソフトウェアアセットのサポートの範囲と期間を伝えるために、プロジェクトにはSUPPORT.mdファイル、SECURITY.mdの「サポート」セクション、または各リリースの予想されるサポート期間、提供されるサポートの種類(例:バグ修正、セキュリティ更新)、およびサポートを受けるための関連ポリシーや手順を説明する他のドキュメントが必要です。

    The project documentation does not include a support policy stating which releases receive security patches, bug fixes, or how long each release is supported. The versioning section in docs/conventions.md defines SemVer interpretation and pre-1.0 rules, but does not state whether only the latest release is supported, whether older minor versions receive backports, or what the expected support duration is for any given release.



    プロジェクトがリリースを作成した場合、プロジェクトのドキュメントには、リリースやバージョンがセキュリティ更新を受けなくなる時期について説明文が含まれている必要があります。 [OSPS-DO-05.01]
    セキュリティ修正のサポート範囲と期間を伝えるために、プロジェクトにはSUPPORT.mdまたはプロジェクトのセキュリティ更新に関するポリシーを説明する他のドキュメントが必要です。

    Same gap as above — there is no end-of-life (EOL) or end-of-support policy documented. The project does not state when a given release will stop receiving security updates, nor does it define the conditions under which a version transitions from "supported" to "unsupported."



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

    The repository is currently single-maintainer (sole owner of all repository permissions). GitHub's built-in access model requires the repository owner to explicitly grant collaborator access — no one can self-escalate. Branch protection rules enforce PR review requirements for all code reaching master. The CONTRIBUTING.md documents the contribution workflow (fork, PR, CI must pass), and the repository owner is the sole merge authority. For a single-maintainer project, this satisfies the criterion — there is no delegation of sensitive access without the owner's explicit action.



    プロジェクトがリリースを作成した場合、リリースされたすべてのコンパイル済みソフトウェアアセットは、ソフトウェア部品表とともに配信される必要があります。 [OSPS-QA-02.02]
    ビルド時に精度が検証されたツールを使用してSBOMを自動生成することが推奨されます。これにより、ユーザーは環境内の他のプロジェクトと並行して、標準化されたアプローチでこのデータを取り込むことができます。

    No SBOM (Software Bill of Materials) is generated or published with releases. The build-images.yml workflow builds and pushes the container image to ghcr.io but does not generate an SBOM (e.g., via docker/build-push-action's sbom option, syft, or trivy). GitHub Releases contain no attached assets at all — no SPDX, CycloneDX, or other SBOM format is produced or distributed alongside the OCI image or the source release.



    プロジェクトが複数のソースコードリポジトリで構成されるリリースを作成した場合、すべてのサブプロジェクトは、プライマリコードベースと同等またはそれより厳しいセキュリティ要件を実施する必要があります。 [OSPS-QA-04.02]
    プロジェクトによって生成され、リリースにコンパイルされる追加のサブプロジェクトコードリポジトリは、それぞれのコードベースのステータスと意図に応じて、セキュリティ要件を実施する必要があります。対応するOSPS Baseline要件に従うことに加えて、これにはセキュリティレビューを要求すること、脆弱性がないこと、および既知のセキュリティ問題がないことを確認することが含まれる場合があります。

    Sentinel is a single-repository project. There is no multi-repo release comprising subprojects — the backend, migrations, task definitions, and specifications all live in this single repository and ship as one OCI image. The frontend will be developed in a separate repository but is not yet released. This criterion does not apply until a release spans mul



    プロジェクトの文書は、テストがいつ、どのように実行されるかを明確に文書化しなければなりません(MUST)。 [OSPS-QA-06.02]
    コントリビューションドキュメントに、ローカルでテストを実行する方法とCI/CDパイプラインでテストを実行する方法を説明するセクションを追加します。ドキュメントでは、テストが何をテストしているかと結果の解釈方法を説明する必要があります。

    docs/features/platform/testing-strategy.md is the authoritative document for the testing strategy, including when and how tests are run. It defines the test pyramid (unit, integration, e2e), the CI pipeline gate composition, required markers (@pytest.mark.unit, @pytest.mark.integration, @pytest.mark.e2e), and execution model. docs/deployment.md (Workflow Inventory) documents that the CI workflow runs on every push to master and every pull request. CONTRIBUTING.md documents how developers run tests locally (make test, uv run pytest). The pre-commit hook automatically runs the unit test subset on every commit.



    プロジェクトの文書には、プロジェクトが作成したソフトウェアへのすべての主要な変更が、自動テスト スイート内の該当機能のテストを追加または更新すべきであるというポリシーを含めなければなりません(MUST)。 [OSPS-QA-06.03]
    コントリビューションドキュメントに、テストの追加または更新に関するポリシーを説明するセクションを追加します。ポリシーでは、主要な変更とは何か、どのようなテストを追加または更新すべきかを説明する必要があります。

    AGENTS.md (Guardrail 6, Mandatory Testing) defines an explicit policy: "Every code change (new feature or modification) MUST include tests." It requires tests for new API endpoints (happy path, validation, auth), new models (creation, constraints, relationships), new services (business logic, edge cases, error handling), and bug fixes (regression tests). The policy explicitly states "NEVER skip tests" and instructs that if asked to skip, the developer must be reminded of the requirement. CONTRIBUTING.md reinforces this under the "Pull Request Checklist" — all PRs must include tests and CI must pass before merge.



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

    Branch protection on master requires a pull request before merge, but the required approvals count is set to 0. This means a PR author can merge their own changes without any non-author human review. The project is currently single-maintainer, which makes enforcing non-author approval impractical (there is no second person to approve), but the criterion as stated is not satisfied by the current configuration.



    プロジェクトがリリースを行った場合、プロジェクトは、システム内の重要なコードパス、関数、および相互作用に対する攻撃を理解して防御するために、脅威モデリングと攻撃面分析を実行しなければなりません(MUST)。 [OSPS-SA-03.02]
    脅威モデリングは、プロジェクトがコードベース、関連するプロセスとインフラストラクチャ、インターフェース、主要コンポーネントを調べ、「ハッカーのように考え」、システムがどのように破壊または侵害される可能性があるかをブレインストーミングする活動です。識別された各脅威をリストアップし、プロジェクトは、発生する可能性のあるギャップ/脆弱性を積極的に回避または閉じる方法を検討できます。新機能や破壊的変更に対して、これが更新されていることを確認してください。

    The project performs systematic threat modeling and attack surface analysis through its mandatory @security-reviewer invocations (Guardrail 10) on every security-sensitive change. The docs/reviews/ directory contains 50+ review documents with explicit threat model assessments for critical code paths — authentication (local-authentication.md documents brute-force resistance, offline attack models), networking (networking.md documents trusted-upstream assumptions, connection security), RBAC (rbac.md documents pre-disclosure data exposure), and all external integrations. Specifications themselves document threat considerations inline (e.g., API key self-replication prevention, JWT secret minimum length enforcement, session fixation protections, rate limiting requirements). The attack surface is analyzed per-component rather than in a single monolithic document, with each review recording findings, risk acceptance decisions with rationale, and residual risk.



    プロジェクトに影響しないソフトウェア コンポーネント内の脆弱性は、VEX文書で説明され、悪用不可能性の詳細を伴って脆弱性レポートを補完しなければなりません(MUST)。 [OSPS-VM-04.02]
    既知の脆弱性の悪用可能性ステータスを伝達するVEXフィードを確立し、評価の詳細または脆弱なコードが実行されないようにする適切な緩和策を含めます。

    The project does not produce or publish VEX (Vulnerability Exploitability eXchange) documents. While image-scan.yml runs weekly Trivy scans and opens tracking issues for OS-level vulnerabilities, and pip-audit gates Python dependencies on every merge, neither produces a VEX document that formally accounts for non-exploitable vulnerabilities with justification (e.g., "not affected", "false positive", "component not reachable"). There is no CSAF/VEX or OpenVEX artifact generated as part of the release or scanning process.



    プロジェクトの文書には、脆弱性やライセンスに関連するSCAの検出結果の修正に関するしきい値を定義するポリシーを含めなければなりません(MUST)。 [OSPS-VM-05.01]
    プロジェクト内に、脆弱性とライセンスに関連するSCA調査結果の修復のしきい値を定義するポリシーを文書化します。これらの調査結果を識別、優先順位付け、修復するプロセスを含めます。

    The project does not document a policy defining remediation timeframes for SCA (Software Composition Analysis) findings. While pip-audit gates every PR (blocking merge if a known-vulnerable dependency is present) and image-scan.yml runs weekly Trivy scans with tracking issues, there is no documented policy specifying:

    • Maximum time allowed to remediate critical/high/medium/low vulnerability findings
    • How license compliance findings are handled (no license scanning is configured)
    • Thresholds or SLAs for when a vulnerability must be addressed vs. accepted as risk


    プロジェクトの文書には、リリース前にSCA違反に対処するポリシーを含めなければなりません(MUST)。 [OSPS-VM-05.02]
    プロジェクト内に、リリース前に該当するソフトウェア構成分析の結果に対処するポリシーを文書化し、リリース前にそのポリシーへの準拠を検証するステータスチェックを追加します。

    The CI pipeline enforces a strict gate: pip-audit runs on every pull request and blocks merge if any known-vulnerable dependency is detected (backend-security job in ci.yml). This means no release can be created with a known Python dependency vulnerability — the release path requires CI to pass on master, and release-please.yml only triggers after a successful CI run. Additionally, image-scan.yml runs weekly Trivy scans against the published container image for OS-level vulnerabilities and opens tracking issues. The combination ensures SCA violations are addressed (Python deps) or tracked (OS-level) prior to and between releases.



    プロジェクトのコードベースへのすべての変更は、悪意のある依存関係および依存関係内の既知の脆弱性に関する文書化されたポリシーに照らして自動的に評価され、悪用不可能であると宣言され抑制されている場合を除き、違反があった場合はブロックされなければなりません(MUST)。 [OSPS-VM-05.03]
    プロジェクトのバージョン管理システムにステータスチェックを作成し、コードベースへのすべての変更に対してソフトウェア構成分析ツールを実行します。変更がマージされる前に、ステータスチェックが合格することを要求します。

    Every change to the codebase is automatically evaluated by the CI pipeline before merge: pip-audit (in the backend-security job of ci.yml) checks all Python dependencies against known vulnerability databases and blocks the PR if a violation is found. bandit runs static security analysis in the same job. Branch protection requires the "Backend Security Scan" status check to pass — no code reaches master without passing these gates. Dependabot is configured to propose dependency updates weekly, providing proactive notification of vulnerable or outdated dependencies. The suppression mechanism exists via pip-audit's --ignore-vuln flag (though currently unused), which would require explicit declaration of non-exploitability.



    プロジェクトの文書には、SASTの検出結果の修正に関するしきい値を定義するポリシーを含めなければなりません(MUST)。 [OSPS-VM-06.01]
    プロジェクト内に、静的アプリケーションセキュリティテスト(SAST)調査結果の修復のしきい値を定義するポリシーを文書化します。これらの調査結果を識別、優先順位付け、修復するプロセスを含めます。

    The project does not document a policy defining remediation timeframes or thresholds for SAST (Static Application Security Testing) findings. While bandit runs on every PR as part of the backend-security CI job and blocks merge on findings, there is no documented policy specifying:

    • Severity thresholds for blocking vs. non-blocking findings
    • Maximum remediation timeframes by severity level
    • Suppression/acceptance process for false positives (e.g., required justification format for # nosec annotations)


    プロジェクトのコードベースへのすべての変更は、セキュリティ上の弱点に関する文書化されたポリシーに照らして自動的に評価され、悪用不可能であると宣言され抑制されている場合を除き、違反があった場合はブロックされなければなりません(MUST)。 [OSPS-VM-06.02]
    プロジェクトのバージョン管理システムにステータスチェックを作成し、コードベースへのすべての変更に対して静的アプリケーションセキュリティテスト(SAST)ツールを実行します。変更がマージされる前に、ステータスチェックが合格することを要求します。

    All changes to the codebase are automatically evaluated for security weaknesses before merge: bandit (SAST) runs in the backend-security job of ci.yml and blocks the PR on findings. mypy --strict (static type checking) catches type-safety issues that can lead to security weaknesses. Branch protection requires "Backend Security Scan" and "Backend Type Check" to pass — no code reaches master without passing these gates. Suppression is supported via bandit's # nosec inline annotations for declared false positives, and mypy's per-line type-ignore with required error codes (blanket suppressions are forbidden per docs/conventions.md).



ツールやAIシステムを使って、https://www.bestpractices.dev/ja/projects/14063/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)のもとで利用可能です。これは、データ受領者が、データ受領者がこの契約のテキストを共有データとともに利用可能にする限り、変更の有無にかかわらずデータを共有できることを意味します。Gianluca GabrielliおよびOpenSSFベストプラクティスバッジのコントリビューターにクレジットを表示してください。

プロジェクト バッジ登録の所有者: Gianluca Gabrielli.
エントリの作成日時 2026-08-13 13:55:49 UTC、 最終更新日 2026-08-14 06:09:03 UTC 最後に2026-08-13 16:48:08 UTCにバッジ合格を達成しました。