Skip to content

Commit b553d8c

Browse files
[Bug] Fix Filter Support for Import Rules (#4852)
* Fix Filter Support for Import Rules * Patch Bump * Update Remove CLI Test Script * Ruff formatting (cherry picked from commit 898be50)
1 parent 817a2ed commit b553d8c

File tree

3 files changed

+24
-6
lines changed

3 files changed

+24
-6
lines changed

detection_rules/etc/test_remote_cli.bash

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,18 @@ python -m detection_rules kibana search-alerts
1414

1515
echo "Performing a rule export..."
1616
mkdir tmp-export 2>/dev/null
17-
python -m detection_rules kibana export-rules -d tmp-export -sv --skip-errors
17+
python -m detection_rules kibana export-rules -d tmp-export -sv --skip-errors -r 565d6ca5-75ba-4c82-9b13-add25353471c
1818
ls tmp-export
1919
echo "Removing generated files..."
2020
rm -rf tmp-export
2121

22-
echo "Detection-rules CLI tests completed!"
22+
echo "Performing a rule import..."
23+
24+
python -m detection_rules custom-rules setup-config tmp-custom
25+
export CUSTOM_RULES_DIR=./tmp-custom
26+
cp rules/threat_intel/threat_intel_indicator_match_address.toml tmp-custom/rules/
27+
python -m detection_rules kibana import-rules -o -e -ac
28+
rm -rf tmp-custom
29+
set -e CUSTOM_RULES_DIR
30+
31+
echo "Detection-rules Remote CLI tests completed!"

detection_rules/kbwrap.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from .cli_utils import multi_collection
2424
from .config import parse_rules_config
2525
from .exception import TOMLException, TOMLExceptionContents, build_exception_objects, parse_exceptions_results_from_api
26-
from .generic_loader import GenericCollection
26+
from .generic_loader import GenericCollection, GenericCollectionTypes
2727
from .main import root
2828
from .misc import add_params, get_kibana_client, kibana_options, nested_set, raise_client_error
2929
from .rule import TOMLRule, TOMLRuleContents, downgrade_contents_from_rule
@@ -159,6 +159,10 @@ def _parse_list_id(s: str) -> str | None:
159159
)
160160
click.echo()
161161

162+
def _matches_rule_ids(item: GenericCollectionTypes, rule_ids: set[str]) -> bool:
163+
"""Check if the item matches any of the rule IDs in the provided set."""
164+
return any(rule_id in rule_ids for rule_id in item.contents.metadata.get("rule_ids", []))
165+
162166
def _process_imported_items(
163167
imported_items_list: list[list[dict[str, Any]]],
164168
item_type_description: str,
@@ -173,13 +177,18 @@ def _process_imported_items(
173177

174178
kibana = ctx.obj["kibana"]
175179
rule_dicts = [r.contents.to_api_format() for r in rules]
180+
rule_ids = {rule["rule_id"] for rule in rule_dicts}
176181
with kibana:
177182
cl = GenericCollection.default()
178183
exception_dicts = [
179-
d.contents.to_api_format() for d in cl.items if isinstance(d.contents, TOMLExceptionContents)
184+
d.contents.to_api_format()
185+
for d in cl.items
186+
if isinstance(d.contents, TOMLExceptionContents) and _matches_rule_ids(d, rule_ids)
180187
]
181188
action_connectors_dicts = [
182-
d.contents.to_api_format() for d in cl.items if isinstance(d.contents, TOMLActionConnectorContents)
189+
d.contents.to_api_format()
190+
for d in cl.items
191+
if isinstance(d.contents, TOMLActionConnectorContents) and _matches_rule_ids(d, rule_ids)
183192
]
184193
response, successful_rule_ids, results = RuleResource.import_rules( # type: ignore[reportUnknownMemberType]
185194
rule_dicts,

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "detection_rules"
3-
version = "1.3.4"
3+
version = "1.3.5"
44
description = "Detection Rules is the home for rules used by Elastic Security. This repository is used for the development, maintenance, testing, validation, and release of rules for Elastic Security’s Detection Engine."
55
readme = "README.md"
66
requires-python = ">=3.12"

0 commit comments

Comments
 (0)