Skip to content

Commit 7ea5732

Browse files
api-clients-generation-pipeline[bot]ci.datadog-api-spec
and
ci.datadog-api-spec
authored
Add user behavior case actions in API spec (#2146)
Co-authored-by: ci.datadog-api-spec <packages@datadoghq.com>
1 parent b4a3dd6 commit 7ea5732

File tree

9 files changed

+56
-33
lines changed

9 files changed

+56
-33
lines changed

.apigentools-info

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
"spec_versions": {
55
"v1": {
66
"apigentools_version": "1.6.6",
7-
"regenerated": "2025-04-10 11:41:52.470601",
8-
"spec_repo_commit": "7f98e0a9"
7+
"regenerated": "2025-04-10 18:01:23.455805",
8+
"spec_repo_commit": "c0a45137"
99
},
1010
"v2": {
1111
"apigentools_version": "1.6.6",
12-
"regenerated": "2025-04-10 11:41:52.486222",
13-
"spec_repo_commit": "7f98e0a9"
12+
"regenerated": "2025-04-10 18:01:23.473008",
13+
"spec_repo_commit": "c0a45137"
1414
}
1515
}
1616
}

.generator/schemas/v2/openapi.yaml

+9
Original file line numberDiff line numberDiff line change
@@ -27215,6 +27215,7 @@ components:
2721527215
$ref: '#/components/schemas/SecurityMonitoringRuleCaseActionType'
2721627216
type: object
2721727217
SecurityMonitoringRuleCaseActionOptions:
27218+
additionalProperties: {}
2721827219
description: Options for the rule action
2721927220
properties:
2722027221
duration:
@@ -27223,16 +27224,24 @@ components:
2722327224
format: int64
2722427225
minimum: 0
2722527226
type: integer
27227+
userBehaviorName:
27228+
$ref: '#/components/schemas/SecurityMonitoringRuleCaseActionOptionsUserBehaviorName'
2722627229
type: object
27230+
SecurityMonitoringRuleCaseActionOptionsUserBehaviorName:
27231+
description: Used with the case action of type 'user_behavior'. The value specified
27232+
in this field is applied as a risk tag to all users affected by the rule.
27233+
type: string
2722727234
SecurityMonitoringRuleCaseActionType:
2722827235
description: The action type.
2722927236
enum:
2723027237
- block_ip
2723127238
- block_user
27239+
- user_behavior
2723227240
type: string
2723327241
x-enum-varnames:
2723427242
- BLOCK_IP
2723527243
- BLOCK_USER
27244+
- USER_BEHAVIOR
2723627245
SecurityMonitoringRuleCaseCreate:
2723727246
description: Case when signal is generated.
2723827247
properties:
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
"2025-02-06T16:50:39.787Z"
1+
"2025-04-09T15:02:05.047Z"

cassettes/v2/Security-Monitoring_1187227211/Create-a-detection-rule-with-type-application_security-returns-OK-response_4179263030/recording.har

