Skip to content

Commit 52d1dfe

Browse files
author
ci.datadog-api-spec
committed
Regenerate client from commit 216c60c of spec repo
1 parent 5453d0b commit 52d1dfe

File tree

7 files changed

+406
-5
lines changed

7 files changed

+406
-5
lines changed

.generator/schemas/v2/openapi.yaml

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63779,6 +63779,65 @@ paths:
6377963779
tags:
6378063780
- Security Monitoring
6378163781
x-codegen-request-body-name: body
63782+
/api/v2/security_monitoring/configuration/suppressions/rules:
63783+
post:
63784+
description: Get the list of suppressions that would affect a rule.
63785+
operationId: GetSuppressionsAffectingFutureRule
63786+
requestBody:
63787+
content:
63788+
application/json:
63789+
schema:
63790+
$ref: '#/components/schemas/SecurityMonitoringRuleCreatePayload'
63791+
required: true
63792+
responses:
63793+
'200':
63794+
content:
63795+
application/json:
63796+
schema:
63797+
$ref: '#/components/schemas/SecurityMonitoringSuppressionsResponse'
63798+
description: OK
63799+
'400':
63800+
$ref: '#/components/responses/BadRequestResponse'
63801+
'403':
63802+
$ref: '#/components/responses/NotAuthorizedResponse'
63803+
'429':
63804+
$ref: '#/components/responses/TooManyRequestsResponse'
63805+
security:
63806+
- apiKeyAuth: []
63807+
appKeyAuth: []
63808+
- AuthZ:
63809+
- security_monitoring_suppressions_read
63810+
summary: Get suppressions affecting future rule
63811+
tags:
63812+
- Security Monitoring
63813+
/api/v2/security_monitoring/configuration/suppressions/rules/{rule_id}:
63814+
get:
63815+
description: Get the list of suppressions that affect a specific existing rule
63816+
by its ID.
63817+
operationId: GetSuppressionsAffectingRule
63818+
parameters:
63819+
- $ref: '#/components/parameters/SecurityMonitoringRuleID'
63820+
responses:
63821+
'200':
63822+
content:
63823+
application/json:
63824+
schema:
63825+
$ref: '#/components/schemas/SecurityMonitoringSuppressionsResponse'
63826+
description: OK
63827+
'403':
63828+
$ref: '#/components/responses/NotAuthorizedResponse'
63829+
'404':
63830+
$ref: '#/components/responses/NotFoundResponse'
63831+
'429':
63832+
$ref: '#/components/responses/TooManyRequestsResponse'
63833+
security:
63834+
- apiKeyAuth: []
63835+
appKeyAuth: []
63836+
- AuthZ:
63837+
- security_monitoring_suppressions_read
63838+
summary: Get suppressions affecting a specific rule
63839+
tags:
63840+
- Security Monitoring
6378263841
/api/v2/security_monitoring/configuration/suppressions/{suppression_id}:
6378363842
delete:
6378463843
description: Delete a specific suppression rule.
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
"""
2+
Get suppressions affecting future rule returns "OK" response
3+
"""
4+
5+
from datadog_api_client import ApiClient, Configuration
6+
from datadog_api_client.v2.api.security_monitoring_api import SecurityMonitoringApi
7+
from datadog_api_client.v2.model.calculated_field import CalculatedField
8+
from datadog_api_client.v2.model.cloud_configuration_compliance_rule_options import (
9+
CloudConfigurationComplianceRuleOptions,
10+
)
11+
from datadog_api_client.v2.model.cloud_configuration_rego_rule import CloudConfigurationRegoRule
12+
from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter
13+
from datadog_api_client.v2.model.security_monitoring_filter_action import SecurityMonitoringFilterAction
14+
from datadog_api_client.v2.model.security_monitoring_reference_table import SecurityMonitoringReferenceTable
15+
from datadog_api_client.v2.model.security_monitoring_rule_detection_method import SecurityMonitoringRuleDetectionMethod
16+
from datadog_api_client.v2.model.security_monitoring_rule_evaluation_window import (
17+
SecurityMonitoringRuleEvaluationWindow,
18+
)
19+
from datadog_api_client.v2.model.security_monitoring_rule_hardcoded_evaluator_type import (
20+
SecurityMonitoringRuleHardcodedEvaluatorType,
21+
)
22+
from datadog_api_client.v2.model.security_monitoring_rule_impossible_travel_options import (
23+
SecurityMonitoringRuleImpossibleTravelOptions,
24+
)
25+
from datadog_api_client.v2.model.security_monitoring_rule_keep_alive import SecurityMonitoringRuleKeepAlive
26+
from datadog_api_client.v2.model.security_monitoring_rule_max_signal_duration import (
27+
SecurityMonitoringRuleMaxSignalDuration,
28+
)
29+
from datadog_api_client.v2.model.security_monitoring_rule_new_value_options import SecurityMonitoringRuleNewValueOptions
30+
from datadog_api_client.v2.model.security_monitoring_rule_new_value_options_forget_after import (
31+
SecurityMonitoringRuleNewValueOptionsForgetAfter,
32+
)
33+
from datadog_api_client.v2.model.security_monitoring_rule_new_value_options_learning_duration import (
34+
SecurityMonitoringRuleNewValueOptionsLearningDuration,
35+
)
36+
from datadog_api_client.v2.model.security_monitoring_rule_new_value_options_learning_method import (
37+
SecurityMonitoringRuleNewValueOptionsLearningMethod,
38+
)
39+
from datadog_api_client.v2.model.security_monitoring_rule_new_value_options_learning_threshold import (
40+
SecurityMonitoringRuleNewValueOptionsLearningThreshold,
41+
)
42+
from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions
43+
from datadog_api_client.v2.model.security_monitoring_rule_severity import SecurityMonitoringRuleSeverity
44+
from datadog_api_client.v2.model.security_monitoring_rule_third_party_options import (
45+
SecurityMonitoringRuleThirdPartyOptions,
46+
)
47+
from datadog_api_client.v2.model.security_monitoring_rule_type_create import SecurityMonitoringRuleTypeCreate
48+
from datadog_api_client.v2.model.security_monitoring_scheduling_options import SecurityMonitoringSchedulingOptions
49+
from datadog_api_client.v2.model.security_monitoring_standard_rule_create_payload import (
50+
SecurityMonitoringStandardRuleCreatePayload,
51+
)
52+
from datadog_api_client.v2.model.security_monitoring_third_party_root_query import SecurityMonitoringThirdPartyRootQuery
53+
54+
body = SecurityMonitoringStandardRuleCreatePayload(
55+
calculated_fields=[
56+
CalculatedField(
57+
expression="@request_end_timestamp - @request_start_timestamp",
58+
name="response_time",
59+
),
60+
],
61+
cases=[],
62+
filters=[
63+
SecurityMonitoringFilter(
64+
action=SecurityMonitoringFilterAction.REQUIRE,
65+
),
66+
],
67+
group_signals_by=[
68+
"service",
69+
],
70+
has_extended_title=True,
71+
is_enabled=True,
72+
message="",
73+
name="My security monitoring rule.",
74+
options=SecurityMonitoringRuleOptions(
75+
compliance_rule_options=CloudConfigurationComplianceRuleOptions(
76+
rego_rule=CloudConfigurationRegoRule(
77+
policy='package datadog\n\nimport data.datadog.output as dd_output\nimport future.keywords.contains\nimport future.keywords.if\nimport future.keywords.in\n\neval(resource) = "skip" if {\n # Logic that evaluates to true if the resource should be skipped\n true\n} else = "pass" {\n # Logic that evaluates to true if the resource is compliant\n true\n} else = "fail" {\n # Logic that evaluates to true if the resource is not compliant\n true\n}\n\n# This part remains unchanged for all rules\nresults contains result if {\n some resource in input.resources[input.main_resource_type]\n result := dd_output.format(resource, eval(resource))\n}\n',
78+
resource_types=[
79+
"gcp_iam_service_account",
80+
"gcp_iam_policy",
81+
],
82+
),
83+
resource_type="aws_acm",
84+
),
85+
decrease_criticality_based_on_env=False,
86+
detection_method=SecurityMonitoringRuleDetectionMethod.THRESHOLD,
87+
evaluation_window=SecurityMonitoringRuleEvaluationWindow.ZERO_MINUTES,
88+
hardcoded_evaluator_type=SecurityMonitoringRuleHardcodedEvaluatorType.LOG4SHELL,
89+
impossible_travel_options=SecurityMonitoringRuleImpossibleTravelOptions(
90+
baseline_user_locations=True,
91+
),
92+
keep_alive=SecurityMonitoringRuleKeepAlive.ZERO_MINUTES,
93+
max_signal_duration=SecurityMonitoringRuleMaxSignalDuration.ZERO_MINUTES,
94+
new_value_options=SecurityMonitoringRuleNewValueOptions(
95+
forget_after=SecurityMonitoringRuleNewValueOptionsForgetAfter.ONE_DAY,
96+
learning_duration=SecurityMonitoringRuleNewValueOptionsLearningDuration.ZERO_DAYS,
97+
learning_method=SecurityMonitoringRuleNewValueOptionsLearningMethod.DURATION,
98+
learning_threshold=SecurityMonitoringRuleNewValueOptionsLearningThreshold.ZERO_OCCURRENCES,
99+
),
100+
third_party_rule_options=SecurityMonitoringRuleThirdPartyOptions(
101+
default_notifications=[],
102+
default_status=SecurityMonitoringRuleSeverity.CRITICAL,
103+
root_queries=[
104+
SecurityMonitoringThirdPartyRootQuery(
105+
group_by_fields=[],
106+
query="source:cloudtrail",
107+
),
108+
],
109+
),
110+
),
111+
queries=[],
112+
reference_tables=[
113+
SecurityMonitoringReferenceTable(),
114+
],
115+
scheduling_options=SecurityMonitoringSchedulingOptions(
116+
rrule="FREQ=HOURLY;INTERVAL=1;",
117+
start="2025-07-14T12:00:00",
118+
timezone="America/New_York",
119+
),
120+
tags=[
121+
"env:prod",
122+
"team:security",
123+
],
124+
third_party_cases=[],
125+
type=SecurityMonitoringRuleTypeCreate.API_SECURITY,
126+
)
127+
128+
configuration = Configuration()
129+
with ApiClient(configuration) as api_client:
130+
api_instance = SecurityMonitoringApi(api_client)
131+
response = api_instance.get_suppressions_affecting_future_rule(body=body)
132+
133+
print(response)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
"""
2+
Get suppressions affecting a specific rule returns "OK" response
3+
"""
4+
5+
from datadog_api_client import ApiClient, Configuration
6+
from datadog_api_client.v2.api.security_monitoring_api import SecurityMonitoringApi
7+
8+
configuration = Configuration()
9+
with ApiClient(configuration) as api_client:
10+
api_instance = SecurityMonitoringApi(api_client)
11+
response = api_instance.get_suppressions_affecting_rule(
12+
rule_id="rule_id",
13+
)
14+
15+
print(response)

