Skip to main content

CloudForge Configuration Reference

All configuration is via environment variables. Defaults are tuned for local development.

Legacy compatibility note:

  • Many backend env vars intentionally retain the AEGIS_* prefix.
  • Frontend defaults still use the aegis storage prefix and /icons/aegis-logo.svg asset name unless you override them with Vite env vars.

Server

VariableDefaultRequiredDescription
PORT8080NoHTTP listen port
APP_ENVproductionNoEnvironment (development enables pprof, dev CORS, RoleSwitcher)
GRC_PROVIDERmemoryNoGRC backend (memory, postgres, archer, servicenow)
CORS_ALLOWED_ORIGINS(empty)NoComma-separated allowed CORS origins

Auth / JWT

VariableDefaultRequiredDescription
JWT_SECRET_ENVAEGIS_JWT_SECRETNoName of env var containing HMAC secret
AEGIS_JWT_SECRET(none)ProdHS256 signing key (or use JWKS for RS256)
AEGIS_JWKS_URL(auto-derived)NoJWKS endpoint URL (auto-set from OKTA_DOMAIN if empty)
JWT_ISSUER(empty)NoExpected iss claim value
JWT_AUDIENCE(empty)NoExpected aud claim value
TLS_CERT_FILE(empty)NoPath to TLS certificate (enables HTTPS)
TLS_KEY_FILE(empty)NoPath to TLS private key

Current auth split:

  • Frontend SSO is a direct Okta SPA PKCE flow when VITE_OKTA_ISSUER and VITE_OKTA_CLIENT_ID are set.
  • Backend auth is bearer-token validation only: HS256 demo/static tokens or RS256 via JWKS.
  • Backend authorize/callback routes, refresh-token storage, and cookie-backed sessions are not implemented today.

AI / Enrichment

VariableDefaultRequiredDescription
AEGIS_AI_ENABLEDfalseNoEnable Bedrock AI enrichment
AEGIS_AI_REGIONus-east-1NoAWS region for Bedrock
AEGIS_AI_MODEL(Sonnet)NoBedrock model ID override
ANTHROPIC_API_KEY(empty)If AnthropicAnthropic API key (direct provider, bypasses Bedrock)
AWS_ACCESS_KEY_ID(chain)If AI enabledAWS credential (or use IAM role/SSO)
AWS_SECRET_ACCESS_KEY(chain)If AI enabledAWS credential

Identity Providers

VariableDefaultRequiredDescription
OKTA_DOMAIN(empty)NoOkta org domain (e.g., dev-12345.okta.com). Enables real Okta provider
OKTA_API_TOKEN(empty)If OktaOkta API token for user management
ENTRA_TENANT_ID(empty)NoAzure Entra ID tenant. Enables real Entra provider
ENTRA_CLIENT_ID(empty)If EntraEntra app registration client ID
ENTRA_CLIENT_SECRET(empty)If EntraEntra app registration client secret

Threat Intelligence

VariableDefaultRequiredDescription
GREYNOISE_API_KEY(empty)NoGreyNoise Community/Enterprise API key
HIBP_API_KEY(empty)NoHave I Been Pwned API key
OTX_API_KEY(empty)NoAlienVault OTX API key
THREATFOX_AUTH_KEY(empty)Noabuse.ch ThreatFox Auth-Key used for IOC lookup

EPSS and KEV feeds are public (no key required).

Redis / Rate Limiting

VariableDefaultRequiredDescription
RATE_LIMIT_ENABLEDtrueNoEnable API rate limiting
REDIS_ADDRlocalhost:6379NoRedis address (rate limiter + health check)
REDIS_PASSWORD_ENVAEGIS_REDIS_PASSWORDNoName of env var containing Redis password
AEGIS_REDIS_PASSWORD(empty)NoRedis auth password

Falls back to local (in-memory) rate limiting when Redis is unavailable.

Database

