Skip to content

Commit 30ad73e

Browse files
api-clients-generation-pipeline[bot]ci.datadog-api-spec
andauthored
Add anomaly detection options to security monitoring rules (#1090)
Co-authored-by: ci.datadog-api-spec <[email protected]>
1 parent 0c0d867 commit 30ad73e

12 files changed

+661
-0
lines changed

.generator/schemas/v2/openapi.yaml

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47320,6 +47320,86 @@ components:
4732047320
description: The name of the reference table.
4732147321
type: string
4732247322
type: object
47323+
SecurityMonitoringRuleAnomalyDetectionOptions:
47324+
additionalProperties: {}
47325+
description: Options on anomaly detection method.
47326+
properties:
47327+
bucketDuration:
47328+
$ref: '#/components/schemas/SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration'
47329+
detectionTolerance:
47330+
$ref: '#/components/schemas/SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance'
47331+
learningDuration:
47332+
$ref: '#/components/schemas/SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration'
47333+
learningPeriodBaseline:
47334+
description: An optional override baseline to apply while the rule is in
47335+
the learning period. Must be greater than or equal to 0.
47336+
format: int64
47337+
minimum: 0
47338+
type: integer
47339+
type: object
47340+
SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration:
47341+
description: 'Duration in seconds of the time buckets used to aggregate events
47342+
matched by the rule.
47343+
47344+
Must be greater than or equal to 300.'
47345+
enum:
47346+
- 300
47347+
- 600
47348+
- 900
47349+
- 1800
47350+
- 3600
47351+
- 10800
47352+
example: 300
47353+
format: int32
47354+
type: integer
47355+
x-enum-varnames:
47356+
- FIVE_MINUTES
47357+
- TEN_MINUTES
47358+
- FIFTEEN_MINUTES
47359+
- THIRTY_MINUTES
47360+
- ONE_HOUR
47361+
- THREE_HOURS
47362+
SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance:
47363+
description: 'An optional parameter that sets how permissive anomaly detection
47364+
is.
47365+
47366+
Higher values require higher deviations before triggering a signal.'
47367+
enum:
47368+
- 1
47369+
- 2
47370+
- 3
47371+
- 4
47372+
- 5
47373+
example: 5
47374+
format: int32
47375+
type: integer
47376+
x-enum-varnames:
47377+
- ONE
47378+
- TWO
47379+
- THREE
47380+
- FOUR
47381+
- FIVE
47382+
SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration:
47383+
description: Learning duration in hours. Anomaly detection waits for at least
47384+
this amount of historical data before it starts evaluating.
47385+
enum:
47386+
- 1
47387+
- 6
47388+
- 12
47389+
- 24
47390+
- 48
47391+
- 168
47392+
- 336
47393+
format: int32
47394+
type: integer
47395+
x-enum-varnames:
47396+
- ONE_HOUR
47397+
- SIX_HOURS
47398+
- TWELVE_HOURS
47399+
- ONE_DAY
47400+
- TWO_DAYS
47401+
- ONE_WEEK
47402+
- TWO_WEEKS
4732347403
SecurityMonitoringRuleCase:
4732447404
description: Case when signal is generated.
4732547405
properties:
@@ -47685,6 +47765,8 @@ components:
4768547765
SecurityMonitoringRuleOptions:
4768647766
description: Options.
4768747767
properties:
47768+
anomalyDetectionOptions:
47769+
$ref: '#/components/schemas/SecurityMonitoringRuleAnomalyDetectionOptions'
4768847770
complianceRuleOptions:
4768947771
$ref: '#/components/schemas/CloudConfigurationComplianceRuleOptions'
4769047772
decreaseCriticalityBasedOnEnv:
@@ -55124,6 +55206,8 @@ components:
5512455206
ThreatHuntingJobOptions:
5512555207
description: Job options.
5512655208
properties:
55209+
anomalyDetectionOptions:
55210+
$ref: '#/components/schemas/SecurityMonitoringRuleAnomalyDetectionOptions'
5512755211
detectionMethod:
5512855212
$ref: '#/components/schemas/SecurityMonitoringRuleDetectionMethod'
5512955213
evaluationWindow:
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
// Create a detection rule with detection method 'anomaly_detection' returns "OK"
2+
// response
3+
use datadog_api_client::datadog;
4+
use datadog_api_client::datadogV2::api_security_monitoring::SecurityMonitoringAPI;
5+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleAnomalyDetectionOptions;
6+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration;
7+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance;
8+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration;
9+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleCaseCreate;
10+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleCreatePayload;
11+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleDetectionMethod;
12+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleEvaluationWindow;
13+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleKeepAlive;
14+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleMaxSignalDuration;
15+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleOptions;
16+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleQueryAggregation;
17+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleSeverity;
18+
use datadog_api_client::datadogV2::model::SecurityMonitoringRuleTypeCreate;
19+
use datadog_api_client::datadogV2::model::SecurityMonitoringStandardDataSource;
20+
use datadog_api_client::datadogV2::model::SecurityMonitoringStandardRuleCreatePayload;
21+
use datadog_api_client::datadogV2::model::SecurityMonitoringStandardRuleQuery;
22+
23+
#[tokio::main]
24+
async fn main() {
25+
let body =
26+
SecurityMonitoringRuleCreatePayload::SecurityMonitoringStandardRuleCreatePayload(
27+
Box::new(
28+
SecurityMonitoringStandardRuleCreatePayload::new(
29+
vec![
30+
SecurityMonitoringRuleCaseCreate::new(SecurityMonitoringRuleSeverity::INFO)
31+
.condition("a > 0.995".to_string())
32+
.name("".to_string())
33+
.notifications(vec![])
34+
],
35+
true,
36+
"An anomaly detection rule".to_string(),
37+
"Example-Security-Monitoring".to_string(),
38+
SecurityMonitoringRuleOptions::new()
39+
.anomaly_detection_options(
40+
SecurityMonitoringRuleAnomalyDetectionOptions::new()
41+
.bucket_duration(
42+
SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration::FIVE_MINUTES,
43+
)
44+
.detection_tolerance(
45+
SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance::THREE,
46+
)
47+
.learning_duration(
48+
SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration::ONE_DAY,
49+
)
50+
.learning_period_baseline(10),
51+
)
52+
.detection_method(SecurityMonitoringRuleDetectionMethod::ANOMALY_DETECTION)
53+
.evaluation_window(SecurityMonitoringRuleEvaluationWindow::FIFTEEN_MINUTES)
54+
.keep_alive(SecurityMonitoringRuleKeepAlive::ONE_HOUR)
55+
.max_signal_duration(SecurityMonitoringRuleMaxSignalDuration::ONE_DAY),
56+
vec![
57+
SecurityMonitoringStandardRuleQuery::new()
58+
.aggregation(SecurityMonitoringRuleQueryAggregation::COUNT)
59+
.data_source(SecurityMonitoringStandardDataSource::LOGS)
60+
.distinct_fields(vec![])
61+
.group_by_fields(vec!["@usr.email".to_string(), "@network.client.ip".to_string()])
62+
.has_optional_group_by_fields(false)
63+
.name("".to_string())
64+
.query("service:app status:error".to_string())
65+
],
66+
)
67+
.filters(vec![])
68+
.tags(vec![])
69+
.type_(SecurityMonitoringRuleTypeCreate::LOG_DETECTION),
70+
),
71+
);
72+
let configuration = datadog::Configuration::new();
73+
let api = SecurityMonitoringAPI::with_config(configuration);
74+
let resp = api.create_security_monitoring_rule(body).await;
75+
if let Ok(value) = resp {
76+
println!("{:#?}", value);
77+
} else {
78+
println!("{:#?}", resp.unwrap_err());
79+
}
80+
}

src/datadogV2/model/mod.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6024,6 +6024,14 @@ pub mod model_security_monitoring_filter_action;
60246024
pub use self::model_security_monitoring_filter_action::SecurityMonitoringFilterAction;
60256025
pub mod model_security_monitoring_rule_options;
60266026
pub use self::model_security_monitoring_rule_options::SecurityMonitoringRuleOptions;
6027+
pub mod model_security_monitoring_rule_anomaly_detection_options;
6028+
pub use self::model_security_monitoring_rule_anomaly_detection_options::SecurityMonitoringRuleAnomalyDetectionOptions;
6029+
pub mod model_security_monitoring_rule_anomaly_detection_options_bucket_duration;
6030+
pub use self::model_security_monitoring_rule_anomaly_detection_options_bucket_duration::SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration;
6031+
pub mod model_security_monitoring_rule_anomaly_detection_options_detection_tolerance;
6032+
pub use self::model_security_monitoring_rule_anomaly_detection_options_detection_tolerance::SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance;
6033+
pub mod model_security_monitoring_rule_anomaly_detection_options_learning_duration;
6034+
pub use self::model_security_monitoring_rule_anomaly_detection_options_learning_duration::SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration;
60276035
pub mod model_cloud_configuration_compliance_rule_options;
60286036
pub use self::model_cloud_configuration_compliance_rule_options::CloudConfigurationComplianceRuleOptions;
60296037
pub mod model_cloud_configuration_rego_rule;

0 commit comments

Comments
 (0)