Skip to content

Security assurance case

This document synthesizes Kollect's security claims, trust boundaries, and countermeasures. It supports OpenSSF Best Practices assurance_case criteria and complements ADR-0104 (architecture) and SECURITY.md (disclosure policy).

Last updated: 2026-06-05

Claims and scope

Kollect is a Kubernetes operator that reads selected cluster resources and exports aggregated inventory to external sinks. The operator runs with cluster credentials and must not leak secrets, exceed RBAC, or export data outside tenant boundaries.

Security requirements are tracked as NFR-SEC in REQUIREMENTS.md:

ID Requirement Primary enforcement
NFR-SEC-1 Credentials only via secretRef; never in spec/status/logs ADR-0104, ADR-0602, logcheck
NFR-SEC-2 Default verify TLS; insecureSkipVerify opt-in and surfaced ADR-0104, sink validators
NFR-SEC-3 Tenancy via KollectScope + SAR; least-privilege RBAC ADR-0203, ADR-0704, task audit:rbac
NFR-SEC-4 Sensitive-key redaction before export ADR-0303, ADR-0405
NFR-SEC-5 Nonroot image (UID 65532); minimal runtime deps (git/openssh-client for git CLI engine) Dockerfile, ADR-0705

Trust boundaries

flowchart TB
  subgraph cluster["Kubernetes cluster"]
    API["Kubernetes API"]
    CRDs["Kollect CRDs"]
    Secrets["Secrets / ConfigMaps"]
    Op["Kollect operator"]
    Store["In-memory collect store"]
    API --> Op
    CRDs --> Op
    Secrets --> Op
    Op --> Store
  end

  subgraph external["External (untrusted network)"]
    Sinks["Sinks — Git, S3, Postgres, Kafka/NATS"]
    ReadAPI["Read API (optional, auth-gated)"]
  end

  Store -->|"redacted export contract"| Sinks
  Store -->|"Bearer / mTLS"| ReadAPI

  Tenant["Tenant namespace boundary"] -.-> Op
  SAR["SubjectAccessReview"] -.-> Op
Boundary Trust assumption Controls
Operator ↔ Kubernetes API Apiserver is authentic; RBAC is correctly configured Least-privilege ClusterRole/Role; SAR before cross-namespace reads
Operator ↔ Secrets Secret objects are readable only where RBAC allows secretRef only; secrets resolved in reconciler, never logged
Operator ↔ Sinks Network path may be hostile TLS verify by default; CA from secret/configmap; no skip for Git/hub
Tenant ↔ Tenant Namespaced inventories must not read foreign namespaces KollectScope, watch namespace limits, SAR-gated degrade
Read API ↔ Client HTTP surface is optional and must be authenticated Token/mTLS (ADR-0404); off by default
Supply chain ↔ Adopter Registry and release artifacts may be tampered cosign signatures, SPDX SBOM, SLSA provenance (ADR-0705)

Threats and countermeasures

Threat Impact Countermeasure Verification
Cross-tenant data exfiltration High KollectScope, namespace-scoped watches, SAR checks envtest tenancy tests; task audit:rbac
Secret leakage to sinks/logs/status Critical Redaction at extraction (scrubKeys); no secret logging; status summaries only Unit/golden tests; logcheck; CodeQL
MITM on sink/cluster connections High TLS verify default; configurable CA; hub mTLS pattern Integration tests; ADR-0503
Over-broad operator RBAC High Minimal verbs; tenant mode Role instead of ClusterRole Rendered RBAC audit; Polaris/kubeaudit
Compromised release artifact High cosign, SBOM, Trivy on release images Release workflow; SECURITY-REVIEW.md
Dependency CVE in build/runtime Medium–High govulncheck CI gate; Dependabot; SCA policy CI vulncheck job; SCA policy
Path traversal / injection via Git sink Medium Ref and path validators at admission and export internal/sink/git/validate.go tests
Unauthenticated Read API access High Auth required; feature-gated deployment ADR-0404; API tests

Residual risks

Risk Mitigation status Owner action
Solo maintainer (bus factor 1) Documented in GOVERNANCE.md Appoint co-maintainer when feasible
Encryption-at-rest for external sinks Recommended, not enforced by operator Adopter configures Postgres/S3 encryption
Built-in secret-leak scanner on payloads Open question (ADR-0104) Defense-in-depth beyond scrubKeys
Hub plain HTTP inside pod TLS terminated at ingress/mesh Documented in ADR-0503; deployer responsibility

Evidence and review cadence

Artifact Location
Security architecture ADR ADR-0104
Operator guidelines guidelines § 3
Self security review (2026-06-05) SECURITY-REVIEW.md
VEX / vulnerability exceptions docs/security/vex.json
SCA remediation SLAs SCA policy

Revisit this assurance case when adding sink backends, changing tenancy, or after a security review or incident.