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 a pattern in security events into a Prometheus alert.
A rule looks for a pattern in the collected security events, for example “one actor read more than 20 secrets in 5 minutes”, and raises a named alert once the pattern occurs. The pattern is expressed as a LogQL query and evaluated against the cluster Loki, so the
cluster-lokidestination must be enabled for any rule to work.Rules are organized into groups. A group has no effect on evaluation: each rule is evaluated on its own, independently of the other rules in its group.
A firing rule raises the
D8SecurityEventAlertFiringalert, which reaches the operator the same way as any other cluster alert: as a ClusterAlert object, in the console, and through the cluster alert delivery. Delivery requires no configuration.The structure mirrors PrometheusRule: named groups, each with an
intervaland a list of rules carryingalert,expr,for,labelsandannotations. The difference is thatexpris written in LogQL rather than in PromQL.-
array of objectsspec.groups
Required value
List of rule groups.
A group consists of a name and a list of rules. It does not affect how or when its rules are evaluated and only keeps related rules together. The same structure as
spec.groupsof PrometheusRule.-
stringspec.groups.interval
How often every rule in this group is evaluated against Loki.
Digits followed by
s,morh, for example30s. The default is30s.Default:
30sPattern:
^[0-9]+(s|m|h)$ -
stringspec.groups.name
Group name.
Does not affect evaluation and is used only in the output of
d8 k get -o yamland in logs, to identify the group.Length:
1..253 -
array of objectsspec.groups.rulesAlert rules in this group.
-
objectspec.groups.rules.aggregation
Counting parameters of the rule.
Events are grouped by
groupBy, and the alert fires as soon as a group reachesthresholdwithinwindow. The window slides continuously: it is recomputed against the logs stored in Loki on every evaluation rather than kept as counter state.Requires
match, because a rule based onexprexpresses grouping and the threshold in the query itself. Withoutaggregation, a rule based onmatchfires on every matched event.-
array of stringsspec.groups.rules.aggregation.groupBy
Required value
Event fields that identify a group.
Values of these fields become alert labels, so the set of allowed fields is limited to attributes with low cardinality. Using an object name as a key, for example, would create a separate group per event, cause unbounded growth of the evaluator and overload the alert receiver.
-
stringspec.groups.rules.aggregation.groupBy.Element of the array
Event field to group by.
Each value is named after the field it reads in LogQL:
EventCodereadsevent_code;EventSeverityreadsevent_severity;EventCategoryreadsevent_category;SourceComponentreadssource_component;ActorIDreadsactor_id;ActorSourceIPreadsactor_sourceIP;ObjectNamespacereadsobject_namespace;ObjectTypereadsobject_type.
Allowed values:
EventCode,EventSeverity,EventCategory,SourceComponent,ActorID,ActorSourceIP,ObjectNamespace,ObjectType
-
-
integerspec.groups.rules.aggregation.threshold
Required value
Number of events in a group that triggers the alert.
To raise an alert on every event, use a rule without the
aggregationblock.Allowed values:
2 <= X -
stringspec.groups.rules.aggregation.window
Required value
Time span over which a group keeps counting before it is forgotten.
Digits followed by
s,morh, for example5m. Choose the span within which the described behaviour occurs: minutes for a brute-force attempt, hours for a slow sweep.Pattern:
^[0-9]+(s|m|h)$
-
-
stringspec.groups.rules.alert
Short name of what the rule detects, for example
MassSecretAccess.The name identifies the rule in the
alertlabel of the produced metric, in logs and in the status of the rule itself. The equivalent of thealertfield of PrometheusRule.Maximum length:
253Pattern:
^[A-Za-z][A-Za-z0-9_]*$ -
objectspec.groups.rules.annotations
Text shown alongside the alert once it fires.
Unlike labels, annotations do not identify the alert and are intended to be read by a human. The field is required: every rule must state in
summarywhat it detected, and that text is what the fired alert carries.A value may quote the data that made the rule fire, the same way Prometheus templates the annotations of PrometheusRule. Use
{{ $labels.<NAME> }}for one of the labels thatexprgrouped by and{{ $value }}for the number thatexprproduced, for example{{ $labels.actor_id }} read secrets {{ $value }} times.The rendered text is passed as a label of the firing metric, so each distinct rendering becomes a separate Prometheus series for the whole retention period. In a rule whose count changes on every evaluation,
{{ $value }}therefore adds a series per interval. Prefer{{ $labels.<NAME> }}, which stays stable for as long as the group exists.-
stringspec.groups.rules.annotations.description
Detailed description, shown in the
descriptionannotation of the alert.State what to check and where, the way a runbook does.
Maximum length:
4096 -
stringspec.groups.rules.annotations.summary
Required value
Short one-line summary, shown in thesummaryannotation of the alert, for exampleOne actor read an unusual number of secrets.Maximum length:
512
-
-
stringspec.groups.rules.expr
LogQL query that determines whether the rule fires.
Each rule sets exactly one of
exprandmatch. Useexprwhen the structured fields ofmatchcannot express the required condition.The query must be a metric query, that is, one that returns a number rather than a list of log lines, and must include the comparison itself. For example:
sum by (actor_id) ( count_over_time({source_component="kube-audit", event_code="K8S_SECRET_ACCESSED", actor_id!=""} [5m]) ) > 20The query above consists of the following parts:
{source_component="kube-audit", ...}selects the log streams to search;count_over_time(...[5m])counts the matching lines over the last 5 minutes;sum by (actor_id)keeps a separate count per actor instead of summing the events of all actors;> 20is the condition itself: the rule fires once the count for any actor exceeds 20.
No further processing of the number is required: reaching the threshold set in the query is what firing means.
Every field listed in
sum by (...)or a similar aggregation becomes a label of the resulting alert. Keep that list short and limited to fields with a bounded set of values, as described in the section on the specifics of writing rules on the examples page.The equivalent of the
exprfield of PrometheusRule, written in LogQL rather than in PromQL.Length:
1..8192 -
stringspec.groups.rules.for
Time span over which
exprmust keep matching without a break before the rule fires.The field filters out one-off spikes: with
for: 5m, a spike that lasts a couple of minutes and then stops does not fire the rule at all.Digits followed by
s,morh, for example5m. The default is0s, meaning that the rule fires on the first match ofexpr, with no waiting period.The pending and firing semantics are the same as for the
forfield of PrometheusRule.Default:
0sPattern:
^[0-9]+(s|m|h)$ -
objectspec.groups.rules.labels
Additional alert labels.
They are added next to
rule,alert,severity_leveland the fields thatexprgroups by. Labels identify the alert: two alerts with the same labels are the same alert. -
objectspec.groups.rules.match
Security events the rule applies to.
Criteria are combined with AND.
Each rule sets exactly one of
exprandmatch. Thematchandaggregationfields are compiled into the same kind of LogQL query thatexprwould hold, so they are a form for building that query rather than a separate evaluation path. Useexprdirectly when a rule requires a field that this form does not cover or a line filter more specific than an exact or glob match.-
stringspec.groups.rules.match.actorType
Kind of subject the rule is narrowed to.
ServiceAccountskeeps only the actors matchingsystem:serviceaccount:*.NonServiceAccountskeeps all the others and is used for rules about people and other external clients. Mirrors the “Subject type” filter of the console.Default:
AnyAllowed values:
Any,ServiceAccounts,NonServiceAccounts -
array of stringsspec.groups.rules.match.actors
Actors whose events are counted.
Values are matched against
actor_idthe same way as inexcludeActors:*stands for any sequence of characters, everything else is literal.Use this field to watch a specific subject, for example a ServiceAccount that must not change secrets.
-
array of stringsspec.groups.rules.match.categoriesEvent categories to match, as declared in
spec.categoryof SecurityEventDefinition.-
stringspec.groups.rules.match.categories.Element of the array
Allowed values:
Auth,Config,Network,Rbac,Runtime
-
-
array of stringsspec.groups.rules.match.eventCodesEvent codes to match, as declared in SecurityEventDefinition.
-
stringspec.groups.rules.match.eventCodes.Element of the arrayFor example
K8S_SECRET_ACCESSED.Pattern:
^[A-Z][A-Z0-9_]*$
-
-
array of stringsspec.groups.rules.match.excludeActors
Actors whose events the rule ignores.
Values are matched against
actor_id:*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 has to exclude them. A typical list:
excludeActors: - "system:serviceaccount:d8-*" - "system:serviceaccount:kube-system:*" - "system:node:*" - "system:apiserver" -
booleanspec.groups.rules.match.excludeSystemActors
Whether to ignore the 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, which makes a rule about people and workloads statistically insignificant against that background.
The list is maintained by the module and matches the “Exclude system” filter of the console, so the interface and the rule put the same events out of view. The list 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, and only stop being counted. Events without an actor are kept, and anonymous or unauthenticated identities are never treated as platform actors, because those are what a security rule looks for.
Default:
true -
stringspec.groups.rules.match.severityMinMinimal event severity to match (inclusive).
Allowed values:
Low,Medium,High,Critical -
array of stringsspec.groups.rules.match.sourcesSource components to match, as declared in
spec.sourceof SecurityEventDefinition, for examplekube-audit.
-
-
stringspec.groups.rules.mode
Which of the two ways this rule is written in.
Expr— the condition is a LogQL query written by hand inexpr.Match— the condition is built from the structured fields ofmatch, optionally counted byaggregation.The field states explicitly what the presence of
exprormatchalready implies, and must agree with it. It exists so that a reader of the manifest and the platform web interface both know which form a rule is written in without inspecting which block is filled: the web interface shows the fields of the selected mode only, and hides the other form entirely.Allowed values:
Expr,Match -
integerspec.groups.rules.severityLevel
DKP severity level, sent as the
severity_levellabel.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:
6Allowed values:
0 <= X <= 9
-
-
-
-
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 are shipped to.
-
objectspec.cef
Default CEF (Common Event Format) metadata for destinations that use CEF encoding.
These values are used when a ClusterSecurityEventDestination has
encoding.codecset toCEFbut does not specify its owncef.deviceVendor,cef.deviceProductandcef.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
Sources that are enabled.
If the parameter is omitted, all sources are enabled. Each item uses one of the following formats:
clusterSecurityEventShipper/<SHIPPER NAME>/<SOURCE>;podSecurityEventShipper/<NAMESPACE>/<SHIPPER NAME>/<SOURCE>.
-
stringspec.enabledSources.Element of the array
Pattern:
^(clusterSecurityEventShipper/[^/]+/[^/]+|podSecurityEventShipper/[^/]+/[^/]+/[^/]+)$
-
array of stringsspec.enabledSourcesMasks
Glob masks of the sources that are enabled.
If the parameter is omitted, all sources are enabled. A
*in a mask matches any substring, including/. The parametersenabledSourcesandenabledSourcesMasksare mutually exclusive.Each mask uses one of the following formats:
clusterSecurityEventShipper/<SHIPPER NAME>/<SOURCE>;podSecurityEventShipper/<NAMESPACE>/<SHIPPER NAME>/<SOURCE>.
For example:
enabledSourcesMasks: - podSecurityEventShipper/* - clusterSecurityEventShipper/kube-audit/*-
stringspec.enabledSourcesMasks.Element of the array
Pattern:
^(clusterSecurityEventShipper/.+|podSecurityEventShipper/.+)$
-
-
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:
500Allowed values:
100 <= X -
stringspec.buffer.maxSize
Maximum size of the buffer as a Kubernetes quantity string with a mandatory unit suffix for example
512Mi,1Gior256Mi.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. Used by default and ensures that no security events are lost during a temporary destination outage.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. The pipeline slows down, but no events are lost. Used by default and is 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, used by default and suitable for Loki, Elasticsearch and Kafka;CEF— Common Event Format, suitable for SIEM integration through Kafka, Vector, File and Console.
Default:
JSONAllowed values:
JSON,CEF -
stringspec.console.encoding.syslogWrapper
Syslog header wrapping for CEF output.
Only applicable when
codecisCEF.Possible values:
None— emit a bare CEF string, used by default;RFC3164— prepend an RFC 3164 (BSD syslog) header;RFC5424— prepend an 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 resource 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 resource 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, used by default and suitable for Loki, Elasticsearch and Kafka;CEF— Common Event Format, suitable for SIEM integration through Kafka, Vector, File and Console.
Default:
JSONAllowed values:
JSON,CEF -
stringspec.file.encoding.syslogWrapper
Syslog header wrapping for CEF output.
Only applicable when
codecisCEF.Possible values:
None— emit a bare CEF string, used by default;RFC3164— prepend an RFC 3164 (BSD syslog) header;RFC5424— prepend an 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 resource 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 resource 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, used by default and suitable for Loki, Elasticsearch and Kafka;CEF— Common Event Format, suitable for SIEM integration through Kafka, Vector, File and Console.
Default:
JSONAllowed values:
JSON,CEF -
stringspec.kafka.encoding.syslogWrapper
Syslog header wrapping for CEF output.
Only applicable when
codecisCEF.Possible values:
None— emit a bare CEF string, used by default;RFC3164— prepend an RFC 3164 (BSD syslog) header;RFC5424— prepend an 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 resource 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 resource 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 resource 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, for examplesiem.example.com:514;UDP—host:port, for examplesiem.example.com:514;Unix—/path/to/socket, for example/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, used by default and suitable for Loki, Elasticsearch and Kafka;CEF— Common Event Format, suitable for SIEM integration through Kafka, Vector, File and Console.
Default:
JSONAllowed values:
JSON,CEF -
stringspec.socket.encoding.syslogWrapper
Syslog header wrapping for CEF output.
Only applicable when
codecisCEF.Possible values:
None— emit a bare CEF string, used by default;RFC3164— prepend an RFC 3164 (BSD syslog) header;RFC5424— prepend an RFC 5424 (IETF syslog) header.
Default:
NoneAllowed values:
None,RFC3164,RFC5424
-
-
stringspec.socket.mode
Required value
Socket transport mode.
Possible values:
TCP— stream-oriented and reliable, supports TLS. Recommended for a production syslog;UDP— datagram-oriented, with no delivery guarantee. The maximum message size is limited by the MTU;Unix— local Unix domain socket in stream mode. Intended for SIEM agents running as a sidecar.
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 resource 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, used by default and suitable for Loki, Elasticsearch and Kafka;CEF— Common Event Format, suitable for SIEM integration through Kafka, Vector, File and Console.
Default:
JSONAllowed values:
JSON,CEF -
stringspec.vector.encoding.syslogWrapper
Syslog header wrapping for CEF output.
Only applicable when
codecisCEF.Possible values:
None— emit a bare CEF string, used by default;RFC3164— prepend an RFC 3164 (BSD syslog) header;RFC5424— prepend an 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 resources are managed by Deckhouse and cannot be created or modified. -
Externalplugins are served by user-deployed pods in any namespace. The resource specifies the endpoint URL, the argument schema, the return field schema and, optionally, TLS and authentication settings.
-
array of objectsspec.args
Required value
Input arguments, passed as query parameters, that the plugin accepts.
Each argument has a name, a flag marking it as required, 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.
Minimal length:
1 -
booleanspec.args.requiredWhether the argument is required in ShipperEnrichRule.
Default:
true
-
-
stringspec.descriptionHuman-readable description of the plugin.
-
objectspec.endpoint
HTTP endpoint configuration.
Required for
Externalplugins. ForInternalplugins the parameter is ignored, because the sidecar URL is used automatically.-
array of objectsspec.endpoint.headersStatic HTTP headers sent with each lookup request.
-
stringspec.endpoint.headers.name
Minimal length:
1 -
stringspec.endpoint.headers.value
-
-
objectspec.endpoint.tlsTLS configuration for the HTTPS endpoint.
-
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 a request of the form
GET <URL>?<ARGS AS QUERY PARAMS>. The URL must start withhttp://orhttps://. To prevent SSRF, it must not reference cloud metadata endpoints such as169.254.x.xor link-local addresses.Minimal length:
1
-
-
objectspec.readiness
Readiness probe of the plugin.
The controller can probe this endpoint before including the plugin in the gateway configuration. If the endpoint is unreachable, the controller sets the
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
Fields that the plugin returns in its JSON response.
The list is used for validation: the
valueparameter in a referencingShipperEnrichRulemust match one of thefields[].namevalues listed here.-
array of objectsspec.returns.fields
Required value
-
stringspec.returns.fields.descriptionHuman-readable description of the field.
-
stringspec.returns.fields.nameResponse field name.
Minimal length:
1 -
stringspec.returns.fields.typeField type.
Allowed values:
String,Int,Bool
-
-
-
stringspec.type
Required value
Plugin type.
Internal— served by the built-inenrichment-cachesidecar, no endpoint required;External— served by a user-deployed pod, requiresendpoint.url.
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.-
stringspec.file.paths.Element of the array
Minimal length:
1
-
-
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.
Minimal length:
1 -
stringspec.file.transform.fields.typeTarget field type.
Allowed values:
String,Int,Float,Bool
-
-
objectspec.file.transform.parser
Required value
Parser configuration that defines how to unpack the original log line.
Parsing follows these rules:
- parsing is best-effort, so errors and mismatches do not drop events;
- for the
RegexandGroktypes, the first successfully matched pattern wins; - 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.-
stringspec.file.transform.parser.grok.patterns.Element of the array
Minimal length:
1
-
-
-
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.regex.patterns.Element of the array
Minimal length:
1
-
-
-
stringspec.file.transform.parser.type
Required value
Parser type.
JSON— parse the original log line as JSON withparse_json();Regex— apply regular expressions 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.fieldsField type conversions applied after parsing. Use them to enforce stable types for sinks such as Elasticsearch or ClickHouse.
-
stringspec.kubernetesPods.containers.fields.nameField name in the parsed object.
Minimal length:
1 -
stringspec.kubernetesPods.containers.fields.typeTarget field type.
Allowed values:
String,Int,Float,Bool
-
-
stringspec.kubernetesPods.containers.nameContainer name to apply this transformation to.
Minimal length:
1 -
objectspec.kubernetesPods.containers.parser
Parser configuration that defines how to unpack the original log line.
Parsing follows these rules:
- parsing is best-effort, so errors and mismatches do not drop events;
- for the
RegexandGroktypes, the first successfully matched pattern wins; - 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.-
stringspec.kubernetesPods.containers.parser.grok.patterns.Element of the array
Minimal length:
1
-
-
-
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.regex.patterns.Element of the array
Minimal length:
1
-
-
-
stringspec.kubernetesPods.containers.parser.type
Required value
Parser type.
JSON— parse the original log line as JSON withparse_json();Regex— apply regular expressions 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).
Minimal length:
1 -
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.fieldsField type conversions applied after parsing.
-
stringspec.parser.fields.nameField name in the parsed object.
Minimal length:
1 -
stringspec.parser.fields.typeTarget field type.
Allowed values:
String,Int,Float,Bool
-
-
stringspec.parser.nameContainer name (or
filefor file input).Minimal length:
1 -
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
-
stringspec.parser.parser.grok.patterns.Element of the array
Minimal length:
1
-
-
-
objectspec.parser.parser.regex
-
array of stringsspec.parser.parser.regex.patterns
Required value
-
stringspec.parser.parser.regex.patterns.Element of the array
Minimal length:
1
-
-
-
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.Minimal length:
1 -
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 referenced ClusterSecurityEventEnrichmentPlugin CR (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 existing ClusterSecurityEventEnrichmentPlugin resource 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.
To register custom enrichment endpoints, create ClusterSecurityEventEnrichmentPlugin resources of type
External. -
stringspec.produces.enrich.sourceEnrichment source type.
Allowed values:
Static,Plugin -
stringspec.produces.enrich.targetDestination field path in outgoing SecurityEvent (dot-separated).
Minimal length:
1 -
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 referenced ClusterSecurityEventEnrichmentPlugin resource. For example:serviceAccountName,name,namespace(k8s-pod-info / k8s-container-info),username(k8s-nodeuser-info).
-
stringspec.produces.eventCodeEvent code (references SecurityEventDefinition.spec.code).
Minimal length:
1 -
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.Minimal length:
1 -
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 referenced ClusterSecurityEventEnrichmentPlugin CR (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 existing ClusterSecurityEventEnrichmentPlugin resource 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.
To register custom enrichment endpoints, create ClusterSecurityEventEnrichmentPlugin resources of type
External. -
stringspec.producesDefaults.enrich.sourceEnrichment source type.
Allowed values:
Static,Plugin -
stringspec.producesDefaults.enrich.targetDestination field path in outgoing SecurityEvent (dot-separated).
Minimal length:
1 -
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 referenced ClusterSecurityEventEnrichmentPlugin resource. 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).
Minimal length:
1
-
-
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.fieldsField type conversions applied after parsing.
-
stringspec.parser.fields.nameField name in the parsed object.
Minimal length:
1 -
stringspec.parser.fields.typeTarget field type.
Allowed values:
String,Int,Float,Bool
-
-
stringspec.parser.nameContainer name.
Minimal length:
1 -
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.-
stringspec.parser.parser.grok.patterns.Element of the array
Minimal length:
1
-
-
-
objectspec.parser.parser.regexRegex parser configuration.
-
array of stringsspec.parser.parser.regex.patterns
Required value
Regex patterns to try in order.-
stringspec.parser.parser.regex.patterns.Element of the array
Minimal length:
1
-
-
-
stringspec.parser.parser.type
Required value
Parser type.
JSON— parse the original log line as JSON;Regex— apply regular expressions 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 when
parseris not set.Minimal length:
1 -
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 referenced ClusterSecurityEventEnrichmentPlugin CR (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 existing ClusterSecurityEventEnrichmentPlugin resource 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.
To register custom enrichment endpoints, create ClusterSecurityEventEnrichmentPlugin resources of type
External. -
stringspec.produces.enrich.sourceEnrichment source type.
Allowed values:
Static,Plugin -
stringspec.produces.enrich.targetDestination field path in outgoing SecurityEvent (dot-separated).
Minimal length:
1 -
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 referenced ClusterSecurityEventEnrichmentPlugin resource. For example:serviceAccountName,name,namespace(k8s-pod-info / k8s-container-info),username(k8s-nodeuser-info).
-
stringspec.produces.eventCodeEvent code (references SecurityEventDefinition.spec.code).
Minimal length:
1 -
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.Minimal length:
1 -
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 referenced ClusterSecurityEventEnrichmentPlugin CR (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 existing ClusterSecurityEventEnrichmentPlugin resource 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.
To register custom enrichment endpoints, create ClusterSecurityEventEnrichmentPlugin resources of type
External. -
stringspec.producesDefaults.enrich.sourceEnrichment source type.
Allowed values:
Static,Plugin -
stringspec.producesDefaults.enrich.targetDestination field path in outgoing SecurityEvent (dot-separated).
Minimal length:
1 -
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 referenced ClusterSecurityEventEnrichmentPlugin resource. 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).
Minimal length:
1
-
-
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, for examplekube-apiserver. -
stringsource.instanceInstance 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.Minimal length:
1 -
stringspec.description
Required value
Human-readable description.Minimal length:
1 -
stringspec.descriptionRuHuman-readable description in Russian.
-
array of objectsspec.fieldsList of fields that the event may contain.
-
stringspec.fields.nameField name.
Minimal length:
1 -
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.Minimal length:
1
-
-
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.fieldsField type conversions applied after parsing. Use them to enforce stable types for sinks such as Elasticsearch or ClickHouse.
-
stringspec.containers.fields.nameField name in the parsed object.
Minimal length:
1 -
stringspec.containers.fields.typeTarget field type.
Allowed values:
String,Int,Float,Bool
-
-
stringspec.containers.nameContainer name to apply this transformation to.
Minimal length:
1 -
objectspec.containers.parser
Parser configuration that defines how to unpack the original log line.
Parsing follows these rules:
- parsing is best-effort, so errors and mismatches do not drop events;
- for the
RegexandGroktypes, the first successfully matched pattern wins; - 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.-
stringspec.containers.parser.grok.patterns.Element of the array
Minimal length:
1
-
-
-
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.regex.patterns.Element of the array
Minimal length:
1
-
-
-
stringspec.containers.parser.type
Required value
Parser type.
JSON— parse the original log line as JSON withparse_json();Regex— apply regular expressions 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.
-