Files
git.stella-ops.org/docs/05_SYSTEM_REQUIREMENTS_SPEC.md

9.7 KiB
Raw Permalink Blame History

SYSTEMREQUIREMENTSSPECIFICATION

StellaOps · selfhosted supplychainsecurity platform

Audience core maintainers and external contributors who need an authoritative checklist of what the software must do (functional requirements) and how well it must do it (nonfunctional requirements). Implementation details belong in Module Specs or ADRs—not here.


1·Purpose & Scope

This SRS defines everything the v0.8beta release of StellaOps must do, including the new Freetier quota of 333 SBOM scans per token per UTC day.
Scope includes core platform, CLI, UI, quota layer, and plugin host; commercial or closedsource extensions are explicitly outofscope.


2·References


3·Definitions & Acronyms

Term Meaning
SBOM Software Bill of Materials
Delta SBOM Partial SBOM covering only image layers not previously analysed
Registry Anonymous, readonly Docker Registry v2 hosted internally
OPA Open Policy Agent (Rego policy engine)
Muting Policy Rule that downgrades or ignores specific findings
SLSA Supplychain Levels for Software Artifacts (provenance framework)
Rekor Sigstore transparency log for signatures

4·Overall System Description

The platform consists of:

  • StellaOps Backend REST API, queue, policy engine, DB.
  • StellaOps.Registry internal container registry for agents.
  • SanTech Agent extracts SBOMs; supports multiformat & delta.
  • Zastava Agent enforcement hook for admissioncontrol scenarios.
  • WebUI React/Next.js SPA consuming backend APIs.
  • Plugins hotload binaries extending scanners, attestations, etc.

All services run in Docker Compose or Kubernetes with optional Internet access.


5·Functional Requirements (FR)

5.1 Core Scanning

ID Requirement Priority Verification
F1 System SHALL ingest TrivyJSON, SPDXJSON, CycloneDXJSON files. MUST UTSBOM001
F2 System SHALL autodetect SBOM type when sbomType param omitted. MUST UTSBOM002
F3 System SHALL cache analysed layers and reuse them in subsequent scans. MUST ITCACHE001
F4 System SHALL enforce a soft limit of 333 scans per token per UTC day. MUST ITQUOTA001
F4a Remaining quota SHALL be persisted in Redis under key quota:<token>:<yyyymmdd>. MUST UTQUOTAREDIS
F4b Exhausted quota SHALL trigger HTTP429 with RetryAfter header set to midnight UTC. MUST ITQUOTA002
F4c When quota is ≤ 40% remaining, UI banner MUST turn yellow and show countdown. SHOULD UIE2E005
F4d /quota endpoint SHALL return JSON {"limit":333,"remaining":N,"resetsAt":"<ISO8601>"}. SHOULD APIDOC003
F5 Policy engine SHALL evaluate YAML rules against scan results. MUST UTPOL001
F6 Hotpluggable .NET plugins SHALL be loadable without service restart. MUST ITPLUGIN001
F7 CLI (stella scan) SHOULD exit nonzero when CVSS≥7 vulnerabilities found. SHOULD CLINT003
(… all previously documented F F12 rows retained unchanged …)

5.2 Internal Docker Repository

Ref Requirement
FRREPO1 Platform SHALL include StellaOps.Registry exposing Docker Registry v2 API (ports 5000/443).
FRREPO2 Registry SHALL allow anonymous, readonly pulls for at least three images:
stella/sbombuilder
stella/santech
stella/zastava.
FRREPO3 Registry MAY enable optional basicauth without code changes.

5.3 SBOM Generation & Handling

Ref Requirement
FRSBOM1 SBOM builder SHALL produce TrivyJSON and at least one additional format: SPDXJSON and CycloneDXJSON.
FRSBOM2 For every generated SBOM, builder SHALL create a sidecar file <image>.sbom.type containing the format identifier.
FRSBOM3 SanTech Agent SHALL read the .sbom.type file and include sbomType parameter when uploading.
FRSBOM4 Backend SHALL autodetect SBOM type when parameter is missing.
FRSBOM5 UI Settings SHALL expose a dropdown to select default SBOM format (systemwide fallback).

5.3.1 Delta SBOM (layer reuse)

