SecurityEvent is the headline event type emitted by every operator
in ugallu. The platform freezes a closed catalog of 92 types under
security.ugallu.io/v1alpha1 - a ValidatingAdmissionPolicy
enforces that spec.type matches one of the entries below, so an
emitter that ships with a typo is rejected at the API server before
any attestor or forensics consumer ever sees it.
A rule or detector matched a hostile or risky pattern.
Default whitelist for forensics.spec.trigger.classes.
Audit
A non-malicious but auditable API operation.
Captured for retention; rarely triggers response.
Forensic
Lifecycle event of an incident capture pipeline.
Emitted by forensics itself - capture started, completed, failed.
Compliance
A scheduled or ad-hoc compliance check completed (kube-bench, backup-verify, attestation).
Drives compliance dashboards; ranks via worstSeverity.
Anomaly
A platform self-health signal: source went silent, queue grew, key rotation overdue.
On-call / SRE dashboards. Not for application incident response.
PolicyViolation
A workload deviated from its declared policy (e.g. seccomp drift).
Drives gitops-responder or human review.
The class is what ranks an event on the dashboards, not the
severity. A Detection critical and a Compliance critical are
treated very differently downstream.
The table is grouped by emitter, then sorted by typical severity.
The “Severity” column is the value at the emit site - rules and
policy can override (e.g. SigmaRule lets the user pick severity
per match).
These are emitted by the SDK runtime singletons (attestor, ttl,
backpressure, the emitter) and by individual operators when they
detect their own degraded paths or a cluster-wide condition. They
drive on-call dashboards rather than incident response.
Type
Class
Severity
Trigger
IncidentBurst
Anomaly
critical
incident rate / minute crossed the alert floor (often a real attack)
KeyRotationEmergency
Anomaly
critical
the configured signing key is past its rotation deadline
RBACEscalationChain
Anomaly
critical
a chain of RBAC grants ending in cluster-admin was observed
WORMIntegrityViolation
Anomaly
critical
the WORM bucket reported a checksum mismatch on read-back
AttestorUnavailable
Anomaly
high
attestor health check failed
AuditLogStreamSilent
Anomaly
high
audit-detection received zero events for a configurable window
BehaviorBaselineDeviation
Anomaly
high
a learned baseline (workload, namespace) is exceeded
ClockSkewDetected
Anomaly
high
NTP skew on a node exceeded 250ms (attestor / Rekor timestamp risk)
EtcdBackpressureHigh
Anomaly
high
the apiserver returned 429 on SE writes
GitOpsConflict
Anomaly
high
the gitops-responder hit an unresolved merge conflict
ImageRevocation
Anomaly
high
a pulled image’s signature is no longer valid (post-pull revocation)
LateralMovementSuspected
Anomaly
high
reasoner-style correlation: the same identity touched several tenants in a short window
TetragonDataInconsistent
Anomaly
high
Tetragon FineGuidance event fields didn’t match the bridge schema
TTLConfigMissing
Anomaly
high
TTL controller can’t find its config in a watched namespace
Append the constant to sdk/pkg/api/v1alpha1/types.go and to
the KnownTypes map in types_catalog.go.
Update the type-catalog ValidatingAdmissionPolicy enum so the
apiserver lets the new spec.type value through.
Run hack/ci-local.sh - the type-catalog parity check fails
if the constant, the map, and the policy diverge.
The closed catalog is what lets every downstream consumer
(dashboards, attestor’s class-to-severity matrix, the gitops
router) treat spec.type as a typed enum.