The module lifecycle stage: Experimental
The module has requirements for installation
The Deckhouse Kubernetes Platform installs CRDs but does not remove them when a module is disabled. If you no longer need the created CRDs, delete them.
ClusterSecurityEventAlertRule
Short names: csear
Scope: Cluster
Version: v1alpha1
-
objectspec
Turns security events into a Prometheus alert.
Matched events are counted per key over a time window, and the rule fires once the count reaches the threshold. Without
aggregationevery matched event fires the rule.A firing rule raises the
D8SecurityEventAlertFiringalert, which reaches operators the way every other cluster alert does: as a ClusterAlert object, in the console, and through the cluster’s own alert delivery. There is nothing to configure for delivery.-
objectspec.aggregation
Counting rule.
Events are grouped by
groupByand the alert fires as soon as a group reachesthresholdwithinwindow. Counting then restarts for that group.Counters live in memory, so a restart of the aggregator starts the window anew.
-
array of stringsspec.aggregation.groupBy
Required value
Event fields that identify a group.
Their values become alert labels, so the list is restricted to fields with bounded cardinality: a key like an object name would create a group per event, grow the aggregator without bound and flood the alert receiver.
-
stringspec.aggregation.groupBy.Element of the arrayEvent field to group by, named after the field it reads:
EventCode(event.code),EventSeverity(event.severity),EventCategory(event.category),SourceComponent(source.component),ActorID(actor.id),ActorSourceIP(actor.sourceIP),ObjectNamespace(object.namespace),ObjectType(object.type). The label on the alert carries the field path, soActorIDshows up asactor_id.Allowed values:
EventCode,EventSeverity,EventCategory,SourceComponent,ActorID,ActorSourceIP,ObjectNamespace,ObjectType
-
-
integerspec.aggregation.threshold
Required value
Number of events in a group that triggers the alert.
Use a rule without
aggregationto alert on every event. -
stringspec.aggregation.window
Required value
How long a group keeps counting before it is forgotten.
Digits followed by
s,morh, for example5m. Pick the span the behaviour you are describing happens within: brute force is minutes, a slow sweep is hours.Pattern:
^[0-9]+(s|m|h)$
-
-
objectspec.alert
Required value
What is sent when the rule fires.-
stringspec.alert.description
Longer description, shown as the alert’s
descriptionannotation.Say what to check and where, the way a runbook would.
-
objectspec.alert.labels
Extra alert labels, added next to
rule,severity_leveland thegroupBykeys.Labels identify the alert: two alerts with the same labels are the same alert.
-
integerspec.alert.severityLevel
DKP severity level, sent as the
severity_levellabel.Keep in mind that on clusters with
update.blockOnAlertsenabled in thedeckhousemodule, an alert with a level at or below the configured threshold (4 by default) blocks DKP releases from being applied.Default:
6 -
stringspec.alert.summary
Required value
Short one-line summary, shown as the alert’ssummaryannotation, for exampleOne actor read an unusual number of secrets.
-
-
objectspec.match
Required value
Which security events this rule applies to.
Criteria are combined with AND.
-
stringspec.match.actorType
Narrow the rule to a kind of subject.
ServiceAccountskeeps only actors matchingsystem:serviceaccount:*;NonServiceAccountskeeps everything else, which is how you write a rule about people and other outside clients. Mirrors the console’s “Subject type” filter.Default:
AnyAllowed values:
Any,ServiceAccounts,NonServiceAccounts -
array of stringsspec.match.actors
Only count events from these actors, matched against
actor.idthe same way asexcludeActors:*stands for any sequence of characters, everything else is literal.Useful for watching a specific subject, for example a ServiceAccount that must not change secrets.
-
array of stringsspec.match.categoriesEvent categories to match, as declared in
SecurityEventDefinition.spec.category.-
stringspec.match.categories.Element of the array
Allowed values:
Auth,Rbac,Runtime,Network,Config
-
-
array of stringsspec.match.eventCodesEvent codes to match, as declared in SecurityEventDefinition.
-
stringspec.match.eventCodes.Element of the arrayFor example
K8S_SECRET_ACCESSED.Pattern:
^[A-Z][A-Z0-9_]*$
-
-
array of stringsspec.match.excludeActors
Actors whose events the rule ignores, matched against
actor.id.A
*stands for any sequence of characters; everything else is literal.Platform components generate most of the routine activity — on an idle cluster the Deckhouse ServiceAccount alone accounts for thousands of secret reads per hour — so a rule about people and workloads needs them out of the way. Typical list:
excludeActors: - "system:serviceaccount:d8-*" - "system:serviceaccount:kube-system:*" - "system:node:*" - "system:apiserver" -
booleanspec.match.excludeSystemActors
Ignore events produced by the platform itself.
Routine cluster work touches secrets, RBAC and pods constantly — on an idle cluster the Deckhouse ServiceAccount alone accounted for 2617 of 2812 secret reads in an hour — and a rule about people and workloads drowns in it.
The list is maintained by the module and matches the “Exclude system” filter of the console, so hiding platform noise in the interface and writing a rule put the same events out of the way. It covers
actor.idmatchingsystem:serviceaccount:kube-system:*,system:serviceaccount:d8-*,system:node:*,system:kube-*,system:apiserverandkubernetes-admin.Nothing is removed from the event stream: the events are still collected and delivered, this rule just stops counting them. Events without an actor are kept, and anonymous or unauthenticated identities are never treated as platform actors — those are what a security rule is looking for.
Default:
true -
stringspec.match.severityMinMinimal event severity to match (inclusive).
Allowed values:
Low,Medium,High,Critical -
array of stringsspec.match.sourcesSource components to match, as declared in
SecurityEventDefinition.spec.source(for examplekube-audit).
-
-
-
objectstatusCurrent status of this resource.
-
array of objectsstatus.conditionsRepresents the latest available observations of an object’s state.
-
stringstatus.conditions.lastTransitionTime
-
stringstatus.conditions.message
Maximum length:
32768 -
integerstatus.conditions.observedGeneration
-
stringstatus.conditions.reason
Length:
1..1024 -
stringstatus.conditions.status
Allowed values:
True,False,Unknown -
stringstatus.conditions.type
Maximum length:
316
-
-
integerstatus.observedGenerationThe generation observed by the controller.
-
ClusterSecurityEventConfig
Short names: csec
Scope: Cluster
Version: v1alpha1
-
objectspecDefines which sources are enabled and which destinations they should be shipped to.
-
objectspec.cefDefault CEF (Common Event Format) metadata for destinations that use CEF encoding. These values are used when a ClusterSecurityEventDestination has encoding.codec=CEF but does not specify its own cef.deviceVendor/deviceProduct/deviceVersion.
-
stringspec.cef.deviceProductDefault device product for CEF header.
Default:
security-events-manager -
stringspec.cef.deviceVendorDefault device vendor for CEF header.
Default:
Deckhouse -
stringspec.cef.deviceVersionDefault device version for CEF header.
Default:
1
-
-
stringspec.defaultSeverityThreshold
Required value
Minimal severity to ship (inclusive).Allowed values:
Low,Medium,High,Critical -
array of stringsspec.destinations
Required value
List of ClusterSecurityEventDestination names. -
array of stringsspec.enabledSources
If set, only these sources are enabled. If omitted, all sources are enabled. Expected format:
- clusterSecurityEventShipper/
/<source> - podSecurityEventShipper/<namespace>/
/<source>
-
stringspec.enabledSources.Element of the array
Pattern:
^(clusterSecurityEventShipper/[^/]+/[^/]+|podSecurityEventShipper/[^/]+/[^/]+/[^/]+)$
- clusterSecurityEventShipper/
-
array of stringsspec.enabledSourcesMasks
If set, only sources matching these glob-style masks are enabled. If omitted, all sources are enabled. Masks use ‘*’ to match any substring (including ‘/’). You must set either enabledSources or enabledSourcesMasks, but not both. Expected format:
- clusterSecurityEventShipper/
/<source> - podSecurityEventShipper/<namespace>/
/<source> Examples: - podSecurityEventShipper/*
- clusterSecurityEventShipper/kube-audit/*
-
stringspec.enabledSourcesMasks.Element of the array
Pattern:
^(clusterSecurityEventShipper/.+|podSecurityEventShipper/.+)$
- clusterSecurityEventShipper/
-
-
objectstatusCurrent status of this resource.
-
array of objectsstatus.conditionsRepresents the latest available observations of an object’s state.
-
stringstatus.conditions.lastTransitionTime
-
stringstatus.conditions.message
Maximum length:
32768 -
integerstatus.conditions.observedGeneration
-
stringstatus.conditions.reason
Length:
1..1024 -
stringstatus.conditions.status
Allowed values:
True,False,Unknown -
stringstatus.conditions.type
Maximum length:
316
-
-
integerstatus.observedGenerationThe generation observed by the controller.
-
ClusterSecurityEventDestination
Short names: csed
Scope: Cluster
Version: v1alpha1
-
objectspec
Describes where to send security events.
Fields are designed to be translated to deckhouse.io/log-shipper ClusterLogDestination.
-
objectspec.buffer
Per-destination buffer settings for the gateway Vector sink.
Overrides the global gateway.buffer defaults from module values. If not set, the global defaults are used.
-
integerspec.buffer.maxEvents
Maximum number of events in the buffer.
Used as a secondary limit for
Memorytype. Ignored whentype=Disk(disk buffer uses maxSize only).Default:
500 -
stringspec.buffer.maxSize
Maximum size of the buffer as a Kubernetes quantity string with a mandatory unit suffix (e.g. “512Mi”, “1Gi”, “256Mi”).
Plain numbers without a unit suffix are NOT accepted. For
Disk: maximum disk space used on the volume. ForMemory: approximate memory limit for the in-memory ring buffer.Default:
512MiPattern:
^[0-9]+(\.[0-9]+)?(Ki|Mi|Gi|Ti|Pi|Ei|k|M|G|T|P|E)$ -
stringspec.buffer.type
Buffer type.
Possible values:
Disk: disk-based buffer using LevelDB. Survives Vector process restarts within the pod. DEFAULT — ensures no security events are lost during temporary destination outages.Memory: in-memory ring buffer. Faster, but all events are lost on Vector process restart. Use only for test/dev environments.
Default:
DiskAllowed values:
Memory,Disk -
stringspec.buffer.whenFull
Behavior when the buffer is full.
Possible values:
Block: apply backpressure to upstream. Pipeline slows down but NO events are lost. DEFAULT — the correct choice for security events.DropNewest: discard incoming events. Data loss occurs but no backpressure. Use only when data loss is acceptable (test environments).
Default:
BlockAllowed values:
Block,DropNewest
-
-
objectspec.console
-
objectspec.console.encoding
Encoding format for events sent to console.
Default is
JSON. SetcodectoCEFto emit events in Common Event Format.-
objectspec.console.encoding.cef
CEF-specific configuration fields.
Only applicable when
codecis set toCEF. If omitted, defaults are used:deviceVendor=Deckhouse,deviceProduct=security-events-manager,version=1.-
stringspec.console.encoding.cef.deviceProductDevice product field in the CEF header.
Default:
security-events-manager -
stringspec.console.encoding.cef.deviceVendorDevice vendor field in the CEF header.
Default:
Deckhouse -
stringspec.console.encoding.cef.deviceVersionDevice version field in the CEF header.
Default:
1
-
-
stringspec.console.encoding.codec
Encoding codec for the destination.
Possible values:
JSON: structured JSON (default, suitable for Loki, ES, Kafka, etc.).CEF: Common Event Format (suitable for SIEM integration via Kafka, Vector, File, Console).
Default:
JSONAllowed values:
JSON,CEF -
stringspec.console.encoding.syslogWrapper
Optional syslog header wrapping for CEF output.
Only applicable when
codecisCEF.Possible values:
None: emit bare CEF string (default).RFC3164: prepend RFC 3164 (BSD syslog) header.RFC5424: prepend RFC 5424 (IETF syslog) header.
Default:
NoneAllowed values:
None,RFC3164,RFC5424
-
-
stringspec.console.target
Default:
StdoutAllowed values:
Stdout,Stderr
-
-
objectspec.elasticsearch
-
objectspec.elasticsearch.auth
-
stringspec.elasticsearch.auth.password
Password for Basic authentication.
Consider using
passwordSecretRefinstead to avoid storing secrets in the CR spec. -
objectspec.elasticsearch.auth.passwordSecretRef
-
stringspec.elasticsearch.auth.passwordSecretRef.name
Required value
Name of the secret in the
d8-security-events-managernamespace containing the credential.The secret must have the key
valuein itsdatafield.
-
-
stringspec.elasticsearch.auth.strategy
Default:
NoneAllowed values:
None,Bearer,Basic -
stringspec.elasticsearch.auth.token
Bearer token for authentication.
Consider using
tokenSecretRefinstead to avoid storing secrets in the CR spec. -
objectspec.elasticsearch.auth.tokenSecretRef
-
stringspec.elasticsearch.auth.tokenSecretRef.name
Required value
Name of the secret in the
d8-security-events-managernamespace containing the credential.The secret must have the key
valuein itsdatafield.
-
-
stringspec.elasticsearch.auth.username
-
-
stringspec.elasticsearch.endpoint
Required value
-
stringspec.elasticsearch.index
-
objectspec.elasticsearch.tls
-
stringspec.elasticsearch.tls.caBase64-encoded PEM with the CA certificate chain used to verify the destination server certificate.
-
booleanspec.elasticsearch.tls.verifyCertificate
Default:
true -
booleanspec.elasticsearch.tls.verifyHostname
Default:
true
-
-
-
objectspec.file
-
objectspec.file.encoding
Encoding format for events written to this file destination.
Default is
JSON. SetcodectoCEFto write events in Common Event Format.-
objectspec.file.encoding.cef
CEF-specific configuration fields.
Only applicable when
codecis set toCEF. If omitted, defaults are used:deviceVendor=Deckhouse,deviceProduct=security-events-manager,version=1.-
stringspec.file.encoding.cef.deviceProductDevice product field in the CEF header.
Default:
security-events-manager -
stringspec.file.encoding.cef.deviceVendorDevice vendor field in the CEF header.
Default:
Deckhouse -
stringspec.file.encoding.cef.deviceVersionDevice version field in the CEF header.
Default:
1
-
-
stringspec.file.encoding.codec
Encoding codec for the destination.
Possible values:
JSON: structured JSON (default, suitable for Loki, ES, Kafka, etc.).CEF: Common Event Format (suitable for SIEM integration via Kafka, Vector, File, Console).
Default:
JSONAllowed values:
JSON,CEF -
stringspec.file.encoding.syslogWrapper
Optional syslog header wrapping for CEF output.
Only applicable when
codecisCEF.Possible values:
None: emit bare CEF string (default).RFC3164: prepend RFC 3164 (BSD syslog) header.RFC5424: prepend RFC 5424 (IETF syslog) header.
Default:
NoneAllowed values:
None,RFC3164,RFC5424
-
-
stringspec.file.path
Required value
-
-
objectspec.http
-
objectspec.http.auth
-
stringspec.http.auth.password
Password for Basic authentication.
Consider using
passwordSecretRefinstead to avoid storing secrets in the CR spec. -
objectspec.http.auth.passwordSecretRef
-
stringspec.http.auth.passwordSecretRef.name
Required value
Name of the secret in the
d8-security-events-managernamespace containing the credential.The secret must have the key
valuein itsdatafield.
-
-
stringspec.http.auth.strategy
Default:
NoneAllowed values:
None,Bearer,Basic -
stringspec.http.auth.token
Bearer token for authentication.
Consider using
tokenSecretRefinstead to avoid storing secrets in the CR spec. -
objectspec.http.auth.tokenSecretRef
-
stringspec.http.auth.tokenSecretRef.name
Required value
Name of the secret in the
d8-security-events-managernamespace containing the credential.The secret must have the key
valuein itsdatafield.
-
-
stringspec.http.auth.username
-
-
stringspec.http.endpoint
Required value
Full URL to send events to, including the path, for example
https://collector.example.com/api/ingest.Events are always sent with the POST method.
-
stringspec.http.framing
How a set of events is laid out in the request body.
JSONArraywraps the set into a single JSON array, which is what receivers expecting one document per request read.NewlineDelimitedsends one JSON object per line (NDJSON), which suits collectors that read a stream of records.Default:
JSONArrayAllowed values:
JSONArray,NewlineDelimited -
objectspec.http.headers
Additional request headers.
The
Authorizationheader is managed byauthand must not be set here. -
objectspec.http.tls
-
stringspec.http.tls.caBase64-encoded PEM with the CA certificate chain used to verify the destination server certificate.
-
booleanspec.http.tls.verifyCertificate
Default:
true -
booleanspec.http.tls.verifyHostname
Default:
true
-
-
-
objectspec.kafka
-
array of stringsspec.kafka.brokers
Required value
-
objectspec.kafka.encoding
Encoding format for events sent to this Kafka destination.
Default is
JSON. SetcodectoCEFto emit events in Common Event Format (requires a CEF-capable SIEM consumer on the receiving end).-
objectspec.kafka.encoding.cef
CEF-specific configuration fields.
Only applicable when
codecis set toCEF. If omitted, defaults are used:deviceVendor=Deckhouse,deviceProduct=security-events-manager,version=1.-
stringspec.kafka.encoding.cef.deviceProductDevice product field in the CEF header.
Default:
security-events-manager -
stringspec.kafka.encoding.cef.deviceVendorDevice vendor field in the CEF header.
Default:
Deckhouse -
stringspec.kafka.encoding.cef.deviceVersionDevice version field in the CEF header.
Default:
1
-
-
stringspec.kafka.encoding.codec
Encoding codec for the destination.
Possible values:
JSON: structured JSON (default, suitable for Loki, ES, Kafka, etc.).CEF: Common Event Format (suitable for SIEM integration via Kafka, Vector, File, Console).
Default:
JSONAllowed values:
JSON,CEF -
stringspec.kafka.encoding.syslogWrapper
Optional syslog header wrapping for CEF output.
Only applicable when
codecisCEF.Possible values:
None: emit bare CEF string (default).RFC3164: prepend RFC 3164 (BSD syslog) header.RFC5424: prepend RFC 5424 (IETF syslog) header.
Default:
NoneAllowed values:
None,RFC3164,RFC5424
-
-
objectspec.kafka.sasl
-
stringspec.kafka.sasl.mechanism
Allowed values:
Plain,SCRAM-SHA-256,SCRAM-SHA-512 -
stringspec.kafka.sasl.password
SASL password.
Consider using
passwordSecretRefinstead to avoid storing secrets in the CR spec. -
objectspec.kafka.sasl.passwordSecretRef
-
stringspec.kafka.sasl.passwordSecretRef.name
Required value
Name of the secret in the
d8-security-events-managernamespace containing the credential.The secret must have the key
valuein itsdatafield.
-
-
stringspec.kafka.sasl.username
-
-
objectspec.kafka.tls
-
stringspec.kafka.tls.caBase64-encoded PEM with the CA certificate chain used to verify the destination server certificate.
-
booleanspec.kafka.tls.verifyCertificate
Default:
true -
booleanspec.kafka.tls.verifyHostname
Default:
true
-
-
stringspec.kafka.topic
Required value
-
-
objectspec.loki
-
objectspec.loki.auth
-
stringspec.loki.auth.password
Password for Basic authentication.
Consider using
passwordSecretRefinstead to avoid storing secrets in the CR spec. -
objectspec.loki.auth.passwordSecretRef
-
stringspec.loki.auth.passwordSecretRef.name
Required value
Name of the secret in the
d8-security-events-managernamespace containing the credential.The secret must have the key
valuein itsdatafield.
-
-
stringspec.loki.auth.strategy
Default:
NoneAllowed values:
None,Bearer,Basic -
stringspec.loki.auth.token
Bearer token for authentication.
Consider using
tokenSecretRefinstead to avoid storing secrets in the CR spec. -
objectspec.loki.auth.tokenSecretRef
-
stringspec.loki.auth.tokenSecretRef.name
Required value
Name of the secret in the
d8-security-events-managernamespace containing the credential.The secret must have the key
valuein itsdatafield.
-
-
stringspec.loki.auth.username
-
-
stringspec.loki.endpoint
Required value
-
objectspec.loki.tls
-
stringspec.loki.tls.caBase64-encoded PEM with the CA certificate chain used to verify the destination server certificate.
-
booleanspec.loki.tls.verifyCertificate
Default:
true -
booleanspec.loki.tls.verifyHostname
Default:
true
-
-
-
objectspec.socket
-
stringspec.socket.address
Required value
The address to connect to.
Format depends on mode:
- TCP: “host:port” (e.g. “siem.example.com:514”)
- UDP: “host:port” (e.g. “siem.example.com:514”)
- Unix: “/path/to/socket” (e.g. “/var/run/siem.sock”)
-
objectspec.socket.encoding
Encoding format for events sent to this socket destination.
Default is
JSON. SetcodectoCEFto emit events in Common Event Format (the primary use-case for syslog-based SIEM integrations).-
objectspec.socket.encoding.cef
CEF-specific configuration fields.
Only applicable when
codecis set toCEF. If omitted, defaults are used:deviceVendor=Deckhouse,deviceProduct=security-events-manager,version=1.-
stringspec.socket.encoding.cef.deviceProductDevice product field in the CEF header.
Default:
security-events-manager -
stringspec.socket.encoding.cef.deviceVendorDevice vendor field in the CEF header.
Default:
Deckhouse -
stringspec.socket.encoding.cef.deviceVersionDevice version field in the CEF header.
Default:
1
-
-
stringspec.socket.encoding.codec
Encoding codec for the destination.
Possible values:
JSON: structured JSON (default, suitable for Loki, ES, Kafka, etc.).CEF: Common Event Format (suitable for SIEM integration via Kafka, Vector, File, Console).
Default:
JSONAllowed values:
JSON,CEF -
stringspec.socket.encoding.syslogWrapper
Optional syslog header wrapping for CEF output.
Only applicable when
codecisCEF.Possible values:
None: emit bare CEF string (default).RFC3164: prepend RFC 3164 (BSD syslog) header.RFC5424: prepend RFC 5424 (IETF syslog) header.
Default:
NoneAllowed values:
None,RFC3164,RFC5424
-
-
stringspec.socket.mode
Required value
Socket transport mode.
Possible values:
- TCP: stream-oriented, reliable, supports TLS. Recommended for production syslog.
- UDP: datagram-oriented, fire-and-forget. Max message size limited by MTU.
- Unix: local Unix domain socket (stream mode). For sidecar-based SIEM agents.
Allowed values:
TCP,UDP,Unix -
objectspec.socket.tls
TLS configuration.
Only applicable when mode is TCP. Ignored for UDP and Unix modes.
-
stringspec.socket.tls.caBase64-encoded PEM with the CA certificate chain used to verify the destination server certificate.
-
booleanspec.socket.tls.verifyCertificate
Default:
true -
booleanspec.socket.tls.verifyHostname
Default:
true
-
-
-
objectspec.splunkHEC
-
stringspec.splunkHEC.endpoint
Required value
-
objectspec.splunkHEC.tls
-
stringspec.splunkHEC.tls.caBase64-encoded PEM with the CA certificate chain used to verify the destination server certificate.
-
booleanspec.splunkHEC.tls.verifyCertificate
Default:
true -
booleanspec.splunkHEC.tls.verifyHostname
Default:
true
-
-
stringspec.splunkHEC.token
Splunk HEC token.
Consider using
tokenSecretRefinstead to avoid storing secrets in the CR spec. -
objectspec.splunkHEC.tokenSecretRef
-
stringspec.splunkHEC.tokenSecretRef.name
Required value
Name of the secret in the
d8-security-events-managernamespace containing the credential.The secret must have the key
valuein itsdatafield.
-
-
-
stringspec.type
Required value
Allowed values:
Loki,Elasticsearch,Kafka,SplunkHEC,File,Console,Vector,Socket,Http -
objectspec.vector
-
objectspec.vector.encoding
Encoding format for events sent to this Vector destination.
Default is
JSON. SetcodectoCEFto emit events in Common Event Format.-
objectspec.vector.encoding.cef
CEF-specific configuration fields.
Only applicable when
codecis set toCEF. If omitted, defaults are used:deviceVendor=Deckhouse,deviceProduct=security-events-manager,version=1.-
stringspec.vector.encoding.cef.deviceProductDevice product field in the CEF header.
Default:
security-events-manager -
stringspec.vector.encoding.cef.deviceVendorDevice vendor field in the CEF header.
Default:
Deckhouse -
stringspec.vector.encoding.cef.deviceVersionDevice version field in the CEF header.
Default:
1
-
-
stringspec.vector.encoding.codec
Encoding codec for the destination.
Possible values:
JSON: structured JSON (default, suitable for Loki, ES, Kafka, etc.).CEF: Common Event Format (suitable for SIEM integration via Kafka, Vector, File, Console).
Default:
JSONAllowed values:
JSON,CEF -
stringspec.vector.encoding.syslogWrapper
Optional syslog header wrapping for CEF output.
Only applicable when
codecisCEF.Possible values:
None: emit bare CEF string (default).RFC3164: prepend RFC 3164 (BSD syslog) header.RFC5424: prepend RFC 5424 (IETF syslog) header.
Default:
NoneAllowed values:
None,RFC3164,RFC5424
-
-
stringspec.vector.endpoint
Required value
-
objectspec.vector.tls
-
stringspec.vector.tls.caBase64-encoded PEM with the CA certificate chain used to verify the destination server certificate.
-
booleanspec.vector.tls.verifyCertificate
Default:
true -
booleanspec.vector.tls.verifyHostname
Default:
true
-
-
-
ClusterSecurityEventEnrichmentPlugin
Short names: csep
Scope: Cluster
Version: v1alpha1
-
objectspec
Describes an enrichment plugin — an HTTP endpoint that resolves additional fields for outgoing SecurityEvents at runtime.
-
Internalplugins are served by the built-inenrichment-cachesidecar in the gateway pod. The module ships three Internal plugins:k8s-pod-info,k8s-container-info,k8s-nodeuser-info. Internal CRs are managed by Deckhouse and cannot be created or modified by users. -
Externalplugins are served by user-deployed pods in any namespace. The user provides the endpoint URL, optional TLS/auth, arg schema, and return field schema.
-
array of objectsspec.args
Required value
Declares the input arguments (query parameters) that the plugin accepts. Each arg has a name, a required flag, and a description.
When a
ShipperEnrichRulereferences this plugin, itsargsvalues are resolved from event fields (dot-paths) and sent as query parameters to the plugin endpoint.The controller validates that all
required: trueargs are present in the referencingShipperEnrichRule.-
stringspec.args.descriptionHuman-readable description of the argument.
-
stringspec.args.nameArgument name (used as the query parameter key).
-
booleanspec.args.requiredWhether the argument is required in ShipperEnrichRule.
Default:
true
-
-
stringspec.descriptionHuman-readable description of the plugin.
-
objectspec.endpointHTTP endpoint configuration. Required for
Externalplugins. Ignored forInternalplugins (the sidecar URL is used automatically).-
array of objectsspec.endpoint.headersOptional static HTTP headers sent with each lookup request.
-
stringspec.endpoint.headers.name
-
stringspec.endpoint.headers.value
-
-
objectspec.endpoint.tlsTLS configuration for the HTTPS endpoint (optional).
-
stringspec.endpoint.tls.caSecretName of a Secret in the module namespace (
d8-security-events-manager) containing the CA certificate (keyca.crt). Used to verify the plugin endpoint’s TLS certificate. -
stringspec.endpoint.tls.clientCertSecretName of a Secret in the module namespace containing the client certificate and key for mTLS (keys
tls.crt,tls.key).
-
-
stringspec.endpoint.url
Required value
Full HTTP(S) URL of the enrichment endpoint. The controller generates:GET <url>?<args as query params>. Must start withhttp://orhttps://. Must not reference cloud metadata endpoints (e.g. 169.254.x.x) or link-local addresses to prevent SSRF.
-
-
objectspec.readinessOptional readiness probe. The controller can probe this endpoint before including the plugin in the gateway config. If unreachable, the controller sets a
NotReadystatus condition.-
integerspec.readiness.expectedStatusExpected HTTP status code for a ready plugin.
Default:
200 -
stringspec.readiness.pathHTTP path to probe (appended to endpoint.url).
Default:
/healthz
-
-
objectspec.returns
Required value
Declares the fields that the plugin returns in its JSON response. Used for validation: thevaluein a referencingShipperEnrichRulemust match one of thefields[].namelisted here.-
array of objectsspec.returns.fields
Required value
-
stringspec.returns.fields.descriptionHuman-readable description of the field.
-
stringspec.returns.fields.nameResponse field name.
-
stringspec.returns.fields.typeField type.
Allowed values:
String,Int,Bool
-
-
-
stringspec.type
Required value
Plugin type.
Internal— served by the built-in enrichment-cache sidecar (no endpoint needed).External— served by a user-deployed pod (endpoint.url required).
Allowed values:
Internal,External
-
-
objectstatusCurrent status of this resource.
-
array of objectsstatus.conditionsRepresents the latest available observations of an object’s state.
-
stringstatus.conditions.lastTransitionTime
-
stringstatus.conditions.message
Maximum length:
32768 -
integerstatus.conditions.observedGeneration
-
stringstatus.conditions.reason
Length:
1..1024 -
stringstatus.conditions.status
Allowed values:
True,False,Unknown -
stringstatus.conditions.type
Maximum length:
316
-
-
integerstatus.observedGenerationThe generation observed by the controller.
-
ClusterSecurityEventLoggingTransformationRules
Short names: cseltr
Scope: Cluster
Version: v1alpha1
-
objectspec
Cluster-wide rules to transform raw log lines into structured objects (Vector events) before further processing.
Namespaced SecurityEventLoggingTransformationRules (SELTR) take precedence over these rules when both match the same pod/container.
-
objectspec.file
Selection + shared transform for node file logs. Required when type is File.
File match is performed against the Vector event field
.file.-
array of stringsspec.file.paths
Required value
Exact file paths to match. -
objectspec.file.transform
Required value
Shared transformation applied to every matched file log line.-
booleanspec.file.transform.drop_raw
Default:
false -
array of objectsspec.file.transform.fields
-
stringspec.file.transform.fields.nameField name in the parsed object.
-
stringspec.file.transform.fields.typeTarget field type.
Allowed values:
String,Int,Float,Bool
-
-
objectspec.file.transform.parser
Required value
Parser configuration (defines how to unpack the original log line).
Semantics:
- parsing is best-effort (errors/mismatches do not drop events)
- first successful pattern wins (for Regex/Grok)
- named captures are written into
.parsed_data
-
objectspec.file.transform.parser.grokGrok parser configuration. Named fields are saved into
.parsed_data.-
array of objectsspec.file.transform.parser.grok.customPatternsCustom grok pattern definitions (name -> regex). These are added to the built-in grok patterns.
-
stringspec.file.transform.parser.grok.customPatterns.key
-
stringspec.file.transform.parser.grok.customPatterns.value
-
-
array of stringsspec.file.transform.parser.grok.patterns
Required value
Grok patterns to try in order. The first successfully matched pattern wins.
-
-
objectspec.file.transform.parser.regexRegex parser configuration. Only named capture groups are saved into
.parsed_data.-
array of stringsspec.file.transform.parser.regex.patterns
Required value
Regex patterns to try in order. The first successfully matched pattern wins.
-
-
stringspec.file.transform.parser.type
Required value
Parser type.
- JSON: parse the original log line as JSON (parse_json()).
- Regex: apply regex patterns and extract named capture groups.
- Grok: apply grok patterns and extract named fields.
Allowed values:
JSON,Regex,Grok
-
-
-
objectspec.kubernetesPodsSelection + per-container transforms for Kubernetes pod logs. Required when type is KubernetesPods.
-
array of objectsspec.kubernetesPods.containers
Required value
Per-container transformation rules.-
booleanspec.kubernetesPods.containers.drop_rawIf true, removes the original raw message field after parsing.
Default:
false -
array of objectsspec.kubernetesPods.containers.fieldsOptional field type conversions applied after parsing. Useful to enforce stable types for sinks (Elasticsearch/ClickHouse/etc.).
-
stringspec.kubernetesPods.containers.fields.nameField name in the parsed object.
-
stringspec.kubernetesPods.containers.fields.typeTarget field type.
Allowed values:
String,Int,Float,Bool
-
-
stringspec.kubernetesPods.containers.nameContainer name to apply this transformation to.
-
objectspec.kubernetesPods.containers.parser
Parser configuration (defines how to unpack the original log line).
Semantics:
- parsing is best-effort (errors/mismatches do not drop events)
- first successful pattern wins (for Regex/Grok)
- named captures are written into
.parsed_data
-
objectspec.kubernetesPods.containers.parser.grokGrok parser configuration. Named fields are saved into
.parsed_data.-
array of objectsspec.kubernetesPods.containers.parser.grok.customPatternsCustom grok pattern definitions (name -> regex). These are added to the built-in grok patterns.
-
stringspec.kubernetesPods.containers.parser.grok.customPatterns.key
-
stringspec.kubernetesPods.containers.parser.grok.customPatterns.value
-
-
array of stringsspec.kubernetesPods.containers.parser.grok.patterns
Required value
Grok patterns to try in order. The first successfully matched pattern wins.
-
-
objectspec.kubernetesPods.containers.parser.regexRegex parser configuration. Only named capture groups are saved into
.parsed_data.-
array of stringsspec.kubernetesPods.containers.parser.regex.patterns
Required value
Regex patterns to try in order. The first successfully matched pattern wins.
-
-
stringspec.kubernetesPods.containers.parser.type
Required value
Parser type.
- JSON: parse the original log line as JSON (parse_json()).
- Regex: apply regex patterns and extract named capture groups.
- Grok: apply grok patterns and extract named fields.
Allowed values:
JSON,Regex,Grok
-
-
objectspec.kubernetesPods.labelSelector
Required value
Pod label selector.-
array of objectsspec.kubernetesPods.labelSelector.matchExpressionsList of label selector requirements.
-
stringspec.kubernetesPods.labelSelector.matchExpressions.key
-
stringspec.kubernetesPods.labelSelector.matchExpressions.operator
Allowed values:
In,NotIn,Exists,DoesNotExist -
array of stringsspec.kubernetesPods.labelSelector.matchExpressions.values
-
-
objectspec.kubernetesPods.labelSelector.matchLabelsMap of label key to value.
-
-
objectspec.kubernetesPods.namespaceSelectorNamespace selection (subset of ClusterLoggingConfig). Only matchNames/excludeNames are supported.
-
array of stringsspec.kubernetesPods.namespaceSelector.excludeNames
-
array of stringsspec.kubernetesPods.namespaceSelector.matchNames
-
-
-
stringspec.type
Required value
Input type the rules apply to. KubernetesPods — match pod/container logs. File — match node file logs.Allowed values:
KubernetesPods,File
-
-
objectstatusCurrent status of this resource.
-
array of objectsstatus.conditionsRepresents the latest available observations of an object’s state.
-
stringstatus.conditions.lastTransitionTime
-
stringstatus.conditions.message
Maximum length:
32768 -
integerstatus.conditions.observedGeneration
-
stringstatus.conditions.reason
Length:
1..1024 -
stringstatus.conditions.status
Allowed values:
True,False,Unknown -
stringstatus.conditions.type
Maximum length:
316
-
-
integerstatus.observedGenerationThe generation observed by the controller.
-
ClusterSecurityEventShipper
Short names: cses
Scope: Cluster
Version: v1alpha1
-
array of objectsspecCluster-wide pipelines for extracting security events from node files or pod logs. Each pipeline item describes the source and one or more event definitions (produces).
-
objectspec.input
-
array of stringsspec.input.filesNode file paths (required for type File).
-
objectspec.input.kubernetesPodsPod selection for cluster-wide collection.
-
objectspec.input.kubernetesPods.labelSelector
Required value
Kubernetes-style label selector.-
array of objectsspec.input.kubernetesPods.labelSelector.matchExpressionsList of label selector requirements.
-
stringspec.input.kubernetesPods.labelSelector.matchExpressions.key
-
stringspec.input.kubernetesPods.labelSelector.matchExpressions.operator
Allowed values:
In,NotIn,Exists,DoesNotExist -
array of stringsspec.input.kubernetesPods.labelSelector.matchExpressions.values
-
-
objectspec.input.kubernetesPods.labelSelector.matchLabelsMap of label key to value.
-
-
stringspec.input.kubernetesPods.namespaceNamespace to collect pod logs from (legacy exact namespace match).
-
objectspec.input.kubernetesPods.namespaceSelector
Namespace selector for cluster pod log collection.
- If
matchNamesis set, only these namespaces are included. - If
excludeNamesis set, these namespaces are excluded. - If both are empty, all namespaces are matched.
-
array of stringsspec.input.kubernetesPods.namespaceSelector.excludeNamesExplicitly excluded namespace names.
-
array of stringsspec.input.kubernetesPods.namespaceSelector.matchNamesExplicitly included namespace names.
- If
-
-
stringspec.input.type
Required value
File — read from node files. KubernetesPods — read from pod logs (cluster-wide; labelSelector required; namespace or namespaceSelector optional).Allowed values:
File,KubernetesPods
-
-
array of objectsspec.parser
Parser rules for best-effort parsing of raw log line
.messageinto.parsed_data.- For
input.type: KubernetesPods: this repeatsSecurityEventLoggingTransformationRules.spec.containers[]. Match is performed by.namespace+.container+.pod_labels. - For
input.type: File: setname: fileand the rule will be applied when.filematches one ofinput.files.
Container selection happens on the log-shipper side via
labelFilter.-
booleanspec.parser.drop_rawIf true, removes the original raw message field after parsing.
Default:
false -
array of objectsspec.parser.fieldsOptional field type conversions applied after parsing.
-
stringspec.parser.fields.nameField name in the parsed object.
-
stringspec.parser.fields.typeTarget field type.
Allowed values:
String,Int,Float,Bool
-
-
stringspec.parser.nameContainer name (or
filefor file input). -
objectspec.parser.parserParser configuration.
-
objectspec.parser.parser.grok
-
array of objectsspec.parser.parser.grok.customPatterns
-
stringspec.parser.parser.grok.customPatterns.key
-
stringspec.parser.parser.grok.customPatterns.value
-
-
array of stringsspec.parser.parser.grok.patterns
Required value
-
-
objectspec.parser.parser.regex
-
array of stringsspec.parser.parser.regex.patterns
Required value
-
-
stringspec.parser.parser.type
Required value
Parser type.Allowed values:
JSON,Regex,Grok
-
- For
-
stringspec.parserRef
Name of
ClusterSecurityEventLoggingTransformationRules(CSELTR) object to use as parser rule source.Used only when
parseris not set. -
array of objectsspec.producesList of produced security events for this source.
-
array of objectsspec.produces.enrich
Enrichment rules for adding extra fields into outgoing SecurityEvent.
Each rule writes into a destination field path (
target). Sources:Static: write a literal string fromvalue.Plugin: resolve a field at runtime via HTTP lookup to theenrichment-cachesidecar (in-memory Pod/NodeUser cache, no API server call per event). Plugins:k8s-pod-info,k8s-container-info: resolve Pod fields. Supports two lookup modes:- Pod-name mode: args
pod_name+namespace. - Container-ID mode: arg
container_id(resolves namespace, name, or serviceAccountName from the container runtime ID).
- Pod-name mode: args
k8s-nodeuser-info: resolve a static-user username (nodeusers.deckhouse.io) by uid. Arguid(resolves the NodeUser metadata.name matching spec.uid).
Enrich rules are applied after
transform, so they overridetransformwhen targeting the same field.-
array of objectsspec.produces.enrich.args
Plugin arguments as key/value pairs. The
keymust match an arg name declared by the referencedClusterSecurityEventEnrichmentPluginCR (spec.args[].name). Thevalueis a dot-path in the event resolved with the same logic astransformrules: a@root.prefix reads from the event root, otherwise the value is read from.parsed_data.At runtime, each arg becomes a query parameter sent to the plugin endpoint:
GET <endpoint>?<arg1>=<val1>&<arg2>=<val2>.For built-in plugins:
k8s-pod-info:pod_name+namespace(both required).k8s-container-info:container_id(required; runtime prefixes likecontainerd://are stripped automatically).k8s-nodeuser-info:uid(required; system UID from the event).
-
stringspec.produces.enrich.args.key
-
stringspec.produces.enrich.args.value
-
stringspec.produces.enrich.plugin
Plugin name (required for
source=Plugin). References an existingClusterSecurityEventEnrichmentPluginCR by itsmetadata.name.Built-in Internal plugins shipped with the module:
k8s-pod-info— resolve Pod fields by pod name + namespace.k8s-container-info— resolve Pod fields by container runtime ID.k8s-nodeuser-info— resolve static-user username (nodeusers.deckhouse.io) by uid.
Users can create
ExternalClusterSecurityEventEnrichmentPluginCRs to register custom enrichment endpoints. -
stringspec.produces.enrich.sourceEnrichment source type.
Allowed values:
Static,Plugin -
stringspec.produces.enrich.targetDestination field path in outgoing SecurityEvent (dot-separated).
-
stringspec.produces.enrich.value
For
Staticsource: literal string to be written totarget.For
Pluginsource: the response field to extract from the plugin’s JSON response. Must match one of thereturns.fields[].namedeclared by the referencedClusterSecurityEventEnrichmentPluginCR. For example:serviceAccountName,name,namespace(k8s-pod-info / k8s-container-info),username(k8s-nodeuser-info).
-
stringspec.produces.eventCodeEvent code (references SecurityEventDefinition.spec.code).
-
objectspec.produces.extract
Detection rule for this produced event.
This structure maps 1:1 into log-shipper ClusterLoggingConfig.spec.labelFilter item.
Notes:
valuesis required forIn,NotIn,Regex,NotRegex.valuesmust be omitted/empty forExists,DoesNotExist.
Allowed
fieldvalues aremessageplus log-shipper metadata labels. Kubernetes:pod,namespace,pod_labels,pod_ip,image,container,node,pod_owner,node_group. File:host,host_ip,file.-
stringspec.produces.extract.field
Required value
Field name for filtering (same as ClusterLoggingConfiglabelFilter.field). Typical values:message,file,namespace. -
stringspec.produces.extract.operator
Required value
Operator for field comparison (same as ClusterLoggingConfiglabelFilter.operator).Allowed values:
In,NotIn,Regex,NotRegex,Exists,DoesNotExist -
array of stringsspec.produces.extract.valuesArray of values or regexes for corresponding operations (same as ClusterLoggingConfig
labelFilter.values).
-
array of objectsspec.produces.transform
Field mapping for transforming parsed raw logs into outgoing SecurityEvent.
Keys are destination field paths in the outgoing event (dot-separated). Values are source field paths inside the parsed raw object (dot-separated, relative to
.parsed_data). To read from root-level fields, use the@root.prefix (for example:metadata.extra.host_ip: @root.host_ip).Example:
pod.name: pod_namewill copy.parsed_data.pod_nameinto.pod.name.-
stringspec.produces.transform.key
-
stringspec.produces.transform.value
-
-
-
objectspec.producesDefaults
Default mappings applied to all items in
produces[]of this pipeline item.Precedence:
transform: keys are merged; defaults first, thenproduces[].transformoverwrites.enrich: used only whenproduces[].enrichis omitted.
-
array of objectsspec.producesDefaults.enrichDefault enrich rules (see
produces[].enrich).-
array of objectsspec.producesDefaults.enrich.args
Plugin arguments as key/value pairs. The
keymust match an arg name declared by the referencedClusterSecurityEventEnrichmentPluginCR (spec.args[].name). Thevalueis a dot-path in the event resolved with the same logic astransformrules: a@root.prefix reads from the event root, otherwise the value is read from.parsed_data.At runtime, each arg becomes a query parameter sent to the plugin endpoint:
GET <endpoint>?<arg1>=<val1>&<arg2>=<val2>.For built-in plugins:
k8s-pod-info:pod_name+namespace(both required).k8s-container-info:container_id(required; runtime prefixes likecontainerd://are stripped automatically).k8s-nodeuser-info:uid(required; system UID from the event).
-
stringspec.producesDefaults.enrich.args.key
-
stringspec.producesDefaults.enrich.args.value
-
stringspec.producesDefaults.enrich.plugin
Plugin name (required for
source=Plugin). References an existingClusterSecurityEventEnrichmentPluginCR by itsmetadata.name.Built-in Internal plugins shipped with the module:
k8s-pod-info— resolve Pod fields by pod name + namespace.k8s-container-info— resolve Pod fields by container runtime ID.k8s-nodeuser-info— resolve static-user username (nodeusers.deckhouse.io) by uid.
Users can create
ExternalClusterSecurityEventEnrichmentPluginCRs to register custom enrichment endpoints. -
stringspec.producesDefaults.enrich.sourceEnrichment source type.
Allowed values:
Static,Plugin -
stringspec.producesDefaults.enrich.targetDestination field path in outgoing SecurityEvent (dot-separated).
-
stringspec.producesDefaults.enrich.value
For
Staticsource: literal string to be written totarget.For
Pluginsource: the response field to extract from the plugin’s JSON response. Must match one of thereturns.fields[].namedeclared by the referencedClusterSecurityEventEnrichmentPluginCR. For example:serviceAccountName,name,namespace(k8s-pod-info / k8s-container-info),username(k8s-nodeuser-info).
-
-
array of objectsspec.producesDefaults.transformDefault field mapping (see
produces[].transform).-
stringspec.producesDefaults.transform.key
-
stringspec.producesDefaults.transform.value
-
-
stringspec.sourceSource identifier (used for enable/disable via ClusterSecurityEventConfig).
-
-
objectstatusCurrent status of this resource.
-
array of objectsstatus.conditionsRepresents the latest available observations of an object’s state.
-
stringstatus.conditions.lastTransitionTime
-
stringstatus.conditions.message
Maximum length:
32768 -
integerstatus.conditions.observedGeneration
-
stringstatus.conditions.reason
Length:
1..1024 -
stringstatus.conditions.status
Allowed values:
True,False,Unknown -
stringstatus.conditions.type
Maximum length:
316
-
-
integerstatus.observedGenerationThe generation observed by the controller.
-
PodSecurityEventShipper
Short names: pses
Scope: Namespaced
Version: v1alpha1
-
array of objectsspecNamespaced pipelines for extracting security events from pod logs of this namespace. Namespace is implied and equals the PodSecurityEventShipper namespace.
-
objectspec.input
-
objectspec.input.kubernetesPods
Required value
-
objectspec.input.kubernetesPods.labelSelector
Required value
Kubernetes-style label selector.-
array of objectsspec.input.kubernetesPods.labelSelector.matchExpressionsList of label selector requirements.
-
stringspec.input.kubernetesPods.labelSelector.matchExpressions.key
-
stringspec.input.kubernetesPods.labelSelector.matchExpressions.operator
Allowed values:
In,NotIn,Exists,DoesNotExist -
array of stringsspec.input.kubernetesPods.labelSelector.matchExpressions.values
-
-
objectspec.input.kubernetesPods.labelSelector.matchLabelsMap of label key to value.
-
-
-
stringspec.input.type
Required value
Allowed values:
KubernetesPods
-
-
array of objectsspec.parserParser rules (same shape as
SecurityEventLoggingTransformationRules.spec.containers[]). Used by the gateway for best-effort parsing of raw logs.messageinto.parsed_databefore applying transform mappings. Note: container is selected by log-shipper vialabelFilter;nameis the container name these rules apply to.-
booleanspec.parser.drop_rawIf true, removes the original raw message field after parsing.
Default:
false -
array of objectsspec.parser.fieldsOptional field type conversions applied after parsing.
-
stringspec.parser.fields.nameField name in the parsed object.
-
stringspec.parser.fields.typeTarget field type.
Allowed values:
String,Int,Float,Bool
-
-
stringspec.parser.nameContainer name.
-
objectspec.parser.parserParser configuration.
-
objectspec.parser.parser.grokGrok parser configuration.
-
array of objectsspec.parser.parser.grok.customPatternsCustom grok pattern definitions (name -> regex).
-
stringspec.parser.parser.grok.customPatterns.key
-
stringspec.parser.parser.grok.customPatterns.value
-
-
array of stringsspec.parser.parser.grok.patterns
Required value
Grok patterns to try in order.
-
-
objectspec.parser.parser.regexRegex parser configuration.
-
array of stringsspec.parser.parser.regex.patterns
Required value
Regex patterns to try in order.
-
-
stringspec.parser.parser.type
Required value
Parser type.
- JSON: parse the original log line as JSON.
- Regex: apply regex patterns and extract named capture groups.
- Grok: apply grok patterns and extract named fields.
Allowed values:
JSON,Regex,Grok
-
-
-
stringspec.parserRefName of
SecurityEventLoggingTransformationRules(SELTR) resource in the same namespace to use as parser rules. Used only whenparseris not set. -
array of objectsspec.producesList of produced security events for this source.
-
array of objectsspec.produces.enrich
Enrichment rules for adding extra fields into outgoing SecurityEvent.
Each rule writes into a destination field path (
target). Sources:Static: write a literal string fromvalue.Plugin: resolve a field at runtime via HTTP lookup to theenrichment-cachesidecar (in-memory Pod/NodeUser cache, no API server call per event). Plugins:k8s-pod-info,k8s-container-info: resolve Pod fields. Supports two lookup modes:- Pod-name mode: args
pod_name+namespace. - Container-ID mode: arg
container_id(resolves namespace, name, or serviceAccountName from the container runtime ID).
- Pod-name mode: args
k8s-nodeuser-info: resolve a static-user username (nodeusers.deckhouse.io) by uid. Arguid(resolves the NodeUser metadata.name matching spec.uid).
Enrich rules are applied after
transform, so they overridetransformwhen targeting the same field.-
array of objectsspec.produces.enrich.args
Plugin arguments as key/value pairs. The
keymust match an arg name declared by the referencedClusterSecurityEventEnrichmentPluginCR (spec.args[].name). Thevalueis a dot-path in the event resolved with the same logic astransformrules: a@root.prefix reads from the event root, otherwise the value is read from.parsed_data.At runtime, each arg becomes a query parameter sent to the plugin endpoint:
GET <endpoint>?<arg1>=<val1>&<arg2>=<val2>.For built-in plugins:
k8s-pod-info:pod_name+namespace(both required).k8s-container-info:container_id(required; runtime prefixes likecontainerd://are stripped automatically).k8s-nodeuser-info:uid(required; system UID from the event).
-
stringspec.produces.enrich.args.key
-
stringspec.produces.enrich.args.value
-
stringspec.produces.enrich.plugin
Plugin name (required for
source=Plugin). References an existingClusterSecurityEventEnrichmentPluginCR by itsmetadata.name.Built-in Internal plugins shipped with the module:
k8s-pod-info— resolve Pod fields by pod name + namespace.k8s-container-info— resolve Pod fields by container runtime ID.k8s-nodeuser-info— resolve static-user username (nodeusers.deckhouse.io) by uid.
Users can create
ExternalClusterSecurityEventEnrichmentPluginCRs to register custom enrichment endpoints. -
stringspec.produces.enrich.sourceEnrichment source type.
Allowed values:
Static,Plugin -
stringspec.produces.enrich.targetDestination field path in outgoing SecurityEvent (dot-separated).
-
stringspec.produces.enrich.value
For
Staticsource: literal string to be written totarget.For
Pluginsource: the response field to extract from the plugin’s JSON response. Must match one of thereturns.fields[].namedeclared by the referencedClusterSecurityEventEnrichmentPluginCR. For example:serviceAccountName,name,namespace(k8s-pod-info / k8s-container-info),username(k8s-nodeuser-info).
-
stringspec.produces.eventCodeEvent code (references SecurityEventDefinition.spec.code).
-
objectspec.produces.extract
Detection rule for this produced event.
This structure maps 1:1 into log-shipper PodLoggingConfig.spec.labelFilter item.
Notes:
valuesis required forIn,NotIn,Regex,NotRegex.valuesmust be omitted/empty forExists,DoesNotExist.
Allowed
fieldvalues aremessageplus log-shipper metadata labels. Kubernetes:pod,namespace,pod_labels,pod_ip,image,container,node,pod_owner,node_group. File:host,host_ip,file.-
stringspec.produces.extract.field
Required value
Field name for filtering (same as PodLoggingConfiglabelFilter.field). Typical values:message,container,namespace. -
stringspec.produces.extract.operator
Required value
Operator for field comparison (same as PodLoggingConfiglabelFilter.operator).Allowed values:
In,NotIn,Regex,NotRegex,Exists,DoesNotExist -
array of stringsspec.produces.extract.valuesArray of values or regexes for corresponding operations (same as PodLoggingConfig
labelFilter.values).
-
array of objectsspec.produces.transform
Field mapping for transforming parsed raw logs into outgoing SecurityEvent.
Keys are destination field paths in the outgoing event (dot-separated). Values are source field paths inside the parsed raw object (dot-separated, relative to
.parsed_data). To read from root-level fields, use the@root.prefix (for example:metadata.extra.host_ip: @root.host_ip).Example:
pod.name: pod_namewill copy.parsed_data.pod_nameinto.pod.name.-
stringspec.produces.transform.key
-
stringspec.produces.transform.value
-
-
-
objectspec.producesDefaults
Default mappings applied to all items in
produces[]of this pipeline item.Precedence:
transform: keys are merged; defaults first, thenproduces[].transformoverwrites.enrich: used only whenproduces[].enrichis omitted.
-
array of objectsspec.producesDefaults.enrichDefault enrich rules (see
produces[].enrich).-
array of objectsspec.producesDefaults.enrich.args
Plugin arguments as key/value pairs. The
keymust match an arg name declared by the referencedClusterSecurityEventEnrichmentPluginCR (spec.args[].name). Thevalueis a dot-path in the event resolved with the same logic astransformrules: a@root.prefix reads from the event root, otherwise the value is read from.parsed_data.At runtime, each arg becomes a query parameter sent to the plugin endpoint:
GET <endpoint>?<arg1>=<val1>&<arg2>=<val2>.For built-in plugins:
k8s-pod-info:pod_name+namespace(both required).k8s-container-info:container_id(required; runtime prefixes likecontainerd://are stripped automatically).k8s-nodeuser-info:uid(required; system UID from the event).
-
stringspec.producesDefaults.enrich.args.key
-
stringspec.producesDefaults.enrich.args.value
-
stringspec.producesDefaults.enrich.plugin
Plugin name (required for
source=Plugin). References an existingClusterSecurityEventEnrichmentPluginCR by itsmetadata.name.Built-in Internal plugins shipped with the module:
k8s-pod-info— resolve Pod fields by pod name + namespace.k8s-container-info— resolve Pod fields by container runtime ID.k8s-nodeuser-info— resolve static-user username (nodeusers.deckhouse.io) by uid.
Users can create
ExternalClusterSecurityEventEnrichmentPluginCRs to register custom enrichment endpoints. -
stringspec.producesDefaults.enrich.sourceEnrichment source type.
Allowed values:
Static,Plugin -
stringspec.producesDefaults.enrich.targetDestination field path in outgoing SecurityEvent (dot-separated).
-
stringspec.producesDefaults.enrich.value
For
Staticsource: literal string to be written totarget.For
Pluginsource: the response field to extract from the plugin’s JSON response. Must match one of thereturns.fields[].namedeclared by the referencedClusterSecurityEventEnrichmentPluginCR. For example:serviceAccountName,name,namespace(k8s-pod-info / k8s-container-info),username(k8s-nodeuser-info).
-
-
array of objectsspec.producesDefaults.transformDefault field mapping (see
produces[].transform).-
stringspec.producesDefaults.transform.key
-
stringspec.producesDefaults.transform.value
-
-
stringspec.sourceSource identifier (used for enable/disable via ClusterSecurityEventConfig).
-
-
objectstatusCurrent status of this resource.
-
array of objectsstatus.conditionsRepresents the latest available observations of an object’s state.
-
stringstatus.conditions.lastTransitionTime
-
stringstatus.conditions.message
Maximum length:
32768 -
integerstatus.conditions.observedGeneration
-
stringstatus.conditions.reason
Length:
1..1024 -
stringstatus.conditions.status
Allowed values:
True,False,Unknown -
stringstatus.conditions.type
Maximum length:
316
-
-
integerstatus.observedGenerationThe generation observed by the controller.
-
SecurityEvent
Scope: Cluster
Version: v1
-
objectactorActor (subject) that performed the action.
-
stringactor.idActor identifier.
-
stringactor.typeActor type.
Allowed values:
User,ServiceAccount,System
-
-
objecteventEvent classification and details.
-
stringevent.category
Required value
Event category.Allowed values:
Auth,Rbac,Runtime,Network,Config -
stringevent.code
Required value
Event code. -
stringevent.descriptionHuman-readable event description.
-
stringevent.outcome
Required value
Event outcome.Allowed values:
Success,Failure,Denied -
stringevent.severity
Required value
Event severity.Allowed values:
Low,Medium,High,Critical
-
-
objecteventMetadataAdditional metadata.
-
stringeventMetadata.cluster
Required value
Cluster identifier. -
array of objectseventMetadata.extraExtra key-value metadata.
-
stringeventMetadata.extra.key
-
stringeventMetadata.extra.value
-
-
stringeventMetadata.nodeNode name.
-
-
stringidUnique event identifier.
-
objectobjectObject the event is related to.
-
stringobject.nameObject name.
-
stringobject.namespaceObject namespace.
-
stringobject.typeObject type.
-
-
objectsourceSource identification for the event.
-
stringsource.component
Required value
Component name (e.g. kube-apiserver). -
stringsource.instanceOptional instance identifier.
-
-
stringtimestampEvent timestamp.
SecurityEventDefinition
Short names: sed
Scope: Cluster
Version: v1alpha1
-
objectspecDescribes a possible security event.
-
stringspec.category
Required value
Event category.Allowed values:
Auth,Rbac,Runtime,Network,Config -
stringspec.code
Required value
Event code. -
stringspec.description
Required value
Human-readable description. -
stringspec.descriptionRuHuman-readable description in Russian.
-
array of objectsspec.fieldsList of fields that the event may contain.
-
stringspec.fields.nameField name.
-
booleanspec.fields.requiredWhether the field is required.
Default:
true
-
-
objectspec.metadataMetadata related to the rule
-
stringspec.severity
Required value
Event severity.Allowed values:
Low,Medium,High,Critical -
stringspec.source
Required value
Source identifier.
-
-
objectstatusCurrent status of this resource.
-
array of objectsstatus.conditionsRepresents the latest available observations of an object’s state.
-
stringstatus.conditions.lastTransitionTime
-
stringstatus.conditions.message
Maximum length:
32768 -
integerstatus.conditions.observedGeneration
-
stringstatus.conditions.reason
Length:
1..1024 -
stringstatus.conditions.status
Allowed values:
True,False,Unknown -
stringstatus.conditions.type
Maximum length:
316
-
-
integerstatus.observedGenerationThe generation observed by the controller.
-
SecurityEventLoggingTransformationRules
Short names: seltr
Scope: Namespaced
Version: v1alpha1
-
objectspecNamespaced rules to transform raw log lines into structured objects (Vector events) before further processing.
-
array of objectsspec.containers
Required value
Per-container transformation rules.-
booleanspec.containers.drop_rawIf true, removes the original raw message field after parsing.
Default:
false -
array of objectsspec.containers.fieldsOptional field type conversions applied after parsing. Useful to enforce stable types for sinks (Elasticsearch/ClickHouse/etc.).
-
stringspec.containers.fields.nameField name in the parsed object.
-
stringspec.containers.fields.typeTarget field type.
Allowed values:
String,Int,Float,Bool
-
-
stringspec.containers.nameContainer name to apply this transformation to.
-
objectspec.containers.parser
Parser configuration (defines how to unpack the original log line).
Semantics:
- parsing is best-effort (errors/mismatches do not drop events)
- first successful pattern wins (for Regex/Grok)
- named captures are written into
.parsed_data
-
objectspec.containers.parser.grokGrok parser configuration. Named fields are saved into
.parsed_data.-
array of objectsspec.containers.parser.grok.customPatternsCustom grok pattern definitions (name -> regex). These are added to the built-in grok patterns.
-
stringspec.containers.parser.grok.customPatterns.key
-
stringspec.containers.parser.grok.customPatterns.value
-
-
array of stringsspec.containers.parser.grok.patterns
Required value
Grok patterns to try in order. The first successfully matched pattern wins.
-
-
objectspec.containers.parser.regexRegex parser configuration. Only named capture groups are saved into
.parsed_data.-
array of stringsspec.containers.parser.regex.patterns
Required value
Regex patterns to try in order. The first successfully matched pattern wins.
-
-
stringspec.containers.parser.type
Required value
Parser type.
- JSON: parse the original log line as JSON (parse_json()).
- Regex: apply regex patterns and extract named capture groups.
- Grok: apply grok patterns and extract named fields.
Allowed values:
JSON,Regex,Grok
-
-
objectspec.selector
Required value
Pod label selector.-
array of objectsspec.selector.matchExpressionsList of label selector requirements.
-
stringspec.selector.matchExpressions.key
-
stringspec.selector.matchExpressions.operator
Allowed values:
In,NotIn,Exists,DoesNotExist -
array of stringsspec.selector.matchExpressions.values
-
-
objectspec.selector.matchLabelsMap of label key to value.
-
-
-
objectstatusCurrent status of this resource.
-
array of objectsstatus.conditionsRepresents the latest available observations of an object’s state.
-
stringstatus.conditions.lastTransitionTime
-
stringstatus.conditions.message
Maximum length:
32768 -
integerstatus.conditions.observedGeneration
-
stringstatus.conditions.reason
Length:
1..1024 -
stringstatus.conditions.status
Allowed values:
True,False,Unknown -
stringstatus.conditions.type
Maximum length:
316
-
-
integerstatus.observedGenerationThe generation observed by the controller.
-