Ref Requirement
FRDELTA1 Builder SHALL compute SHA256 digests of each image layer and POST array to /layers/missing; response time ≤20ms (P95).
FRDELTA2 Builder SHALL generate SBOM only for layers returned as “missing”.
FRDELTA3 Endtoend warm scan time (image differing by ≤2 layers) SHALL be ≤1s (P95).

5.4 Policy as Code (Muting & Expiration)

Ref Requirement
FRPOLICY1 Backend SHALL store policies as YAML by default, convertible to Rego for advanced usecases.
FRPOLICY2 Each policy change SHALL create an immutable history record (timestamp, actor, diff).
FRPOLICY3 REST endpoints /policy/import, /policy/export, /policy/validate SHALL accept YAML or Rego payloads.
FRPOLICY4 WebUI Policies tab SHALL provide Monaco editor with linting for YAML and Rego.
FRPOLICY5 StellaOps.MutePolicies module SHALL expose CLI stella policies apply --file scanpolicy.yaml.

5.5 SLSA Attestations & Rekor (TODO >6mo)

Ref Requirement
FRSLSA1 TODO Generate provenance in SLSAProvenance v0.2 for each SBOM.
FRREKOR1 TODO Sign SBOM hashes and upload to local Rekor mirror; verify during scan.

5.6 CLI & API Interface

Ref Requirement
FRCLI1 CLI stella scan SHALL accept --sbom-type {trivy,spdx,cyclonedx,auto}.
FRAPI1 API /scan SHALL accept sbomType query/body field (optional).
FRAPI2 API /layers/missing SHALL accept JSON array of digests and return JSON array of missing digests.

6·NonFunctional Requirements (NFR)

Ref Category Requirement
NFRPERF1 Performance P95 cold scan ≤5s; warm ≤1s (see FRDELTA3).
NFRPERF2 Throughput System shall sustain 60 concurrent scans on 8core node without queue depth >10.
NFRAVAIL1 Availability All services shall start offline; any Internet call must be optional.
NFRSCAL1 Scalability Horizontal scaling via Kubernetes replicas for backend, Redis Sentinel, Mongo replica set.
NFRSEC1 Security All interservice traffic shall use TLS or localhost sockets.
NFRCOMP1 Compatibility Platform shall run on x8664 Linux kernel ≥5.10; Windows agents (TODO>6mo) must support Server 2019+.
NFRI18N1 Internationalisation UI must support RU and EN locale toggles.
NFROBS1 Observability Export Prometheus metrics for scan duration, queue length, policy eval duration.

##7Acceptance Criteria

  1. Issue 333 /scan calls; 334th returns HTTP429 and RetryAfter.
  2. Redis failure during test → API returns 0 remaining & warns in logs.
  3. UI banner activates at 133 remaining; clears next UTC midnight.

8·System Interfaces

8.1 External APIs

(This is the complete original table, plus new /quota row.)

Path Method Auth Quota Description
/scan POST Bearer Submit SBOM or imageRef for scanning.
/quota GET Bearer Return remaining quota for current token.
/policy/rules GET/PUT Bearer+RBAC CRUD YAML or Rego policies.
/plugins POST/GET Bearer+Admin Upload or list plugins.
GET /quota
Authorization: Bearer <token>

200 OK
{
"limit": 333,
"remaining": 121,
"resetsAt": "2025-07-14T23:59:59Z"
}

9 ·Assumptions & Constraints

  • Hardware reference: 8vCPU, 8GB RAM, NVMe SSD.
  • MongoDB and Redis run colocated unless horizontal scaling enabled.
  • All docker images tagged latest are immutable (CI process locks digests).
  • Rego evaluation runs in embedded OPA Golibrary (no external binary).

10·Future Work (Beyond 12Months)

  • Rekor transparency log crosscluster replication.
  • AIassisted falsepositive triage plugin.
  • Clusterwide injection for live runtime scanning.

11·Revision History

Version Date Notes
v1.2 11Jul2025 Commercial references removed; plugin contract (§3.3) and new NFR categories added; added User Classes & Traceability.
v1.1 11Jul2025 Split out RUspecific items; OSS scope
v1.0 09Jul2025 Original unified SRS

(End of SystemRequirements Specification v1.2core)