Skip to content

Commit d3a952f

Browse files
api-clients-generation-pipeline[bot]ci.datadog-api-spec
andauthored
Add anomaly detection options to security monitoring rules (#3322)
Co-authored-by: ci.datadog-api-spec <packages@datadoghq.com>
1 parent 59e4498 commit d3a952f

11 files changed

+798
-1
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: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
// Create a detection rule with detection method 'anomaly_detection' returns "OK" response
2+
3+
import com.datadog.api.client.ApiClient;
4+
import com.datadog.api.client.ApiException;
5+
import com.datadog.api.client.v2.api.SecurityMonitoringApi;
6+
import com.datadog.api.client.v2.model.SecurityMonitoringRuleAnomalyDetectionOptions;
7+
import com.datadog.api.client.v2.model.SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration;
8+
import com.datadog.api.client.v2.model.SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance;
9+
import com.datadog.api.client.v2.model.SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration;
10+
import com.datadog.api.client.v2.model.SecurityMonitoringRuleCaseCreate;
11+
import com.datadog.api.client.v2.model.SecurityMonitoringRuleCreatePayload;
12+
import com.datadog.api.client.v2.model.SecurityMonitoringRuleDetectionMethod;
13+
import com.datadog.api.client.v2.model.SecurityMonitoringRuleEvaluationWindow;
14+
import com.datadog.api.client.v2.model.SecurityMonitoringRuleKeepAlive;
15+
import com.datadog.api.client.v2.model.SecurityMonitoringRuleMaxSignalDuration;
16+
import com.datadog.api.client.v2.model.SecurityMonitoringRuleOptions;
17+
import com.datadog.api.client.v2.model.SecurityMonitoringRuleQueryAggregation;
18+
import com.datadog.api.client.v2.model.SecurityMonitoringRuleResponse;
19+
import com.datadog.api.client.v2.model.SecurityMonitoringRuleSeverity;
20+
import com.datadog.api.client.v2.model.SecurityMonitoringRuleTypeCreate;
21+
import com.datadog.api.client.v2.model.SecurityMonitoringStandardDataSource;
22+
import com.datadog.api.client.v2.model.SecurityMonitoringStandardRuleCreatePayload;
23+
import com.datadog.api.client.v2.model.SecurityMonitoringStandardRuleQuery;
24+
import java.util.Arrays;
25+
import java.util.Collections;
26+
27+
public class Example {
28+
public static void main(String[] args) {
29+
ApiClient defaultClient = ApiClient.getDefaultApiClient();
30+
SecurityMonitoringApi apiInstance = new SecurityMonitoringApi(defaultClient);
31+
32+
SecurityMonitoringRuleCreatePayload body =
33+
new SecurityMonitoringRuleCreatePayload(
34+
new SecurityMonitoringStandardRuleCreatePayload()
35+
.name("Example-Security-Monitoring")
36+
.type(SecurityMonitoringRuleTypeCreate.LOG_DETECTION)
37+
.isEnabled(true)
38+
.queries(
39+
Collections.singletonList(
40+
new SecurityMonitoringStandardRuleQuery()
41+
.aggregation(SecurityMonitoringRuleQueryAggregation.COUNT)
42+
.dataSource(SecurityMonitoringStandardDataSource.LOGS)
43+
.groupByFields(Arrays.asList("@usr.email", "@network.client.ip"))
44+
.hasOptionalGroupByFields(false)
45+
.name("")
46+
.query("service:app status:error")))
47+
.cases(
48+
Collections.singletonList(
49+
new SecurityMonitoringRuleCaseCreate()
50+
.name("")
51+
.status(SecurityMonitoringRuleSeverity.INFO)
52+
.condition("a > 0.995")))
53+
.message("An anomaly detection rule")
54+
.options(
55+
new SecurityMonitoringRuleOptions()
56+
.detectionMethod(SecurityMonitoringRuleDetectionMethod.ANOMALY_DETECTION)
57+
.evaluationWindow(SecurityMonitoringRuleEvaluationWindow.FIFTEEN_MINUTES)
58+
.keepAlive(SecurityMonitoringRuleKeepAlive.ONE_HOUR)
59+
.maxSignalDuration(SecurityMonitoringRuleMaxSignalDuration.ONE_DAY)
60+
.anomalyDetectionOptions(
61+
new SecurityMonitoringRuleAnomalyDetectionOptions()
62+
.bucketDuration(
63+
SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration
64+
.FIVE_MINUTES)
65+
.learningDuration(
66+
SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration
67+
.ONE_DAY)
68+
.detectionTolerance(
69+
SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance
70+
.THREE)
71+
.learningPeriodBaseline(10L))));
72+
73+
try {
74+
SecurityMonitoringRuleResponse result = apiInstance.createSecurityMonitoringRule(body);
75+
System.out.println(result);
76+
} catch (ApiException e) {
77+
System.err.println(
78+
"Exception when calling SecurityMonitoringApi#createSecurityMonitoringRule");
79+
System.err.println("Status code: " + e.getCode());
80+
System.err.println("Reason: " + e.getResponseBody());
81+
System.err.println("Response headers: " + e.getResponseHeaders());
82+
e.printStackTrace();
83+
}
84+
}
85+
}

0 commit comments

Comments
 (0)