src/datadog_api_client/v2/api/security_monitoring_api.py

Lines changed: 86 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,6 @@
5959
from datadog_api_client.v2.model.security_monitoring_suppression_create_request import (
6060
SecurityMonitoringSuppressionCreateRequest,
6161
)
62-
from datadog_api_client.v2.model.security_monitoring_suppression_update_request import (
63-
SecurityMonitoringSuppressionUpdateRequest,
64-
)
65-
from datadog_api_client.v2.model.security_monitoring_list_rules_response import SecurityMonitoringListRulesResponse
66-
from datadog_api_client.v2.model.security_monitoring_rule_response import SecurityMonitoringRuleResponse
6762
from datadog_api_client.v2.model.security_monitoring_rule_create_payload import SecurityMonitoringRuleCreatePayload
6863
from datadog_api_client.v2.model.security_monitoring_standard_rule_create_payload import (
6964
SecurityMonitoringStandardRuleCreatePayload,
@@ -72,6 +67,11 @@
7267
SecurityMonitoringSignalRuleCreatePayload,
7368
)
7469
from datadog_api_client.v2.model.cloud_configuration_rule_create_payload import CloudConfigurationRuleCreatePayload
70+
from datadog_api_client.v2.model.security_monitoring_suppression_update_request import (
71+
SecurityMonitoringSuppressionUpdateRequest,
72+
)
73+
from datadog_api_client.v2.model.security_monitoring_list_rules_response import SecurityMonitoringListRulesResponse
74+
from datadog_api_client.v2.model.security_monitoring_rule_response import SecurityMonitoringRuleResponse
7575
from datadog_api_client.v2.model.security_monitoring_rule_convert_response import SecurityMonitoringRuleConvertResponse
7676
from datadog_api_client.v2.model.security_monitoring_rule_convert_payload import SecurityMonitoringRuleConvertPayload
7777
from datadog_api_client.v2.model.security_monitoring_standard_rule_payload import SecurityMonitoringStandardRulePayload
@@ -880,6 +880,49 @@ def __init__(self, api_client=None):
880880
api_client=api_client,
881881
)
882882

