Writing YAML Detections
Construct YAML detections in the CLI workflow
Last updated
Was this helpful?
Construct YAML detections in the CLI workflow
Last updated
Was this helpful?
In Panther, you can create rules in YAML (in addition to ).
YAML detections created in the CLI workflow, then uploaded to Panther, will be viewable and editable in the in the Console. This may be valuable if members of your team have varying levels of experience with YAML.
If you aren't sure whether to write detections locally in YAML or Python, see the section.
and cannot be created in YAML.
Only can be created in YAML.
Panther-managed YAML detections are not yet available.
It is possible, however, to use alongside your own YAML detections.
Many helper functions available in Python, including those for specific log sources, are not represented in YAML.
Some have been converted into YAML keys, e.g., is .
It is not possible to make external API calls in YAML detections, including to fetch values from your Dynamo KV store to use .
Each custom YAML detection can be composed of:
Detection key
Filter key
Metadata keys
Alert keys (dynamic)
Alert keys (static)
Detection
InlineFilters
Alert fields are fields in a YAML detection definition that are applicable to the alerts generated by that detection.
Alert fields can be static or dynamic. With static alert fields, you provide a set value in the detection definition, which does not change based on the incoming event. Dynamic alert fields, however, can use information in the event to determine the value.
DynamicSeverities
Use DynamicSeverities
to dynamically set the severity of an alert generated by a match on this detection. This field is dynamic because you can use values from the event to determine the severity.
Example:
AlertTitle
Use AlertTitle
to dynamically set the title of an alert generated by a match on this detection. This field is dynamic because you can use values from the event in the title.
The value of AlertTitle
should be a string. You can reference event values by using curly braces. Inside the curly braces, use JSON path syntax.
Example:
AlertContext
AlertContext
lets you identify event data to pass onto generated alerts, formatted as a dictionary.
Example:
GroupBy
Example:
The values of the keys provided under GroupBy
are joined with a colon to form the deduplication string. The outputted deduplication string for the above example would be:
The table below contains all available keys for YAML detections. Required fields are in bold.
Field Name
Description
Expected Value
AnalysisType
Indicates whether this analysis is a rule, scheduled_rule, policy, or global
rule
Enabled
Whether this rule is enabled
Boolean
RuleID
The unique identifier of the rule
String
LogTypes
The list of logs to apply this rule to
List of strings
Severity
One of the following strings: Info
, Low
, Medium
, High
, or Critical
This field is overwritten by DynamicSeverities
, but is required even if DynamicSeverities
is defined
Detection
The list of match expressions to apply to the event data
Description
A brief description of the rule
String
Set of event values that will be used to deduplicate alerts by
List of event keys
DedupPeriodMinutes
The time period (in minutes) during which similar events of an alert will be grouped together
15
,30
,60
,180
(3 hours),720
(12 hours), or 1440
(24 hours)
DisplayName
A user-friendly name to show in the Panther Console and alerts. The RuleID
will be displayed if this field is not set.
String
OutputIds
Static destination overrides. These will be used to determine how alerts from this rule are routed, taking priority over default routing based on severity.
List of strings
Reference
The reason this rule exists, often a link to documentation
String
Reports
A mapping of framework or report names to values this rule covers for that framework
Map of strings to list of strings
Runbook
The actions to be carried out if this rule returns an alert, often a link to documentation
String
SummaryAttributes
A list of fields that alerts should summarize.
List of strings
Threshold
How many events need to trigger this rule before an alert will be sent.
Integer
Tags
Tags used to categorize this rule
List of strings
Tests
Unit tests for this rule
List of maps
InlineFilters
An alternate DisplayName
that can use event values to create a dynamic title for alerts
String
Event values to add to the Event under custom keys to create a dynamic alert context
List of key name and key value pairs
YAML rules contain lists of boolean logic called that detect suspicious behaviors. Returning a value of True
indicates suspicious activity, which triggers an alert.
Learn more about , and see a .
After this rule is uploaded to Panther, it will be viewable in the Console in the .
Learn more about each of these keys, including which are required and optional, in the .
Within the Detection
key, include one or more .
Learn more about using InlineFilters
in YAML detections on .
When DynamicSeverities
is present, its value overrides the value of the Severity
key. Severity
is still required, and its value will be the fallback value if there are no matches on any of the contained within DynamicSeverities
.
Within the DynamicSeverities
key, include one or more ChangeTo
keys, each with a corresponding Conditions
key. The value of ChangeTo
should be one of the . The ChangeTo
blocks are evaluated in order, from top to bottom, and evaluation stops once a match has been found.
Within Conditions
, include one or more . The Conditions
list has the following limitations:
No , , or match expressions may be used.
No may be used.
Within AlertContext
, include one or more KeyName
and KeyValue
pairs. KeyName
takes a string of your choice, which will become the key in the alert context dictionary. Within KeyValue
, use a to indicate an event key—its value will be the value in the alert context dictionary.
GroupBy
sets the deduplication string for your detection. Learn more about deduplication, including the order of precedence for how the deduplication string is set, on .
Within the GroupBy
key, include a list of one or more event keys defined with .
If you are writing a Python rule, instead see the .
Which an associated alert should have
List of
Alternate based on custom sets of conditions
List of dynamic severity configurations, consisting of ChangeTo
and Conditions
fields. ChangeTo
is a Severity
value and Conditions
is a list of .
The list of filters in the form of to filter in data
List of (limited to filter-compatible versions)