5.2 KiB
Security boundaries (platform-level)
This document describes the baseline security boundaries expected across StellaOps modules. Module dossiers may impose stricter requirements.
Authentication and authorization
All externally reachable services are expected to enforce:
- Token validation (short-lived, tenant-scoped access tokens).
- Sender constraints where configured (DPoP / mTLS).
- Scope-based authorization (least privilege).
- Tenant isolation: requests and data access are filtered by tenant context.
Hard gates (typical examples)
Exact gates are module-specific, but common patterns include:
- Authority: nonce-based sender constraints (DPoP), strict token lifetimes, tenant-scoped issuance, and rate limiting.
- Signing/attestation services: narrow scopes, service identity requirements (often mTLS), and verification of the artifact being signed/attested (for example digest checks) before producing evidence.
Authoritative references:
docs/security/scopes-and-roles.mddocs/modules/authority/architecture.mddocs/modules/signer/architecture.mddocs/modules/attestor/architecture.md
Network segmentation (typical deployment)
- Front door / ingress: TLS termination, rate limiting, and WAF controls.
- Gateway layer: authenticated routing and tenant resolution; exposes only required service surfaces.
- Private service network: internal service-to-service traffic (least privilege, explicit allowlists).
- Stateful infrastructure: PostgreSQL, Valkey, object storage, message brokers (not directly internet-exposed).
Deployment bundles under deploy/ are the authoritative source of concrete network layouts.
Cross-Origin Resource Sharing (CORS)
All Stella Ops web services use a shared CORS extension provided by StellaOps.AspNet.Extensions (StellaOpsCorsExtensions), with settings resolved by StellaOps.Settings (StellaOpsCorsSettings).
Development mode
When the host environment is Development, CORS is automatically enabled with specific origins, AllowAnyHeader, AllowAnyMethod, and AllowCredentials.
Default dev origins (used when no explicit origin is configured):
https://stella-ops.localhttps://stella-ops.local:10000https://localhost:10000
Override the defaults by setting STELLAOPS_WEBSERVICES_CORS_ORIGIN.
Non-development (staging / production)
CORS is disabled by default. To enable, set the following environment variables (or their YAML/appsettings equivalents):
| Environment variable | Config key | Dev default | Prod default | Description |
|---|---|---|---|---|
STELLAOPS_WEBSERVICES_CORS |
StellaOps:WebServices:Cors:Enabled |
true |
false |
Set to true or 1 to enable CORS |
STELLAOPS_WEBSERVICES_CORS_ORIGIN |
StellaOps:WebServices:Cors:Origin |
https://stella-ops.local, https://stella-ops.local:10000, https://localhost:10000 |
(must be set) | Comma-separated list of allowed origins |
Legacy fallback
The following legacy env vars and config keys are still supported as fallbacks (resolved after the primary keys above):
| Legacy env var | Legacy config key |
|---|---|
STELLAOPS_CORS_ENABLED |
StellaOps:Cors:Enabled |
STELLAOPS_CORS_ALLOWED_ORIGIN |
StellaOps:Cors:AllowedOrigin |
Resolution order
Settings are resolved with a priority cascade (first non-empty value wins):
- Primary env var (
STELLAOPS_WEBSERVICES_CORS/STELLAOPS_WEBSERVICES_CORS_ORIGIN) - Primary config key (
StellaOps:WebServices:Cors:Enabled/StellaOps:WebServices:Cors:Origin) - Legacy env var (
STELLAOPS_CORS_ENABLED/STELLAOPS_CORS_ALLOWED_ORIGIN) - Legacy config key (
StellaOps:Cors:Enabled/StellaOps:Cors:AllowedOrigin) - Default:
truein Development,falseotherwise
When CORS is enabled, the policy always uses:
WithOrigins(...)(only the configured/default origins — neverAllowAnyOrigin)AllowAnyHeaderAllowAnyMethodAllowCredentials
Integration in services
Every web service's Program.cs includes:
using StellaOps.Auth.ServerIntegration;
// In service registration (before builder.Build())
builder.Services.AddStellaOpsCors(builder.Environment, builder.Configuration);
// In middleware pipeline (before UseAuthentication)
app.UseStellaOpsCors();
Source
The implementation lives in:
src/__Libraries/StellaOps.Settings/StellaOpsCorsSettings.cs(POCO + resolution logic)src/__Libraries/StellaOps.AspNet.Extensions/StellaOpsCorsExtensions.cs(ASP.NET DI + middleware)- Transitive reference via
StellaOps.Auth.ServerIntegration(so existing service references continue to work)
Data protection
- TLS for in-transit protection (including internal traffic where required by the profile).
- Secrets must not be embedded in documentation examples; use a secrets provider (file, Docker secrets, Kubernetes secrets, vault).
- Evidence artifacts should be written to content-addressed or immutable stores where replay/audit requires it.
Auditability
The platform is designed for audits:
- Deterministic outputs for the same inputs.
- Evidence artifacts (SBOM slices, advisories/VEX observations, explain traces) linkable to digests.
- Structured logs and correlation IDs for tracing request paths across services.