VariableDefaultRequiredDescription
AEGIS_DATABASE_URL(empty)NoPostgreSQL connection string for the Postgres GRC backend and FINDINGS_SOURCE=postgres (postgres://user:pass@host:5432/db?sslmode=require)

When unset, audit logging stays in-memory. If GRC_PROVIDER=postgres or FINDINGS_SOURCE=postgres, startup requires this variable.

Provider Selection

These variables control which provider implementation each subsystem uses. All default to memory (in-memory mock). See PROVIDER_CONFIG.md for per-provider required configuration.

VariableDefaultRequiredDescription
FINDINGS_SOURCEmockNoFindings data source (mock for in-memory 500-finding set, postgres for database-backed findings). Requires AEGIS_DATABASE_URL when set to postgres
WORKFLOW_ENGINEmemoryNoWorkflow engine backend (temporal for real workflows)
WAF_PROVIDERmemoryNoWAF backend (aws, cloudflare for real WAF rules)
SECRETS_PROVIDERmemoryNoSecrets scanner backend (aws, azure, gcp for real vault scanning)
SECRETS_AWS_REGION(empty)If SECRETS_PROVIDER=awsAWS region for Secrets Manager (falls back to AWS_REGION if set)
SECRETS_AZURE_KEY_VAULT_URL(empty)If SECRETS_PROVIDER=azureAzure Key Vault URL (https://<vault>.vault.azure.net)
SECRETS_GCP_PROJECT_ID(empty)If SECRETS_PROVIDER=gcpGCP project ID for Secret Manager

Graph Database

VariableDefaultRequiredDescription
PUPPYGRAPH_URL(empty)NoPuppyGraph endpoint URL. Enables graph query proxy
SECGRAPH_AUTO_TICKETSfalseNoAutomatically create routed tickets for newly materialized secgraph issues during startup sync when PostgreSQL is enabled

WebSocket / SSE

VariableDefaultRequiredDescription
WS_SERVER_URL(empty)Nows-server URL for SSE event publishing
WS_PUBLISH_KEY(empty)NoX-API-Key for ws-server /api/publish

Container Security

VariableDefaultRequiredDescription
CONTAINER_SCANNERmemoryNoContainer scanner backend (trivy for real scans)
TRIVY_OUTPUT_PATH(empty)NoPath to Trivy K8s JSON output; replaces mock topology

FinOps

VariableDefaultRequiredDescription
FINOPS_PROVIDERmemoryNoFinOps backend (aws for real Cost Explorer)
FINOPS_AWS_REGIONus-east-1NoAWS region for Cost Explorer API

Attack Path Engine

VariableDefaultRequiredDescription
ATTACK_PATH_MAX_FINDINGS5000NoMaximum findings to process in deferred attack path computation
ATTACK_PATH_MAX_PER_ACCOUNT125NoMaximum findings per account for attack path analysis

Encryption / Remediation

VariableDefaultRequiredDescription
AEGIS_STATE_ENCRYPTION_KEY(none)If encrypted rollbackAES-256-GCM key as 64-char hex string (32 bytes)
AEGIS_ROLLBACK_TOKEN(none)If rollback dispatcherAuthorization token for rollback ops (min 16 chars)

Integrations

VariableDefaultRequiredDescription
JIRA_URL(empty)NoJira instance URL. Enables ticket provider
JIRA_USERNAME(empty)If JiraJira username (email for Jira Cloud)
JIRA_API_TOKEN(empty)If JiraJira REST API token
JIRA_PROJECT_KEY(empty)NoDefault Jira project key
JIRA_ISSUE_TYPETaskNoDefault issue type for created tickets
ASANA_PAT(empty)If AsanaAsana Personal Access Token
ASANA_WORKSPACE_GID(empty)NoAsana workspace GID
ASANA_DEFAULT_PROJECT_GID(empty)NoDefault Asana project for ticket creation
ASANA_WEBHOOK_TOKEN(empty)If Asana webhooksPre-shared token for Asana webhook handshake auth
ADO_ORG_URL(empty)If ADOAzure DevOps organization URL (e.g., https://dev.azure.com/org). Enables ADO ticket provider
ADO_PAT(empty)If ADOAzure DevOps Personal Access Token
ADO_PROJECT(empty)If ADOAzure DevOps project name
GITLEAKS_LICENSE(empty)CI onlyGitleaks license key (CI action)

GRC Provider Credentials

When GRC_PROVIDER is not memory, the selected backend requires credentials:

VariableRequired ForDescription
AEGIS_DB_PASSWORDpostgresPostgreSQL password (name configurable via password_env in config)
ARCHER_PASSWORDarcherRSA Archer API password
SERVICENOW_PASSWORDservicenowServiceNow API password
SERVICENOW_CLIENT_IDservicenow (OAuth)ServiceNow OAuth client ID
SERVICENOW_CLIENT_SECRETservicenow (OAuth)ServiceNow OAuth client secret

Posture Management (Standalone CSPM Aggregator)

These variables configure the standalone CSPM aggregator binary (cmd/cspm-aggregator).

VariableDefaultRequiredDescription
AWS_ROLE_ARN(empty)If AWSOIDC role ARN for cross-account CSPM reader access
AZURE_TENANT_ID(empty)If AzureAzure tenant ID for CSPM aggregator (distinct from ENTRA_TENANT_ID)
GCP_ORG_ID(empty)If GCPGCP organization ID for aggregator scans
GCP_WIF_CONFIG_PATH(empty)If GCPPath to GCP Workload Identity Federation config file
ASANA_PROJECT_GID(empty)NoAsana project GID for aggregator notifications
MAIL_SENDER_ADDRESS(empty)NoEmail sender address for aggregator notification emails

Deployment (fly.toml defaults)

These are set in fly.toml for the Fly.io deployment:

VariableValueDescription
PORT8080HTTP listen port
GRC_PROVIDERmemoryIn-memory GRC backend
APP_ENVproductionProduction mode
RATE_LIMIT_ENABLEDtrueRate limiting on
CORS_ALLOWED_ORIGINShttps://cloudforge.lvonguyen.comAllowed web origins for the Fly API

Observability / Tracing

VariableDefaultRequiredDescription
AEGIS_TRACING_ENABLEDfalseNoEnable OpenTelemetry distributed tracing
AEGIS_OTLP_ENDPOINTlocalhost:4317NoOTLP collector gRPC endpoint
AEGIS_SAMPLING_RATE1.0NoTrace sampling rate (0.0–1.0)

Feature Flags

VariableDefaultRequiredDescription
AEGIS_RUST_PATHSfalseNoEnable Rust FFI attack path engine (requires rust build tag; falls back to pure-Go engine)

Frontend (Vite Build-Time)

These variables are embedded at build time via Vite's import.meta.env:

VariableDefaultDescription
VITE_API_URL/api/v1API base URL override (e.g., http://localhost:8080)
VITE_DEMO_MODE(empty)Set true to enable demo access and mock fallbacks
VITE_ENABLE_MOCK_FALLBACK(empty)Set true to allow API hooks to fall back to mock data outside full demo mode
VITE_OKTA_ISSUER(empty)Okta OIDC issuer URL for frontend auth
VITE_OKTA_CLIENT_ID(empty)Okta OIDC client ID
VITE_WS_URL(empty)WebSocket server URL for SSE events
VITE_STATIC_TOKEN(empty)Pre-signed JWT baked into the build for demo/static auth
VITE_DEV_TOKEN(empty)Dev-mode auth token override
VITE_COMPANY_NAMEContosoWhite-label company name
VITE_PRODUCT_NAMECloudForgeWhite-label product name
VITE_LOGO_PATH/icons/aegis-logo.svgPath to logo SVG (legacy filename retained for compatibility)
VITE_EMAIL_DOMAINcontoso.devDomain used in demo email addresses
VITE_REPO_PREFIXgithub.com/contosoRepository URL prefix
VITE_ENABLED_MODULEScloudforge,posture-management,threat-intel,remediation-engine,ops-centerComma-separated enabled module list
VITE_STORAGE_PREFIXaegissessionStorage/localStorage key prefix (legacy default retained)
VITE_BRAND_PRIMARY(empty)Primary brand color override (hex)
VITE_BRAND_SECONDARY(empty)Secondary brand color override (hex)
VITE_BRAND_ACCENT(empty)Accent brand color override (hex)
VITE_THEMEneutralDefault theme preset
VITE_DEMO_ACCESS_ENABLED(empty)Set true to enable demo access button
VITE_DEMO_VIEWER_EMAIL(empty)Email pre-filled for demo Okta login
VITE_DEMO_VIEWER_PASSWORD(empty)Demo password hint/content source for the landing page

Graceful Degradation

When optional services are unavailable, the server degrades gracefully:

MissingBehavior
RedisLocal in-memory rate limiting
AI credentialsEnrichment endpoint returns 503
Okta/Entra env varsMock identity providers
PuppyGraph URLGraph query endpoint disabled
Threat intel API keysRespective feed skipped
ws-server URLDeploy preview SSE disabled
Jira URLMock ticket provider
AEGIS_DATABASE_URLIn-memory audit logging only unless postgres-backed GRC/findings are explicitly enabled; those modes require this variable and fail fast when it is missing
WORKFLOW_ENGINEIn-memory workflow stubs
WAF_PROVIDERIn-memory WAF stubs
SECRETS_PROVIDERIn-memory secrets scanner