|
| 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) |
0 commit comments