Skip to content

Commit 068483c

Browse files
api-clients-generation-pipeline[bot]ci.datadog-api-spec
andauthored
Document bulk delete security monitoring rules endpoint (#4009)
Co-authored-by: ci.datadog-api-spec <packages@datadoghq.com>
1 parent 5031419 commit 068483c

12 files changed

Lines changed: 516 additions & 0 deletions

.generator/schemas/v2/openapi.yaml

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64151,6 +64151,63 @@ components:
6415164151
- TWO_DAYS
6415264152
- ONE_WEEK
6415364153
- TWO_WEEKS
64154+
SecurityMonitoringRuleBulkDeleteAttributes:
64155+
description: Attributes for bulk deleting security monitoring rules.
64156+
properties:
64157+
ruleIds:
64158+
description: List of rule IDs to delete.
64159+
example:
64160+
- abc-000-u7q
64161+
- abc-000-7dd
64162+
items:
64163+
description: A rule ID to delete.
64164+
type: string
64165+
minItems: 1
64166+
type: array
64167+
required:
64168+
- ruleIds
64169+
type: object
64170+
SecurityMonitoringRuleBulkDeleteData:
64171+
description: Data for bulk deleting security monitoring rules.
64172+
properties:
64173+
attributes:
64174+
$ref: "#/components/schemas/SecurityMonitoringRuleBulkDeleteAttributes"
64175+
type:
64176+
$ref: "#/components/schemas/SecurityMonitoringRuleBulkDeleteRequestDataType"
64177+
required:
64178+
- attributes
64179+
- type
64180+
type: object
64181+
SecurityMonitoringRuleBulkDeletePayload:
64182+
description: Payload for bulk deleting security monitoring rules.
64183+
properties:
64184+
data:
64185+
$ref: "#/components/schemas/SecurityMonitoringRuleBulkDeleteData"
64186+
required:
64187+
- data
64188+
type: object
64189+
SecurityMonitoringRuleBulkDeleteRequestDataType:
64190+
description: The resource type for a bulk delete request.
64191+
enum:
64192+
- bulk_delete_rules
64193+
example: bulk_delete_rules
64194+
type: string
64195+
x-enum-varnames:
64196+
- BULK_DELETE_RULES
64197+
SecurityMonitoringRuleBulkDeleteResponse:
64198+
description: Response for bulk deleting security monitoring rules.
64199+
properties:
64200+
deletedRules:
64201+
description: List of successfully deleted rule IDs.
64202+
items:
64203+
type: string
64204+
type: array
64205+
failedRules:
64206+
description: List of rule IDs that could not be deleted.
64207+
items:
64208+
type: string
64209+
type: array
64210+
type: object
6415464211
SecurityMonitoringRuleBulkExportAttributes:
6415564212
description: Attributes for bulk exporting security monitoring rules.
6415664213
properties:
@@ -123130,6 +123187,53 @@ paths:
123130123187
operator: OR
123131123188
permissions:
123132123189
- security_monitoring_rules_write
123190+
/api/v2/security_monitoring/rules/bulk_delete:
123191+
delete:
123192+
description: |-
123193+
Delete multiple security monitoring rules in a single request. Default rules cannot be deleted.
123194+
operationId: BulkDeleteSecurityMonitoringRules
123195+
requestBody:
123196+
content:
123197+
application/json:
123198+
examples:
123199+
default:
123200+
value:
123201+
data:
123202+
attributes:
123203+
ruleIds:
123204+
- abc-000-u7q
123205+
- abc-000-7dd
123206+
type: bulk_delete_rules
123207+
schema:
123208+
$ref: "#/components/schemas/SecurityMonitoringRuleBulkDeletePayload"
123209+
required: true
123210+
responses:
123211+
"200":
123212+
content:
123213+
"application/json":
123214+
schema:
123215+
$ref: "#/components/schemas/SecurityMonitoringRuleBulkDeleteResponse"
123216+
description: OK
123217+
"400":
123218+
$ref: "#/components/responses/BadRequestResponse"
123219+
"403":
123220+
$ref: "#/components/responses/NotAuthorizedResponse"
123221+
"404":
123222+
$ref: "#/components/responses/NotFoundResponse"
123223+
"429":
123224+
$ref: "#/components/responses/TooManyRequestsResponse"
123225+
security:
123226+
- apiKeyAuth: []
123227+
appKeyAuth: []
123228+
- AuthZ:
123229+
- security_monitoring_rules_write
123230+
summary: Bulk delete security monitoring rules
123231+
tags: ["Security Monitoring"]
123232+
x-codegen-request-body-name: body
123233+
"x-permission":
123234+
operator: OR
123235+
permissions:
123236+
- security_monitoring_rules_write
123133123237
/api/v2/security_monitoring/rules/bulk_export:
123134123238
post:
123135123239
description: |-

features/v2/security_monitoring.feature

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,27 @@ Feature: Security Monitoring
9999
And the response "data.attributes.insights" has item with field "resource_id" with value "ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y="
100100
And the response "data.attributes.insights" has item with field "resource_id" with value "MmUzMzZkODQ2YTI3NDU0OTk4NDk3NzhkOTY5YjU2Zjh-YWJjZGI1ODI4OTYzNWM3ZmUwZTBlOWRkYTRiMGUyOGQ="
101101

102+
@generated @skip @team:DataDog/k9-cloud-siem
103+
Scenario: Bulk delete security monitoring rules returns "Bad Request" response
104+
Given new "BulkDeleteSecurityMonitoringRules" request
105+
And body with value {"data": {"attributes": {"ruleIds": ["abc-000-u7q", "abc-000-7dd"]}, "type": "bulk_delete_rules"}}
106+
When the request is sent
107+
Then the response status is 400 Bad Request
108+
109+
@generated @skip @team:DataDog/k9-cloud-siem
110+
Scenario: Bulk delete security monitoring rules returns "Not Found" response
111+
Given new "BulkDeleteSecurityMonitoringRules" request
112+
And body with value {"data": {"attributes": {"ruleIds": ["abc-000-u7q", "abc-000-7dd"]}, "type": "bulk_delete_rules"}}
113+
When the request is sent
114+
Then the response status is 404 Not Found
115+
116+
@generated @skip @team:DataDog/k9-cloud-siem
117+
Scenario: Bulk delete security monitoring rules returns "OK" response
118+
Given new "BulkDeleteSecurityMonitoringRules" request
119+
And body with value {"data": {"attributes": {"ruleIds": ["abc-000-u7q", "abc-000-7dd"]}, "type": "bulk_delete_rules"}}
120+
When the request is sent
121+
Then the response status is 200 OK
122+
102123
@skip @team:DataDog/k9-cloud-siem
103124
Scenario: Bulk export security monitoring rules returns "Bad Request" response
104125
Given new "BulkExportSecurityMonitoringRules" request

features/v2/undo.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5675,6 +5675,12 @@
56755675
"type": "unsafe"
56765676
}
56775677
},
5678+
"BulkDeleteSecurityMonitoringRules": {
5679+
"tag": "Security Monitoring",
5680+
"undo": {
5681+
"type": "idempotent"
5682+
}
5683+
},
56785684
"BulkExportSecurityMonitoringRules": {
56795685
"tag": "Security Monitoring",
56805686
"undo": {

private/bdd_runner/src/support/scenarios_model_mapping.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5498,6 +5498,13 @@ export const ScenariosModelMappings: { [key: string]: OperationMapping } = {
54985498
},
54995499
operationResponseType: "SecurityMonitoringRuleResponse",
55005500
},
5501+
"SecurityMonitoringApi.V2.BulkDeleteSecurityMonitoringRules": {
5502+
body: {
5503+
type: "SecurityMonitoringRuleBulkDeletePayload",
5504+
format: "",
5505+
},
5506+
operationResponseType: "SecurityMonitoringRuleBulkDeleteResponse",
5507+
},
55015508
"SecurityMonitoringApi.V2.BulkExportSecurityMonitoringRules": {
55025509
body: {
55035510
type: "SecurityMonitoringRuleBulkExportPayload",

services/security_monitoring/src/v2/SecurityMonitoringApi.ts

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ import { SecurityMonitoringCriticalAssetsResponse } from "./models/SecurityMonit
9090
import { SecurityMonitoringCriticalAssetUpdateRequest } from "./models/SecurityMonitoringCriticalAssetUpdateRequest";
9191
import { SecurityMonitoringListRulesResponse } from "./models/SecurityMonitoringListRulesResponse";
9292
import { SecurityMonitoringPaginatedSuppressionsResponse } from "./models/SecurityMonitoringPaginatedSuppressionsResponse";
93+
import { SecurityMonitoringRuleBulkDeletePayload } from "./models/SecurityMonitoringRuleBulkDeletePayload";
94+
import { SecurityMonitoringRuleBulkDeleteResponse } from "./models/SecurityMonitoringRuleBulkDeleteResponse";
9395
import { SecurityMonitoringRuleBulkExportPayload } from "./models/SecurityMonitoringRuleBulkExportPayload";
9496
import { SecurityMonitoringRuleConvertPayload } from "./models/SecurityMonitoringRuleConvertPayload";
9597
import { SecurityMonitoringRuleConvertResponse } from "./models/SecurityMonitoringRuleConvertResponse";
@@ -312,6 +314,62 @@ export class SecurityMonitoringApiRequestFactory extends BaseAPIRequestFactory {
312314
return requestContext;
313315
}
314316

317+
public async bulkDeleteSecurityMonitoringRules(
318+
body: SecurityMonitoringRuleBulkDeletePayload,
319+
_options?: Configuration,
320+
): Promise<RequestContext> {
321+
const _config = _options || this.configuration;
322+
323+
// verify required parameter 'body' is not null or undefined
324+
if (body === null || body === undefined) {
325+
throw new RequiredError("body", "bulkDeleteSecurityMonitoringRules");
326+
}
327+
328+
// Path Params
329+
const localVarPath = "/api/v2/security_monitoring/rules/bulk_delete";
330+
331+
// Make Request Context
332+
const { server, overrides } = _config.getServerAndOverrides(
333+
"SecurityMonitoringApi.v2.bulkDeleteSecurityMonitoringRules",
334+
SecurityMonitoringApi.operationServers,
335+
);
336+
const requestContext = server.makeRequestContext(
337+
localVarPath,
338+
HttpMethod.DELETE,
339+
overrides,
340+
);
341+
requestContext.setHeaderParam("Accept", "application/json");
342+
requestContext.setHttpConfig(_config.httpConfig);
343+
344+
// Set User-Agent
345+
if (this.userAgent) {
346+
requestContext.setHeaderParam("User-Agent", this.userAgent);
347+
}
348+
349+
// Body Params
350+
const contentType = getPreferredMediaType(["application/json"]);
351+
requestContext.setHeaderParam("Content-Type", contentType);
352+
const serializedBody = stringify(
353+
serialize(
354+
body,
355+
TypingInfo,
356+
"SecurityMonitoringRuleBulkDeletePayload",
357+
"",
358+
),
359+
contentType,
360+
);
361+
requestContext.setBody(serializedBody);
362+
363+
// Apply auth methods
364+
applySecurityAuthentication(_config, requestContext, [
365+
"apiKeyAuth",
366+
"appKeyAuth",
367+
"AuthZ",
368+
]);
369+
370+
return requestContext;
371+
}
372+
315373
public async bulkEditSecurityMonitoringSignals(
316374
body: SecurityMonitoringSignalsBulkUpdateRequest,
317375
_options?: Configuration,
@@ -6527,6 +6585,67 @@ export class SecurityMonitoringApiResponseProcessor {
65276585
);
65286586
}
65296587

6588+
/**
6589+
* Unwraps the actual response sent by the server from the response context and deserializes the response content
6590+
* to the expected objects
6591+
*
6592+
* @params response Response returned by the server for a request to bulkDeleteSecurityMonitoringRules
6593+
* @throws ApiException if the response code was not in [200, 299]
6594+
*/
6595+
public async bulkDeleteSecurityMonitoringRules(
6596+
response: ResponseContext,
6597+
): Promise<SecurityMonitoringRuleBulkDeleteResponse> {
6598+
const contentType = normalizeMediaType(response.headers["content-type"]);
6599+
if (response.httpStatusCode === 200) {
6600+
const body: SecurityMonitoringRuleBulkDeleteResponse = deserialize(
6601+
parse(await response.body.text(), contentType),
6602+
TypingInfo,
6603+
"SecurityMonitoringRuleBulkDeleteResponse",
6604+
) as SecurityMonitoringRuleBulkDeleteResponse;
6605+
return body;
6606+
}
6607+
if (
6608+
response.httpStatusCode === 400 ||
6609+
response.httpStatusCode === 403 ||
6610+
response.httpStatusCode === 404 ||
6611+
response.httpStatusCode === 429
6612+
) {
6613+
const bodyText = parse(await response.body.text(), contentType);
6614+
let body: APIErrorResponse;
6615+
try {
6616+
body = deserialize(
6617+
bodyText,
6618+
TypingInfo,
6619+
"APIErrorResponse",
6620+
) as APIErrorResponse;
6621+
} catch (error) {
6622+
logger.debug(`Got error deserializing error: ${error}`);
6623+
throw new ApiException<APIErrorResponse>(
6624+
response.httpStatusCode,
6625+
bodyText,
6626+
);
6627+
}
6628+
throw new ApiException<APIErrorResponse>(response.httpStatusCode, body);
6629+
}
6630+
6631+
// Work around for missing responses in specification, e.g. for petstore.yaml
6632+
if (response.httpStatusCode >= 200 && response.httpStatusCode <= 299) {
6633+
const body: SecurityMonitoringRuleBulkDeleteResponse = deserialize(
6634+
parse(await response.body.text(), contentType),
6635+
TypingInfo,
6636+
"SecurityMonitoringRuleBulkDeleteResponse",
6637+
"",
6638+
) as SecurityMonitoringRuleBulkDeleteResponse;
6639+
return body;
6640+
}
6641+
6642+
const body = (await response.body.text()) || "";
6643+
throw new ApiException<string>(
6644+
response.httpStatusCode,
6645+
'Unknown API Status Code!\nBody: "' + body + '"',
6646+
);
6647+
}
6648+
65306649
/**
65316650
* Unwraps the actual response sent by the server from the response context and deserializes the response content
65326651
* to the expected objects
@@ -12271,6 +12390,13 @@ export interface SecurityMonitoringApiAttachJiraIssueRequest {
1227112390
body: AttachJiraIssueRequest;
1227212391
}
1227312392

12393+
export interface SecurityMonitoringApiBulkDeleteSecurityMonitoringRulesRequest {
12394+
/**
12395+
* @type SecurityMonitoringRuleBulkDeletePayload
12396+
*/
12397+
body: SecurityMonitoringRuleBulkDeletePayload;
12398+
}
12399+
1227412400
export interface SecurityMonitoringApiBulkEditSecurityMonitoringSignalsRequest {
1227512401
/**
1227612402
* Attributes describing the signal updates.
@@ -13762,6 +13888,30 @@ export class SecurityMonitoringApi {
1376213888
});
1376313889
}
1376413890

13891+
/**
13892+
* Delete multiple security monitoring rules in a single request. Default rules cannot be deleted.
13893+
* @param param The request object
13894+
*/
13895+
public bulkDeleteSecurityMonitoringRules(
13896+
param: SecurityMonitoringApiBulkDeleteSecurityMonitoringRulesRequest,
13897+
options?: Configuration,
13898+
): Promise<SecurityMonitoringRuleBulkDeleteResponse> {
13899+
const requestContextPromise =
13900+
this.requestFactory.bulkDeleteSecurityMonitoringRules(
13901+
param.body,
13902+
options,
13903+
);
13904+
return requestContextPromise.then((requestContext) => {
13905+
return this.configuration.httpApi
13906+
.send(requestContext)
13907+
.then((responseContext) => {
13908+
return this.responseProcessor.bulkDeleteSecurityMonitoringRules(
13909+
responseContext,
13910+
);
13911+
});
13912+
});
13913+
}
13914+
1376513915
/**
1376613916
* Update the triage state or assignee of multiple security signals at once.
1376713917
* The maximum number of signals that can be updated in a single request is 199.

services/security_monitoring/src/v2/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ export {
22
SecurityMonitoringApiActivateContentPackRequest,
33
SecurityMonitoringApiAttachCaseRequest,
44
SecurityMonitoringApiAttachJiraIssueRequest,
5+
SecurityMonitoringApiBulkDeleteSecurityMonitoringRulesRequest,
56
SecurityMonitoringApiBulkEditSecurityMonitoringSignalsRequest,
67
SecurityMonitoringApiBulkEditSecurityMonitoringSignalsAssigneeRequest,
78
SecurityMonitoringApiBulkEditSecurityMonitoringSignalsStateRequest,
@@ -374,6 +375,11 @@ export { SecurityMonitoringRuleAnomalyDetectionOptions } from "./models/Security
374375
export { SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration } from "./models/SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration";
375376
export { SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance } from "./models/SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance";
376377
export { SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration } from "./models/SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration";
378+
export { SecurityMonitoringRuleBulkDeleteAttributes } from "./models/SecurityMonitoringRuleBulkDeleteAttributes";
379+
export { SecurityMonitoringRuleBulkDeleteData } from "./models/SecurityMonitoringRuleBulkDeleteData";
380+
export { SecurityMonitoringRuleBulkDeletePayload } from "./models/SecurityMonitoringRuleBulkDeletePayload";
381+
export { SecurityMonitoringRuleBulkDeleteRequestDataType } from "./models/SecurityMonitoringRuleBulkDeleteRequestDataType";
382+
export { SecurityMonitoringRuleBulkDeleteResponse } from "./models/SecurityMonitoringRuleBulkDeleteResponse";
377383
export { SecurityMonitoringRuleBulkExportAttributes } from "./models/SecurityMonitoringRuleBulkExportAttributes";
378384
export { SecurityMonitoringRuleBulkExportData } from "./models/SecurityMonitoringRuleBulkExportData";
379385
export { SecurityMonitoringRuleBulkExportDataType } from "./models/SecurityMonitoringRuleBulkExportDataType";

0 commit comments

Comments
 (0)