AutomationRuleV2 class
Manages a Security Hub V2 Automation Rule, which automatically updates or takes action on findings that match specified criteria.
> NOTE: Automation rules must be created in the aggregation (home) region. A Security Hub V2 Aggregator (aws.securityhub.AggregatorV2) must exist before creating automation rules.
Example Usage
Basic
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.securityhub.AccountV2("example", {});
const exampleAggregatorV2 = new aws.securityhub.AggregatorV2("example", {regionLinkingMode: "ALL_REGIONS"}, {
dependsOn: [example],
});
const exampleAutomationRuleV2 = new aws.securityhub.AutomationRuleV2("example", {
criteria: {
ocsfFindingCriteriaJson: JSON.stringify({
CompositeFilters: [{
StringFilters: [{
FieldName: "metadata.product.name",
Filter: {
Comparison: "EQUALS",
Value: "GuardDuty",
},
}],
}],
CompositeOperator: "AND",
}),
},
action: {
findingFieldsUpdate: {
severityId: 99,
statusId: 3,
comment: "Low severity GuardDuty finding suppressed",
},
type: "FINDING_FIELDS_UPDATE",
},
ruleName: "suppress-guardduty-low",
description: "Suppress low severity GuardDuty findings",
ruleOrder: 100,
ruleStatus: "ENABLED",
}, {
dependsOn: [exampleAggregatorV2],
});
import pulumi
import json
import pulumi_aws as aws
example = aws.securityhub.AccountV2("example")
example_aggregator_v2 = aws.securityhub.AggregatorV2("example", region_linking_mode="ALL_REGIONS",
opts = pulumi.ResourceOptions(depends_on=[example]))
example_automation_rule_v2 = aws.securityhub.AutomationRuleV2("example",
criteria={
"ocsf_finding_criteria_json": json.dumps({
"CompositeFilters": [{
"StringFilters": [{
"FieldName": "metadata.product.name",
"Filter": {
"Comparison": "EQUALS",
"Value": "GuardDuty",
},
}],
}],
"CompositeOperator": "AND",
}),
},
action={
"finding_fields_update": {
"severity_id": 99,
"status_id": 3,
"comment": "Low severity GuardDuty finding suppressed",
},
"type": "FINDING_FIELDS_UPDATE",
},
rule_name="suppress-guardduty-low",
description="Suppress low severity GuardDuty findings",
rule_order=float(100),
rule_status="ENABLED",
opts = pulumi.ResourceOptions(depends_on=[example_aggregator_v2]))
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.SecurityHub.AccountV2("example");
var exampleAggregatorV2 = new Aws.SecurityHub.AggregatorV2("example", new()
{
RegionLinkingMode = "ALL_REGIONS",
}, new CustomResourceOptions
{
DependsOn =
{
example,
},
});
var exampleAutomationRuleV2 = new Aws.SecurityHub.AutomationRuleV2("example", new()
{
Criteria = new Aws.SecurityHub.Inputs.AutomationRuleV2CriteriaArgs
{
OcsfFindingCriteriaJson = JsonSerializer.Serialize(new Dictionary<string, object?>
{
["CompositeFilters"] = new[]
{
new Dictionary<string, object?>
{
["StringFilters"] = new[]
{
new Dictionary<string, object?>
{
["FieldName"] = "metadata.product.name",
["Filter"] = new Dictionary<string, object?>
{
["Comparison"] = "EQUALS",
["Value"] = "GuardDuty",
},
},
},
},
},
["CompositeOperator"] = "AND",
}),
},
Action = new Aws.SecurityHub.Inputs.AutomationRuleV2ActionArgs
{
FindingFieldsUpdate = new Aws.SecurityHub.Inputs.AutomationRuleV2ActionFindingFieldsUpdateArgs
{
SeverityId = 99,
StatusId = 3,
Comment = "Low severity GuardDuty finding suppressed",
},
Type = "FINDING_FIELDS_UPDATE",
},
RuleName = "suppress-guardduty-low",
Description = "Suppress low severity GuardDuty findings",
RuleOrder = 100,
RuleStatus = "ENABLED",
}, new CustomResourceOptions
{
DependsOn =
{
exampleAggregatorV2,
},
});
});
package main
import (
"encoding/json"
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/securityhub"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
example, err := securityhub.NewAccountV2(ctx, "example", nil)
if err != nil {
return err
}
exampleAggregatorV2, err := securityhub.NewAggregatorV2(ctx, "example", &securityhub.AggregatorV2Args{
RegionLinkingMode: pulumi.String("ALL_REGIONS"),
}, pulumi.DependsOn([]pulumi.Resource{
example,
}))
if err != nil {
return err
}
tmpJSON0, err := json.Marshal(map[string]interface{}{
"CompositeFilters": []map[string][]map[string]interface{}{
map[string][]map[string]interface{}{
"StringFilters": []map[string]interface{}{
map[string]interface{}{
"FieldName": "metadata.product.name",
"Filter": map[string]string{
"Comparison": "EQUALS",
"Value": "GuardDuty",
},
},
},
},
},
"CompositeOperator": "AND",
})
if err != nil {
return err
}
json0 := string(tmpJSON0)
_, err = securityhub.NewAutomationRuleV2(ctx, "example", &securityhub.AutomationRuleV2Args{
Criteria: &securityhub.AutomationRuleV2CriteriaArgs{
OcsfFindingCriteriaJson: pulumi.String(json0),
},
Action: &securityhub.AutomationRuleV2ActionArgs{
FindingFieldsUpdate: &securityhub.AutomationRuleV2ActionFindingFieldsUpdateArgs{
SeverityId: pulumi.Int(99),
StatusId: pulumi.Int(3),
Comment: pulumi.String("Low severity GuardDuty finding suppressed"),
},
Type: pulumi.String("FINDING_FIELDS_UPDATE"),
},
RuleName: pulumi.String("suppress-guardduty-low"),
Description: pulumi.String("Suppress low severity GuardDuty findings"),
RuleOrder: pulumi.Float64(100),
RuleStatus: pulumi.String("ENABLED"),
}, pulumi.DependsOn([]pulumi.Resource{
exampleAggregatorV2,
}))
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
aws = {
source = "pulumi/aws"
}
}
}
resource "aws_securityhub_accountv2" "example" {
}
resource "aws_securityhub_aggregatorv2" "example" {
depends_on = [aws_securityhub_accountv2.example]
region_linking_mode = "ALL_REGIONS"
}
resource "aws_securityhub_automationrulev2" "example" {
depends_on = [aws_securityhub_aggregatorv2.example]
criteria = {
ocsf_finding_criteria_json = jsonencode({
"CompositeFilters" = [{
"StringFilters" = [{
"FieldName" = "metadata.product.name"
"Filter" = {
"Comparison" = "EQUALS"
"Value" = "GuardDuty"
}
}]
}]
"CompositeOperator" = "AND"
})
}
action = {
finding_fields_update = {
severity_id = 99
status_id = 3
comment = "Low severity GuardDuty finding suppressed"
}
type = "FINDING_FIELDS_UPDATE"
}
rule_name = "suppress-guardduty-low"
description = "Suppress low severity GuardDuty findings"
rule_order = 100
rule_status = "ENABLED"
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.securityhub.AccountV2;
import com.pulumi.aws.securityhub.AggregatorV2;
import com.pulumi.aws.securityhub.AggregatorV2Args;
import com.pulumi.aws.securityhub.AutomationRuleV2;
import com.pulumi.aws.securityhub.AutomationRuleV2Args;
import com.pulumi.aws.securityhub.inputs.AutomationRuleV2CriteriaArgs;
import com.pulumi.aws.securityhub.inputs.AutomationRuleV2ActionArgs;
import com.pulumi.aws.securityhub.inputs.AutomationRuleV2ActionFindingFieldsUpdateArgs;
import static com.pulumi.codegen.internal.Serialization.*;
import com.pulumi.resources.CustomResourceOptions;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var example = new AccountV2("example");
var exampleAggregatorV2 = new AggregatorV2("exampleAggregatorV2", AggregatorV2Args.builder()
.regionLinkingMode("ALL_REGIONS")
.build(), CustomResourceOptions.builder()
.dependsOn(example)
.build());
var exampleAutomationRuleV2 = new AutomationRuleV2("exampleAutomationRuleV2", AutomationRuleV2Args.builder()
.criteria(AutomationRuleV2CriteriaArgs.builder()
.ocsfFindingCriteriaJson(serializeJson(
jsonObject(
jsonProperty("CompositeFilters", jsonArray(jsonObject(
jsonProperty("StringFilters", jsonArray(jsonObject(
jsonProperty("FieldName", "metadata.product.name"),
jsonProperty("Filter", jsonObject(
jsonProperty("Comparison", "EQUALS"),
jsonProperty("Value", "GuardDuty")
))
)))
))),
jsonProperty("CompositeOperator", "AND")
)))
.build())
.action(AutomationRuleV2ActionArgs.builder()
.findingFieldsUpdate(AutomationRuleV2ActionFindingFieldsUpdateArgs.builder()
.severityId(99)
.statusId(3)
.comment("Low severity GuardDuty finding suppressed")
.build())
.type("FINDING_FIELDS_UPDATE")
.build())
.ruleName("suppress-guardduty-low")
.description("Suppress low severity GuardDuty findings")
.ruleOrder(100.0)
.ruleStatus("ENABLED")
.build(), CustomResourceOptions.builder()
.dependsOn(exampleAggregatorV2)
.build());
}
}
resources:
example:
type: aws:securityhub:AccountV2
exampleAggregatorV2:
type: aws:securityhub:AggregatorV2
name: example
properties:
regionLinkingMode: ALL_REGIONS
options:
dependsOn:
- ${example}
exampleAutomationRuleV2:
type: aws:securityhub:AutomationRuleV2
name: example
properties:
criteria:
ocsfFindingCriteriaJson:
fn::toJSON:
CompositeFilters:
- StringFilters:
- FieldName: metadata.product.name
Filter:
Comparison: EQUALS
Value: GuardDuty
CompositeOperator: AND
action:
findingFieldsUpdate:
severityId: 99
statusId: 3
comment: Low severity GuardDuty finding suppressed
type: FINDING_FIELDS_UPDATE
ruleName: suppress-guardduty-low
description: Suppress low severity GuardDuty findings
ruleOrder: 100
ruleStatus: ENABLED
options:
dependsOn:
- ${exampleAggregatorV2}
Import
Identity Schema
Required
arn(String) ARN of the Security Hub V2 automation rule.
Using pulumi import, import Security Hub V2 automation rules using arn. For example:
$ pulumi import aws:securityhub/automationRuleV2:AutomationRuleV2 example arn:aws:securityhub:us-east-1:123456789012:automation-rulev2/3efb04f4-e19e-4458-a698-62364ab7b1a7
Constructors
- AutomationRuleV2(String name, {AutomationRuleV2Args? args, CustomResourceOptions? options})
-
Creates a new AutomationRuleV2.
nameThe Pulumi resource name.argsArguments used to configure this AutomationRuleV2. The set of arguments for AutomationRuleV2.optionsResource options controlling this resource's behavior. - AutomationRuleV2.reference(String urn)
- Creates a typed reference to an existing AutomationRuleV2 resource.
Properties
-
action
↔ Output<
AutomationRuleV2Action> -
Actions to take when the rule matches. Maximum of 1 action block. See
actionbelow.latefinal -
arn
↔ Output<
String> -
latefinal
-
childResources
→ Set<
Resource> -
finalinherited
-
completionSources
↔ Map<
String, IOutputCompletionSource> -
latefinalinherited
-
criteria
↔ Output<
AutomationRuleV2Criteria> -
Filtering type and configuration of the automation rule. See
criteriabelow.latefinal -
description
↔ Output<
String> -
A description of the automation rule.
latefinal
- hashCode → int
-
The hash code for this object.
no setterinherited
-
id
↔ Output<
String> -
getter/setter pairinherited
- isCustom → bool
-
Returns whether this resource is provider-managed.
no setterinherited
- isProtected → bool
-
Returns whether this resource is protected from deletion.
no setterinherited
- isRemote → bool
-
Whether this resource is registered as remote.
no setterinherited
- isResourceReference → bool
-
Whether this instance represents a resource value returned over RPC.
finalinherited
-
region
↔ Output<
String> -
Region where this resource will be managed. Defaults to the Region set in the provider configuration.
latefinal
-
resourceTransforms
→ List<
ResourceTransform> -
Inherited/explicit async transforms.
no setterinherited
-
ruleId
↔ Output<
String> -
ID of the automation rule.
latefinal
-
ruleName
↔ Output<
String> -
The name of the automation rule.
latefinal
-
ruleOrder
↔ Output<
double> -
The priority of the rule. Lower values indicate higher priority.
latefinal
-
ruleStatus
↔ Output<
String> -
The status of the rule. Valid values:
ENABLED,DISABLED. Defaults toENABLED.latefinal - runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
-
Map of tags to assign to the resource. If configured with a provider
defaultTagsconfiguration block present, tags with matching keys will overwrite those defined at the provider-level.latefinal -
Map of tags assigned to the resource, including those inherited from the provider
defaultTagsconfiguration block.latefinal -
transformations
→ List<
ResourceTransformation> -
Inherited/explicit legacy transformations.
no setterinherited
-
urn
↔ Output<
String> -
latefinalinherited
Methods
-
failId(
Object error) → void -
Completes this resource ID with an error when registration fails.
inherited
-
failOutputs(
Object error) → void -
Completes all output properties with
error.inherited -
failUrn(
Object error) → void -
Completes this resource URN with an error when registration fails.
inherited
-
getProvider(
String moduleMember) → ProviderResource? -
Returns provider for
moduleMember's package, if configured.inherited -
getResourceName(
) → String -
Returns this resource's logical name.
inherited
-
getResourceType(
) → String -
Returns this resource's Pulumi type token.
inherited
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
registerOutput<
T> (String propertyName, {Object? decoder(Object?)?, bool isSecret = false}) → Output< T> -
Registers a dynamic output property for this resource.
inherited
-
resolveId(
String? value, {required bool isKnown}) → void -
Resolves the provider-assigned ID for this resource.
inherited
-
resolveOutputs(
Struct outputs) → void -
Resolves all output properties from a monitor response payload.
inherited
-
resolveUrn(
String value) → void -
Resolves this resource's URN once assigned by the engine.
inherited
-
serializeProperties(
Map< String, dynamic> properties) → Future<Struct> -
Serializes resource properties for RPC transmission.
inherited
-
toString(
) → String -
A string representation of this object.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited
Static Methods
-
get(
String name, Input< String> id, {AutomationRuleV2State? state, CustomResourceOptions? options}) → AutomationRuleV2 -
Gets an existing AutomationRuleV2 resource's state with the given
nameandid.