+20-26
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
},
99
"entries": [
1010
{
11-
"_id": "e25ba2dd2cd854ae985a97cf9b520975",
11+
"_id": "2f689fb3a0a54f45bf3637e6331a9f25",
1212
"_order": 0,
1313
"cache": {},
1414
"request": {
15-
"bodySize": 656,
15+
"bodySize": 723,
1616
"cookies": [],
1717
"headers": [
1818
{
@@ -32,17 +32,17 @@
3232
"postData": {
3333
"mimeType": "application/json",
3434
"params": [],
35-
"text": "{\"cases\":[{\"actions\":[{\"options\":{\"duration\":900},\"type\":\"block_ip\"}],\"condition\":\"a > 100000\",\"name\":\"\",\"notifications\":[],\"status\":\"info\"}],\"filters\":[],\"groupSignalsBy\":[\"service\"],\"isEnabled\":true,\"message\":\"Test rule\",\"name\":\"Test-Create_a_detection_rule_with_type_application_security_returns_OK_response-1738860639_appsec_rule\",\"options\":{\"detectionMethod\":\"threshold\",\"evaluationWindow\":900,\"keepAlive\":3600,\"maxSignalDuration\":86400},\"queries\":[{\"aggregation\":\"count\",\"distinctFields\":[],\"groupByFields\":[\"service\",\"@http.client_ip\"],\"query\":\"@appsec.security_activity:business_logic.users.login.failure\"}],\"tags\":[],\"type\":\"application_security\"}"
35+
"text": "{\"cases\":[{\"actions\":[{\"options\":{\"duration\":900},\"type\":\"block_ip\"},{\"options\":{\"userBehaviorName\":\"behavior\"},\"type\":\"user_behavior\"}],\"condition\":\"a > 100000\",\"name\":\"\",\"notifications\":[],\"status\":\"info\"}],\"filters\":[],\"groupSignalsBy\":[\"service\"],\"isEnabled\":true,\"message\":\"Test rule\",\"name\":\"Test-Create_a_detection_rule_with_type_application_security_returns_OK_response-1744210925_appsec_rule\",\"options\":{\"detectionMethod\":\"threshold\",\"evaluationWindow\":900,\"keepAlive\":3600,\"maxSignalDuration\":86400},\"queries\":[{\"aggregation\":\"count\",\"distinctFields\":[],\"groupByFields\":[\"service\",\"@http.client_ip\"],\"query\":\"@appsec.security_activity:business_logic.users.login.failure\"}],\"tags\":[],\"type\":\"application_security\"}"
3636
},
3737
"queryString": [],
3838
"url": "https://api.datadoghq.com/api/v2/security_monitoring/rules"
3939
},
4040
"response": {
41-
"bodySize": 1153,
41+
"bodySize": 1227,
4242
"content": {
4343
"mimeType": "application/json",
44-
"size": 1153,
45-
"text": "{\"name\":\"Test-Create_a_detection_rule_with_type_application_security_returns_OK_response-1738860639_appsec_rule\",\"createdAt\":1738860640426,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@appsec.security_activity:business_logic.users.login.failure\",\"groupByFields\":[\"service\",\"@http.client_ip\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"app_sec_spans\"}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 100000\",\"actions\":[{\"type\":\"block_ip\",\"options\":{\"duration\":900}}]}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"application_security\",\"filters\":[],\"version\":1,\"id\":\"rfn-h2v-udr\",\"blocking\":true,\"groupSignalsBy\":[\"service\"],\"casesActions\":[[{\"type\":\"block_ip\",\"options\":{\"duration\":900}}]],\"dependencies\":[\"business_logic.users.login.failure\"],\"metadata\":{\"entities\":null,\"sources\":null},\"creator\":{\"handle\":\"\",\"name\":\"\"},\"updater\":{\"handle\":\"\",\"name\":\"\"}}"
44+
"size": 1227,
45+
"text": "{\"name\":\"Test-Create_a_detection_rule_with_type_application_security_returns_OK_response-1744210925_appsec_rule\",\"createdAt\":1744210925675,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@appsec.security_activity:business_logic.users.login.failure\",\"groupByFields\":[\"service\",\"@http.client_ip\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"app_sec_spans\"}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 100000\",\"actions\":[{\"type\":\"block_ip\",\"options\":{\"duration\":900}},{\"type\":\"user_behavior\",\"options\":{\"userBehaviorName\":\"behavior\"}}]}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"application_security\",\"filters\":[],\"version\":1,\"id\":\"lfr-zxg-fyc\",\"blocking\":true,\"groupSignalsBy\":[\"service\"],\"dependencies\":[\"business_logic.users.login.failure\"],\"metadata\":{\"entities\":null,\"sources\":null},\"creationAuthorId\":2320499,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"updater\":{\"handle\":\"\",\"name\":\"\"}}"
4646
},
4747
"cookies": [],
4848
"headers": [
@@ -51,17 +51,17 @@
5151
"value": "application/json"
5252
}
5353
],
54-
"headersSize": 656,
54+
"headersSize": 655,
5555
"httpVersion": "HTTP/1.1",
5656
"redirectURL": "",
5757
"status": 200,
5858
"statusText": "OK"
5959
},
60-
"startedDateTime": "2025-02-06T16:50:40.180Z",
61-
"time": 287
60+
"startedDateTime": "2025-04-09T15:02:05.465Z",
61+
"time": 259
6262
},
6363
{
64-
"_id": "d0c7ee9e7178f2b7bb6ab84e899effed",
64+
"_id": "a32045c85c74ebb299fe6584f15ea321",
6565
"_order": 0,
6666
"cache": {},
6767
"request": {
@@ -78,30 +78,24 @@
7878
"httpVersion": "HTTP/1.1",
7979
"method": "DELETE",
8080
"queryString": [],
81-
"url": "https://api.datadoghq.com/api/v2/security_monitoring/rules/rfn-h2v-udr"
81+
"url": "https://api.datadoghq.com/api/v2/security_monitoring/rules/lfr-zxg-fyc"
8282
},
8383
"response": {
84-
"bodySize": 36,
84+
"bodySize": 0,
8585
"content": {
86-
"mimeType": "application/json",
87-
"size": 36,
88-
"text": "{\"status\":\"404\",\"title\":\"Not Found\"}"
86+
"mimeType": "text/plain",
87+
"size": 0
8988
},
9089
"cookies": [],
91-
"headers": [
92-
{
93-
"name": "content-type",
94-
"value": "application/json"
95-
}
96-
],
97-
"headersSize": 654,
90+
"headers": [],
91+
"headersSize": 601,
9892
"httpVersion": "HTTP/1.1",
9993
"redirectURL": "",
100-
"status": 404,
101-
"statusText": "Not Found"
94+
"status": 204,
95+
"statusText": "No Content"
10296
},
103-
"startedDateTime": "2025-02-06T16:50:40.475Z",
104-
"time": 127
97+
"startedDateTime": "2025-04-09T15:02:05.734Z",
98+
"time": 194
10599
}
106100
],
107101
"pages": [],

examples/v2/security-monitoring/CreateSecurityMonitoringRule_1965169892.ts

+6
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ const params: v2.SecurityMonitoringApiCreateSecurityMonitoringRuleRequest = {
3333
duration: 900,
3434
},
3535
},
36+
{
37+
type: "user_behavior",
38+
options: {
39+
userBehaviorName: "behavior",
40+
},
41+
},
3642
],
3743
},
3844
],

