Skip to main content

Architecture and data flows

Written for a security reviewer. Everything here is observable in a running install, and every claim has a page you can check it against.

What runs where

Two namespaces, three charts, one ingress point.

internet

│ api.gen0sec.com:443 (the only outbound path)

┌───────────────────────────┼──────────────────────────────────────────────┐
│ your cluster │ │
│ ▲ │
│ ┌─────────────────────── │ ─────────────────────────────────────────┐ │
│ │ namespace: gen0sec │ │ │
│ │ │ │ │
│ │ dashboard relay(download-api) 13 application services │ │
│ │ │ │
│ └───────────────────────────────┬───────────────────────────────────┘ │
│ │ in-cluster only │
│ ┌───────────────────────────────┼───────────────────────────────────┐ │
│ │ namespace: gen0sec-system │ │ │
│ │ ▼ │ │
│ │ Postgres (3) Kafka (3) object store (4) caches (2) │ │
│ │ Postgres operator Kafka operator ingress operator │ │
│ └───────────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────┘

│ one address, TLS, path-prefix routed

your agents and your users
NamespaceContainsReachable from outside
gen0secThe application services and the dashboardYes, through the ingress you publish
gen0sec-systemPostgres, Kafka, object store, two caches, and the three operatorsNo

Nothing in gen0sec-system is published. The application reaches it by cluster DNS.

Trust boundaries

Four, and they are worth naming separately because they fail differently.

BoundaryCrossed byControlled by
Internet to clusterThe relay, outbound only, one destinationYour firewall. See Ports and egress
Your network to clusterAgents and users, inbound, one addressYour ingress and its TLS
Namespace to namespaceThe application reading its databasesCluster DNS. No NetworkPolicy ships. See Hardening
Cluster to registryImage pullsThe image pull secret, one per namespace

Data flows

Inbound: agents and users

FlowPathAuthentication
Agent telemetry and eventsYour address, then the ingest services, then Kafka, then PostgresAgent API key
Agent configuration pull and pushYour address, then the configuration servicesAgent API key
Agent artifact downloadYour address, then the relay, then Gen0SecAgent API key, validated locally. The relay uses your installation's own key upstream, so agent keys never leave. See Data handling
Dashboard sign-inYour address, then the dashboard, then PostgresEmail and password, held in your Postgres. No external identity provider at this release

Outbound: the relay, and nothing else

One destination, one purpose: fetching four licensed datasets that are in no artifact we ship.

DatasetWhy it cannot be shipped
CTI indicatorsLicensed by upstream providers
GeoIP databasesLicensed by MaxMind and IPInfo
ML modelsPublished by gen0sec, refreshed independently of releases
IDS rulesLicensed as part of the Emerging Threats ruleset

The relay is a relay, not a cache. Nothing is stored on the way through, so there is no local artifact store to size and no staleness window.

Never outbound

DatasetWhat it isWhere it stays
identityWorkload identity produced in your clusterYour object store
policy-edgesPod IPs, namespaces, NetworkPolicy edgesYour object store

Relaying either would push a map of your workload topology to a service you do not run. It is not configurable and there is no flag that enables it. Uploads are not relayed either: the relay is read-only.

Where data is stored

StoreContainsBacked up by you
PostgresThe system of record: configuration, agents, policy, historyYes, always
Object storeDatasets, and the two locally-produced sets aboveYes
KafkaIn-flight events between ingest and persistenceNo, it is transport
CacheNothing durableNo

See Back up and restore.

What the platform requires of your cluster

RequirementDetail
cluster-admin during installFor CRDs and cluster-scoped RBAC. See Privileges and RBAC
Custom resource definitionsPostgres and Kafka operator CRDs, cluster-scoped by nature
Its own ingress controllerInstalled by the infra chart, ingressClassName: synapse
One outbound destinationapi.gen0sec.com:443
No node access, no host mounts, no privileged containersSee Hardening

Questions a reviewer usually asks next

QuestionPage
What exactly can leave the cluster?Data handling
What ports and destinations do I open?Ports and egress
Why does it need cluster-admin?Privileges and RBAC
How do I verify what you shipped me?Supply chain
What is the container security posture?Hardening
What does not work yet?Known limitations