883+
self._get_suppressions_affecting_future_rule_endpoint = _Endpoint(
884+
settings={
885+
"response_type": (SecurityMonitoringSuppressionsResponse,),
886+
"auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"],
887+
"endpoint_path": "/api/v2/security_monitoring/configuration/suppressions/rules",
888+
"operation_id": "get_suppressions_affecting_future_rule",
889+
"http_method": "POST",
890+
"version": "v2",
891+
},
892+
params_map={
893+
"body": {
894+
"required": True,
895+
"openapi_types": (SecurityMonitoringRuleCreatePayload,),
896+
"location": "body",
897+
},
898+
},
899+
headers_map={"accept": ["application/json"], "content_type": ["application/json"]},
900+
api_client=api_client,
901+
)
902+
903+
self._get_suppressions_affecting_rule_endpoint = _Endpoint(
904+
settings={
905+
"response_type": (SecurityMonitoringSuppressionsResponse,),
906+
"auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"],
907+
"endpoint_path": "/api/v2/security_monitoring/configuration/suppressions/rules/{rule_id}",
908+
"operation_id": "get_suppressions_affecting_rule",
909+
"http_method": "GET",
910+
"version": "v2",
911+
},
912+
params_map={
913+
"rule_id": {
914+
"required": True,
915+
"openapi_types": (str,),
916+
"attribute": "rule_id",
917+
"location": "path",
918+
},
919+
},
920+
headers_map={
921+
"accept": ["application/json"],
922+
},
923+
api_client=api_client,
924+
)
925+
883926
self._get_vulnerability_notification_rule_endpoint = _Endpoint(
884927
settings={
885928
"response_type": (NotificationRuleResponse,),
@@ -2504,6 +2547,44 @@ def get_signal_notification_rules(
25042547
kwargs: Dict[str, Any] = {}
25052548
return self._get_signal_notification_rules_endpoint.call_with_http_info(**kwargs)
25062549

2550+
def get_suppressions_affecting_future_rule(
2551+
self,
2552+
body: Union[
2553+
SecurityMonitoringRuleCreatePayload,
2554+
SecurityMonitoringStandardRuleCreatePayload,
2555+
SecurityMonitoringSignalRuleCreatePayload,
2556+
CloudConfigurationRuleCreatePayload,
2557+
],
2558+
) -> SecurityMonitoringSuppressionsResponse:
2559+
"""Get suppressions affecting future rule.
2560+
2561+
Get the list of suppressions that would affect a rule.
2562+
2563+
:type body: SecurityMonitoringRuleCreatePayload
2564+
:rtype: SecurityMonitoringSuppressionsResponse
2565+
"""
2566+
kwargs: Dict[str, Any] = {}
2567+
kwargs["body"] = body
2568+
2569+
return self._get_suppressions_affecting_future_rule_endpoint.call_with_http_info(**kwargs)
2570+
2571+
def get_suppressions_affecting_rule(
2572+
self,
2573+
rule_id: str,
2574+
) -> SecurityMonitoringSuppressionsResponse:
2575+
"""Get suppressions affecting a specific rule.
2576+
2577+
Get the list of suppressions that affect a specific existing rule by its ID.
2578+
2579+
:param rule_id: The ID of the rule.
2580+
:type rule_id: str
2581+
:rtype: SecurityMonitoringSuppressionsResponse
2582+
"""
2583+
kwargs: Dict[str, Any] = {}
2584+
kwargs["rule_id"] = rule_id
2585+
2586+
return self._get_suppressions_affecting_rule_endpoint.call_with_http_info(**kwargs)
2587+
25072588
def get_vulnerability_notification_rule(
25082589
self,
25092590
id: str,

tests/v2/features/security_monitoring.feature

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -822,6 +822,34 @@ Feature: Security Monitoring
822822
And the response "data.attributes.count" is equal to 1
823823
And the response "data.attributes.data[1].rule.name" has the same value as "security_rule.name"
824824

825+
@generated @skip @team:DataDog/k9-cloud-security-platform
826+
Scenario: Get suppressions affecting a specific rule returns "Not Found" response
827+
Given new "GetSuppressionsAffectingRule" request
828+
And request contains "rule_id" parameter from "REPLACE.ME"
829+
When the request is sent
830+
Then the response status is 404 Not Found
831+
832+
@generated @skip @team:DataDog/k9-cloud-security-platform
833+
Scenario: Get suppressions affecting a specific rule returns "OK" response
834+
Given new "GetSuppressionsAffectingRule" request
835+
And request contains "rule_id" parameter from "REPLACE.ME"
836+
When the request is sent
837+
Then the response status is 200 OK
838+
839+
@skip @team:DataDog/k9-cloud-security-platform
840+
Scenario: Get suppressions affecting future rule returns "Bad Request" response
841+
Given new "GetSuppressionsAffectingFutureRule" request
842+
And body from file "security_monitoring_future_rule_surpression_payload.json"
843+
When the request is sent
844+
Then the response status is 400 Bad Request
845+
846+
@skip @team:DataDog/k9-cloud-security-platform
847+
Scenario: Get suppressions affecting future rule returns "OK" response
848+
Given new "GetSuppressionsAffectingFutureRule" request
849+
And body from file "security_monitoring_future_rule_surpression_payload.json"
850+
When the request is sent
851+
Then the response status is 200 OK
852+
825853
@team:DataDog/cloud-security-posture-management
826854
Scenario: Get the list of signal-based notification rules returns "The list of notification rules." response
827855
Given there is a valid "valid_signal_notification_rule" in the system

0 commit comments

Comments
 (0)