features/v2/security_monitoring.feature

+1-1
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ Feature: Security Monitoring
203203
@skip-validation @team:DataDog/k9-cloud-security-platform
204204
Scenario: Create a detection rule with type 'application_security 'returns "OK" response
205205
Given new "CreateSecurityMonitoringRule" request
206-
And body with value {"type":"application_security","name":"{{unique}}_appsec_rule","queries":[{"query":"@appsec.security_activity:business_logic.users.login.failure","aggregation":"count","groupByFields":["service","@http.client_ip"],"distinctFields":[]}],"filters":[],"cases":[{"name":"","status":"info","notifications":[],"condition":"a > 100000","actions":[{"type":"block_ip","options":{"duration":900}}]}],"options":{"keepAlive":3600,"maxSignalDuration":86400,"evaluationWindow":900,"detectionMethod":"threshold"},"isEnabled":true,"message":"Test rule","tags":[],"groupSignalsBy":["service"]}
206+
And body with value {"type":"application_security","name":"{{unique}}_appsec_rule","queries":[{"query":"@appsec.security_activity:business_logic.users.login.failure","aggregation":"count","groupByFields":["service","@http.client_ip"],"distinctFields":[]}],"filters":[],"cases":[{"name":"","status":"info","notifications":[],"condition":"a > 100000","actions":[{"type":"block_ip","options":{"duration":900}}, {"type":"user_behavior","options":{"userBehaviorName":"behavior"}}]}],"options":{"keepAlive":3600,"maxSignalDuration":86400,"evaluationWindow":900,"detectionMethod":"threshold"},"isEnabled":true,"message":"Test rule","tags":[],"groupSignalsBy":["service"]}
207207
When the request is sent
208208
Then the response status is 200 OK
209209
And the response "name" is equal to "{{ unique }}_appsec_rule"

packages/datadog-api-client-v2/models/ObjectSerializer.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -2361,7 +2361,11 @@ const enumsMap: { [key: string]: any[] } = {
23612361
SecurityFilterFilteredDataType: ["logs"],
23622362
SecurityFilterType: ["security_filters"],
23632363
SecurityMonitoringFilterAction: ["require", "suppress"],
2364-
SecurityMonitoringRuleCaseActionType: ["block_ip", "block_user"],
2364+
SecurityMonitoringRuleCaseActionType: [
2365+
"block_ip",
2366+
"block_user",
2367+
"user_behavior",
2368+
],
23652369
SecurityMonitoringRuleDetectionMethod: [
23662370
"threshold",
23672371
"new_value",

packages/datadog-api-client-v2/models/SecurityMonitoringRuleCaseActionOptions.ts

+8
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ export class SecurityMonitoringRuleCaseActionOptions {
1414
* Duration of the action in seconds. 0 indicates no expiration.
1515
*/
1616
"duration"?: number;
17+
/**
18+
* Used with the case action of type 'user_behavior'. The value specified in this field is applied as a risk tag to all users affected by the rule.
19+
*/
20+
"userBehaviorName"?: string;
1721

1822
/**
1923
* A container for additional, undeclared properties.
@@ -36,6 +40,10 @@ export class SecurityMonitoringRuleCaseActionOptions {
3640
type: "number",
3741
format: "int64",
3842
},
43+
userBehaviorName: {
44+
baseName: "userBehaviorName",
45+
type: "string",
46+
},
3947
additionalProperties: {
4048
baseName: "additionalProperties",
4149
type: "any",

packages/datadog-api-client-v2/models/SecurityMonitoringRuleCaseActionType.ts

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import { UnparsedObject } from "../../datadog-api-client-common/util";
1313
export type SecurityMonitoringRuleCaseActionType =
1414
| typeof BLOCK_IP
1515
| typeof BLOCK_USER
16+
| typeof USER_BEHAVIOR
1617
| UnparsedObject;
1718
export const BLOCK_IP = "block_ip";
1819
export const BLOCK_USER = "block_user";
20+
export const USER_BEHAVIOR = "user_behavior";

0 commit comments

Comments
 (0)