Skip to content

Commit a080d6e

Browse files
api-clients-generation-pipeline[bot]ci.datadog-api-spec
andauthored
Security Monitoring - Validation Endpoint for Suppressions (#2642)
Co-authored-by: ci.datadog-api-spec <packages@datadoghq.com>
1 parent 82f6df5 commit a080d6e

File tree

10 files changed

+192
-0
lines changed

10 files changed

+192
-0
lines changed

.generator/schemas/v2/openapi.yaml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64816,6 +64816,38 @@ paths:
6481664816
summary: Get suppressions affecting a specific rule
6481764817
tags:
6481864818
- Security Monitoring
64819+
/api/v2/security_monitoring/configuration/suppressions/validation:
64820+
post:
64821+
description: Validate a suppression rule.
64822+
operationId: ValidateSecurityMonitoringSuppression
64823+
requestBody:
64824+
content:
64825+
application/json:
64826+
schema:
64827+
$ref: '#/components/schemas/SecurityMonitoringSuppressionUpdateRequest'
64828+
required: true
64829+
responses:
64830+
'204':
64831+
description: OK
64832+
'400':
64833+
$ref: '#/components/responses/BadRequestResponse'
64834+
'403':
64835+
$ref: '#/components/responses/NotAuthorizedResponse'
64836+
'429':
64837+
$ref: '#/components/responses/TooManyRequestsResponse'
64838+
security:
64839+
- apiKeyAuth: []
64840+
appKeyAuth: []
64841+
- AuthZ:
64842+
- security_monitoring_suppressions_write
64843+
summary: Validate a suppression rule
64844+
tags:
64845+
- Security Monitoring
64846+
x-codegen-request-body-name: body
64847+
x-permission:
64848+
operator: OR
64849+
permissions:
64850+
- security_monitoring_suppressions_write
6481964851
/api/v2/security_monitoring/configuration/suppressions/{suppression_id}:
6482064852
delete:
6482164853
description: Delete a specific suppression rule.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2025-09-01T21:36:42.334Z

cassettes/features/v2/security_monitoring/Validate-a-suppression-rule-returns-Bad-Request-response.yml

Lines changed: 26 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2025-09-01T21:36:20.593Z

cassettes/features/v2/security_monitoring/Validate-a-suppression-rule-returns-OK-response.yml

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Validate a suppression rule returns "OK" response
2+
3+
require "datadog_api_client"
4+
api_instance = DatadogAPIClient::V2::SecurityMonitoringAPI.new
5+
6+
body = DatadogAPIClient::V2::SecurityMonitoringSuppressionUpdateRequest.new({
7+
data: DatadogAPIClient::V2::SecurityMonitoringSuppressionUpdateData.new({
8+
attributes: DatadogAPIClient::V2::SecurityMonitoringSuppressionUpdateAttributes.new({
9+
data_exclusion_query: "source:cloudtrail account_id:12345",
10+
description: "This rule suppresses low-severity signals in staging environments.",
11+
enabled: true,
12+
name: "Custom suppression",
13+
rule_query: "type:log_detection source:cloudtrail",
14+
}),
15+
type: DatadogAPIClient::V2::SecurityMonitoringSuppressionType::SUPPRESSIONS,
16+
}),
17+
})
18+
api_instance.validate_security_monitoring_suppression(body)

features/scenarios_model_mapping.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1360,6 +1360,9 @@
13601360
"v2.GetSuppressionsAffectingRule" => {
13611361
"rule_id" => "String",
13621362
},
1363+
"v2.ValidateSecurityMonitoringSuppression" => {
1364+
"body" => "SecurityMonitoringSuppressionUpdateRequest",
1365+
},
13631366
"v2.DeleteSecurityMonitoringSuppression" => {
13641367
"suppression_id" => "String",
13651368
},

features/v2/security_monitoring.feature

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1389,3 +1389,17 @@ Feature: Security Monitoring
13891389
And body with value {"cases":[{"name":"","status":"info","notifications":[],"condition":"a > 0"}],"hasExtendedTitle":true,"isEnabled":true,"message":"My security monitoring rule","name":"My security monitoring rule","options":{"evaluationWindow":1800,"keepAlive":1800,"maxSignalDuration":1800,"detectionMethod":"threshold"},"queries":[{"query":"source:source_here","groupByFields":["@userIdentity.assumed_role"],"distinctFields":[],"aggregation":"count","name":""}],"tags":["env:prod","team:security"],"type":"log_detection"}
13901390
When the request is sent
13911391
Then the response status is 204 OK
1392+
1393+
@team:DataDog/k9-cloud-security-platform
1394+
Scenario: Validate a suppression rule returns "Bad Request" response
1395+
Given new "ValidateSecurityMonitoringSuppression" request
1396+
And body with value {"data": {"attributes": {"data_exclusion_query": "not enough attributes"}, "type": "suppressions"}}
1397+
When the request is sent
1398+
Then the response status is 400 Bad Request
1399+
1400+
@team:DataDog/k9-cloud-security-platform
1401+
Scenario: Validate a suppression rule returns "OK" response
1402+
Given new "ValidateSecurityMonitoringSuppression" request
1403+
And body with value {"data": {"attributes": {"data_exclusion_query": "source:cloudtrail account_id:12345", "description": "This rule suppresses low-severity signals in staging environments.", "enabled": true, "name": "Custom suppression", "rule_query": "type:log_detection source:cloudtrail"}, "type": "suppressions"}}
1404+
When the request is sent
1405+
Then the response status is 204 OK

features/v2/undo.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3024,6 +3024,12 @@
30243024
"type": "safe"
30253025
}
30263026
},
3027+
"ValidateSecurityMonitoringSuppression": {
3028+
"tag": "Security Monitoring",
3029+
"undo": {
3030+
"type": "idempotent"
3031+
}
3032+
},
30273033
"DeleteSecurityMonitoringSuppression": {
30283034
"tag": "Security Monitoring",
30293035
"undo": {

lib/datadog_api_client/v2/api/security_monitoring_api.rb

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4468,5 +4468,72 @@ def validate_security_monitoring_rule_with_http_info(body, opts = {})
44684468
end
44694469
return data, status_code, headers
44704470
end
4471+
4472+
# Validate a suppression rule.
4473+
#
4474+
# @see #validate_security_monitoring_suppression_with_http_info
4475+
def validate_security_monitoring_suppression(body, opts = {})
4476+
validate_security_monitoring_suppression_with_http_info(body, opts)
4477+
nil
4478+
end
4479+
4480+
# Validate a suppression rule.
4481+
#
4482+
# Validate a suppression rule.
4483+
#
4484+
# @param body [SecurityMonitoringSuppressionUpdateRequest]
4485+
# @param opts [Hash] the optional parameters
4486+
# @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
4487+
def validate_security_monitoring_suppression_with_http_info(body, opts = {})
4488+
4489+
if @api_client.config.debugging
4490+
@api_client.config.logger.debug 'Calling API: SecurityMonitoringAPI.validate_security_monitoring_suppression ...'
4491+
end
4492+
# verify the required parameter 'body' is set
4493+
if @api_client.config.client_side_validation && body.nil?
4494+
fail ArgumentError, "Missing the required parameter 'body' when calling SecurityMonitoringAPI.validate_security_monitoring_suppression"
4495+
end
4496+
# resource path
4497+
local_var_path = '/api/v2/security_monitoring/configuration/suppressions/validation'
4498+
4499+
# query parameters
4500+
query_params = opts[:query_params] || {}
4501+
4502+
# header parameters
4503+
header_params = opts[:header_params] || {}
4504+
# HTTP header 'Accept' (if needed)
4505+
header_params['Accept'] = @api_client.select_header_accept(['*/*'])
4506+
# HTTP header 'Content-Type'
4507+
header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
4508+
4509+
# form parameters
4510+
form_params = opts[:form_params] || {}
4511+
4512+
# http body (model)
4513+
post_body = opts[:debug_body] || @api_client.object_to_http_body(body)
4514+
4515+
# return_type
4516+
return_type = opts[:debug_return_type]
4517+
4518+
# auth_names
4519+
auth_names = opts[:debug_auth_names] || [:apiKeyAuth, :appKeyAuth, :AuthZ]
4520+
4521+
new_options = opts.merge(
4522+
:operation => :validate_security_monitoring_suppression,
4523+
:header_params => header_params,
4524+
:query_params => query_params,
4525+
:form_params => form_params,
4526+
:body => post_body,
4527+
:auth_names => auth_names,
4528+
:return_type => return_type,
4529+
:api_version => "V2"
4530+
)
4531+
4532+
data, status_code, headers = @api_client.call_api(Net::HTTP::Post, local_var_path, new_options)
4533+
if @api_client.config.debugging
4534+
@api_client.config.logger.debug "API called: SecurityMonitoringAPI#validate_security_monitoring_suppression\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
4535+
end
4536+
return data, status_code, headers
4537+
end
44714538
end
44724539
end

0 commit comments

Comments
 (0)