/**
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * SPDX-License-Identifier: Apache-2.0.
 */
#pragma once
#include  The firewall policy defines the behavior of a firewall using a collection of
   * stateless and stateful rule groups and other settings. You can use one firewall
   * policy for multiple firewalls.  This, along with
   * FirewallPolicyResponse, define the policy. You can retrieve all objects
   * for a firewall policy by calling DescribeFirewallPolicy.See
   * Also:
   AWS
   * API Reference
References to the stateless rule groups that are used in the policy. These * define the matching criteria in stateless rules.
*/ inline const Aws::VectorReferences to the stateless rule groups that are used in the policy. These * define the matching criteria in stateless rules.
*/ inline bool StatelessRuleGroupReferencesHasBeenSet() const { return m_statelessRuleGroupReferencesHasBeenSet; } /** *References to the stateless rule groups that are used in the policy. These * define the matching criteria in stateless rules.
*/ inline void SetStatelessRuleGroupReferences(const Aws::VectorReferences to the stateless rule groups that are used in the policy. These * define the matching criteria in stateless rules.
*/ inline void SetStatelessRuleGroupReferences(Aws::VectorReferences to the stateless rule groups that are used in the policy. These * define the matching criteria in stateless rules.
*/ inline FirewallPolicy& WithStatelessRuleGroupReferences(const Aws::VectorReferences to the stateless rule groups that are used in the policy. These * define the matching criteria in stateless rules.
*/ inline FirewallPolicy& WithStatelessRuleGroupReferences(Aws::VectorReferences to the stateless rule groups that are used in the policy. These * define the matching criteria in stateless rules.
*/ inline FirewallPolicy& AddStatelessRuleGroupReferences(const StatelessRuleGroupReference& value) { m_statelessRuleGroupReferencesHasBeenSet = true; m_statelessRuleGroupReferences.push_back(value); return *this; } /** *References to the stateless rule groups that are used in the policy. These * define the matching criteria in stateless rules.
*/ inline FirewallPolicy& AddStatelessRuleGroupReferences(StatelessRuleGroupReference&& value) { m_statelessRuleGroupReferencesHasBeenSet = true; m_statelessRuleGroupReferences.push_back(std::move(value)); return *this; } /** *The actions to take on a packet if it doesn't match any of the stateless
     * rules in the policy. If you want non-matching packets to be forwarded for
     * stateful inspection, specify aws:forward_to_sfe. 
You must
     * specify one of the standard actions: aws:pass,
     * aws:drop, or aws:forward_to_sfe. In addition, you can
     * specify custom actions that are compatible with your standard section
     * choice.
For example, you could specify ["aws:pass"] or you
     * could specify ["aws:pass", “customActionName”]. For information
     * about compatibility, see the custom action descriptions under
     * CustomAction.
The actions to take on a packet if it doesn't match any of the stateless
     * rules in the policy. If you want non-matching packets to be forwarded for
     * stateful inspection, specify aws:forward_to_sfe. 
You must
     * specify one of the standard actions: aws:pass,
     * aws:drop, or aws:forward_to_sfe. In addition, you can
     * specify custom actions that are compatible with your standard section
     * choice.
For example, you could specify ["aws:pass"] or you
     * could specify ["aws:pass", “customActionName”]. For information
     * about compatibility, see the custom action descriptions under
     * CustomAction.
The actions to take on a packet if it doesn't match any of the stateless
     * rules in the policy. If you want non-matching packets to be forwarded for
     * stateful inspection, specify aws:forward_to_sfe. 
You must
     * specify one of the standard actions: aws:pass,
     * aws:drop, or aws:forward_to_sfe. In addition, you can
     * specify custom actions that are compatible with your standard section
     * choice.
For example, you could specify ["aws:pass"] or you
     * could specify ["aws:pass", “customActionName”]. For information
     * about compatibility, see the custom action descriptions under
     * CustomAction.
The actions to take on a packet if it doesn't match any of the stateless
     * rules in the policy. If you want non-matching packets to be forwarded for
     * stateful inspection, specify aws:forward_to_sfe. 
You must
     * specify one of the standard actions: aws:pass,
     * aws:drop, or aws:forward_to_sfe. In addition, you can
     * specify custom actions that are compatible with your standard section
     * choice.
For example, you could specify ["aws:pass"] or you
     * could specify ["aws:pass", “customActionName”]. For information
     * about compatibility, see the custom action descriptions under
     * CustomAction.
The actions to take on a packet if it doesn't match any of the stateless
     * rules in the policy. If you want non-matching packets to be forwarded for
     * stateful inspection, specify aws:forward_to_sfe. 
You must
     * specify one of the standard actions: aws:pass,
     * aws:drop, or aws:forward_to_sfe. In addition, you can
     * specify custom actions that are compatible with your standard section
     * choice.
For example, you could specify ["aws:pass"] or you
     * could specify ["aws:pass", “customActionName”]. For information
     * about compatibility, see the custom action descriptions under
     * CustomAction.
The actions to take on a packet if it doesn't match any of the stateless
     * rules in the policy. If you want non-matching packets to be forwarded for
     * stateful inspection, specify aws:forward_to_sfe. 
You must
     * specify one of the standard actions: aws:pass,
     * aws:drop, or aws:forward_to_sfe. In addition, you can
     * specify custom actions that are compatible with your standard section
     * choice.
For example, you could specify ["aws:pass"] or you
     * could specify ["aws:pass", “customActionName”]. For information
     * about compatibility, see the custom action descriptions under
     * CustomAction.
The actions to take on a packet if it doesn't match any of the stateless
     * rules in the policy. If you want non-matching packets to be forwarded for
     * stateful inspection, specify aws:forward_to_sfe. 
You must
     * specify one of the standard actions: aws:pass,
     * aws:drop, or aws:forward_to_sfe. In addition, you can
     * specify custom actions that are compatible with your standard section
     * choice.
For example, you could specify ["aws:pass"] or you
     * could specify ["aws:pass", “customActionName”]. For information
     * about compatibility, see the custom action descriptions under
     * CustomAction.
The actions to take on a packet if it doesn't match any of the stateless
     * rules in the policy. If you want non-matching packets to be forwarded for
     * stateful inspection, specify aws:forward_to_sfe. 
You must
     * specify one of the standard actions: aws:pass,
     * aws:drop, or aws:forward_to_sfe. In addition, you can
     * specify custom actions that are compatible with your standard section
     * choice.
For example, you could specify ["aws:pass"] or you
     * could specify ["aws:pass", “customActionName”]. For information
     * about compatibility, see the custom action descriptions under
     * CustomAction.
The actions to take on a packet if it doesn't match any of the stateless
     * rules in the policy. If you want non-matching packets to be forwarded for
     * stateful inspection, specify aws:forward_to_sfe. 
You must
     * specify one of the standard actions: aws:pass,
     * aws:drop, or aws:forward_to_sfe. In addition, you can
     * specify custom actions that are compatible with your standard section
     * choice.
For example, you could specify ["aws:pass"] or you
     * could specify ["aws:pass", “customActionName”]. For information
     * about compatibility, see the custom action descriptions under
     * CustomAction.
The actions to take on a fragmented UDP packet if it doesn't match any of the
     * stateless rules in the policy. Network Firewall only manages UDP packet
     * fragments and silently drops packet fragments for other protocols. If you want
     * non-matching fragmented UDP packets to be forwarded for stateful inspection,
     * specify aws:forward_to_sfe. 
You must specify one of the
     * standard actions: aws:pass, aws:drop, or
     * aws:forward_to_sfe. In addition, you can specify custom actions
     * that are compatible with your standard section choice.
For example, you
     * could specify ["aws:pass"] or you could specify ["aws:pass",
     * “customActionName”]. For information about compatibility, see the custom
     * action descriptions under CustomAction.
The actions to take on a fragmented UDP packet if it doesn't match any of the
     * stateless rules in the policy. Network Firewall only manages UDP packet
     * fragments and silently drops packet fragments for other protocols. If you want
     * non-matching fragmented UDP packets to be forwarded for stateful inspection,
     * specify aws:forward_to_sfe. 
You must specify one of the
     * standard actions: aws:pass, aws:drop, or
     * aws:forward_to_sfe. In addition, you can specify custom actions
     * that are compatible with your standard section choice.
For example, you
     * could specify ["aws:pass"] or you could specify ["aws:pass",
     * “customActionName”]. For information about compatibility, see the custom
     * action descriptions under CustomAction.
The actions to take on a fragmented UDP packet if it doesn't match any of the
     * stateless rules in the policy. Network Firewall only manages UDP packet
     * fragments and silently drops packet fragments for other protocols. If you want
     * non-matching fragmented UDP packets to be forwarded for stateful inspection,
     * specify aws:forward_to_sfe. 
You must specify one of the
     * standard actions: aws:pass, aws:drop, or
     * aws:forward_to_sfe. In addition, you can specify custom actions
     * that are compatible with your standard section choice.
For example, you
     * could specify ["aws:pass"] or you could specify ["aws:pass",
     * “customActionName”]. For information about compatibility, see the custom
     * action descriptions under CustomAction.
The actions to take on a fragmented UDP packet if it doesn't match any of the
     * stateless rules in the policy. Network Firewall only manages UDP packet
     * fragments and silently drops packet fragments for other protocols. If you want
     * non-matching fragmented UDP packets to be forwarded for stateful inspection,
     * specify aws:forward_to_sfe. 
You must specify one of the
     * standard actions: aws:pass, aws:drop, or
     * aws:forward_to_sfe. In addition, you can specify custom actions
     * that are compatible with your standard section choice.
For example, you
     * could specify ["aws:pass"] or you could specify ["aws:pass",
     * “customActionName”]. For information about compatibility, see the custom
     * action descriptions under CustomAction.
The actions to take on a fragmented UDP packet if it doesn't match any of the
     * stateless rules in the policy. Network Firewall only manages UDP packet
     * fragments and silently drops packet fragments for other protocols. If you want
     * non-matching fragmented UDP packets to be forwarded for stateful inspection,
     * specify aws:forward_to_sfe. 
You must specify one of the
     * standard actions: aws:pass, aws:drop, or
     * aws:forward_to_sfe. In addition, you can specify custom actions
     * that are compatible with your standard section choice.
For example, you
     * could specify ["aws:pass"] or you could specify ["aws:pass",
     * “customActionName”]. For information about compatibility, see the custom
     * action descriptions under CustomAction.
The actions to take on a fragmented UDP packet if it doesn't match any of the
     * stateless rules in the policy. Network Firewall only manages UDP packet
     * fragments and silently drops packet fragments for other protocols. If you want
     * non-matching fragmented UDP packets to be forwarded for stateful inspection,
     * specify aws:forward_to_sfe. 
You must specify one of the
     * standard actions: aws:pass, aws:drop, or
     * aws:forward_to_sfe. In addition, you can specify custom actions
     * that are compatible with your standard section choice.
For example, you
     * could specify ["aws:pass"] or you could specify ["aws:pass",
     * “customActionName”]. For information about compatibility, see the custom
     * action descriptions under CustomAction.
The actions to take on a fragmented UDP packet if it doesn't match any of the
     * stateless rules in the policy. Network Firewall only manages UDP packet
     * fragments and silently drops packet fragments for other protocols. If you want
     * non-matching fragmented UDP packets to be forwarded for stateful inspection,
     * specify aws:forward_to_sfe. 
You must specify one of the
     * standard actions: aws:pass, aws:drop, or
     * aws:forward_to_sfe. In addition, you can specify custom actions
     * that are compatible with your standard section choice.
For example, you
     * could specify ["aws:pass"] or you could specify ["aws:pass",
     * “customActionName”]. For information about compatibility, see the custom
     * action descriptions under CustomAction.
The actions to take on a fragmented UDP packet if it doesn't match any of the
     * stateless rules in the policy. Network Firewall only manages UDP packet
     * fragments and silently drops packet fragments for other protocols. If you want
     * non-matching fragmented UDP packets to be forwarded for stateful inspection,
     * specify aws:forward_to_sfe. 
You must specify one of the
     * standard actions: aws:pass, aws:drop, or
     * aws:forward_to_sfe. In addition, you can specify custom actions
     * that are compatible with your standard section choice.
For example, you
     * could specify ["aws:pass"] or you could specify ["aws:pass",
     * “customActionName”]. For information about compatibility, see the custom
     * action descriptions under CustomAction.
The actions to take on a fragmented UDP packet if it doesn't match any of the
     * stateless rules in the policy. Network Firewall only manages UDP packet
     * fragments and silently drops packet fragments for other protocols. If you want
     * non-matching fragmented UDP packets to be forwarded for stateful inspection,
     * specify aws:forward_to_sfe. 
You must specify one of the
     * standard actions: aws:pass, aws:drop, or
     * aws:forward_to_sfe. In addition, you can specify custom actions
     * that are compatible with your standard section choice.
For example, you
     * could specify ["aws:pass"] or you could specify ["aws:pass",
     * “customActionName”]. For information about compatibility, see the custom
     * action descriptions under CustomAction.
The custom action definitions that are available for use in the firewall
     * policy's StatelessDefaultActions setting. You name each custom
     * action that you define, and then you can use it by name in your default actions
     * specifications.
The custom action definitions that are available for use in the firewall
     * policy's StatelessDefaultActions setting. You name each custom
     * action that you define, and then you can use it by name in your default actions
     * specifications.
The custom action definitions that are available for use in the firewall
     * policy's StatelessDefaultActions setting. You name each custom
     * action that you define, and then you can use it by name in your default actions
     * specifications.
The custom action definitions that are available for use in the firewall
     * policy's StatelessDefaultActions setting. You name each custom
     * action that you define, and then you can use it by name in your default actions
     * specifications.
The custom action definitions that are available for use in the firewall
     * policy's StatelessDefaultActions setting. You name each custom
     * action that you define, and then you can use it by name in your default actions
     * specifications.
The custom action definitions that are available for use in the firewall
     * policy's StatelessDefaultActions setting. You name each custom
     * action that you define, and then you can use it by name in your default actions
     * specifications.
The custom action definitions that are available for use in the firewall
     * policy's StatelessDefaultActions setting. You name each custom
     * action that you define, and then you can use it by name in your default actions
     * specifications.
The custom action definitions that are available for use in the firewall
     * policy's StatelessDefaultActions setting. You name each custom
     * action that you define, and then you can use it by name in your default actions
     * specifications.
References to the stateful rule groups that are used in the policy. These * define the inspection criteria in stateful rules.
*/ inline const Aws::VectorReferences to the stateful rule groups that are used in the policy. These * define the inspection criteria in stateful rules.
*/ inline bool StatefulRuleGroupReferencesHasBeenSet() const { return m_statefulRuleGroupReferencesHasBeenSet; } /** *References to the stateful rule groups that are used in the policy. These * define the inspection criteria in stateful rules.
*/ inline void SetStatefulRuleGroupReferences(const Aws::VectorReferences to the stateful rule groups that are used in the policy. These * define the inspection criteria in stateful rules.
*/ inline void SetStatefulRuleGroupReferences(Aws::VectorReferences to the stateful rule groups that are used in the policy. These * define the inspection criteria in stateful rules.
*/ inline FirewallPolicy& WithStatefulRuleGroupReferences(const Aws::VectorReferences to the stateful rule groups that are used in the policy. These * define the inspection criteria in stateful rules.
*/ inline FirewallPolicy& WithStatefulRuleGroupReferences(Aws::VectorReferences to the stateful rule groups that are used in the policy. These * define the inspection criteria in stateful rules.
*/ inline FirewallPolicy& AddStatefulRuleGroupReferences(const StatefulRuleGroupReference& value) { m_statefulRuleGroupReferencesHasBeenSet = true; m_statefulRuleGroupReferences.push_back(value); return *this; } /** *References to the stateful rule groups that are used in the policy. These * define the inspection criteria in stateful rules.
*/ inline FirewallPolicy& AddStatefulRuleGroupReferences(StatefulRuleGroupReference&& value) { m_statefulRuleGroupReferencesHasBeenSet = true; m_statefulRuleGroupReferences.push_back(std::move(value)); return *this; } /** *The default actions to take on a packet that doesn't match any stateful * rules. The stateful default action is optional, and is only valid when using the * strict rule order.
Valid values of the stateful default action:
aws:drop_strict
aws:drop_established
aws:alert_strict
aws:alert_established
For more information, see Strict * evaluation order in the Network Firewall Developer Guide.
*/ inline const Aws::VectorThe default actions to take on a packet that doesn't match any stateful * rules. The stateful default action is optional, and is only valid when using the * strict rule order.
Valid values of the stateful default action:
aws:drop_strict
aws:drop_established
aws:alert_strict
aws:alert_established
For more information, see Strict * evaluation order in the Network Firewall Developer Guide.
*/ inline bool StatefulDefaultActionsHasBeenSet() const { return m_statefulDefaultActionsHasBeenSet; } /** *The default actions to take on a packet that doesn't match any stateful * rules. The stateful default action is optional, and is only valid when using the * strict rule order.
Valid values of the stateful default action:
aws:drop_strict
aws:drop_established
aws:alert_strict
aws:alert_established
For more information, see Strict * evaluation order in the Network Firewall Developer Guide.
*/ inline void SetStatefulDefaultActions(const Aws::VectorThe default actions to take on a packet that doesn't match any stateful * rules. The stateful default action is optional, and is only valid when using the * strict rule order.
Valid values of the stateful default action:
aws:drop_strict
aws:drop_established
aws:alert_strict
aws:alert_established
For more information, see Strict * evaluation order in the Network Firewall Developer Guide.
*/ inline void SetStatefulDefaultActions(Aws::VectorThe default actions to take on a packet that doesn't match any stateful * rules. The stateful default action is optional, and is only valid when using the * strict rule order.
Valid values of the stateful default action:
aws:drop_strict
aws:drop_established
aws:alert_strict
aws:alert_established
For more information, see Strict * evaluation order in the Network Firewall Developer Guide.
*/ inline FirewallPolicy& WithStatefulDefaultActions(const Aws::VectorThe default actions to take on a packet that doesn't match any stateful * rules. The stateful default action is optional, and is only valid when using the * strict rule order.
Valid values of the stateful default action:
aws:drop_strict
aws:drop_established
aws:alert_strict
aws:alert_established
For more information, see Strict * evaluation order in the Network Firewall Developer Guide.
*/ inline FirewallPolicy& WithStatefulDefaultActions(Aws::VectorThe default actions to take on a packet that doesn't match any stateful * rules. The stateful default action is optional, and is only valid when using the * strict rule order.
Valid values of the stateful default action:
aws:drop_strict
aws:drop_established
aws:alert_strict
aws:alert_established
For more information, see Strict * evaluation order in the Network Firewall Developer Guide.
*/ inline FirewallPolicy& AddStatefulDefaultActions(const Aws::String& value) { m_statefulDefaultActionsHasBeenSet = true; m_statefulDefaultActions.push_back(value); return *this; } /** *The default actions to take on a packet that doesn't match any stateful * rules. The stateful default action is optional, and is only valid when using the * strict rule order.
Valid values of the stateful default action:
aws:drop_strict
aws:drop_established
aws:alert_strict
aws:alert_established
For more information, see Strict * evaluation order in the Network Firewall Developer Guide.
*/ inline FirewallPolicy& AddStatefulDefaultActions(Aws::String&& value) { m_statefulDefaultActionsHasBeenSet = true; m_statefulDefaultActions.push_back(std::move(value)); return *this; } /** *The default actions to take on a packet that doesn't match any stateful * rules. The stateful default action is optional, and is only valid when using the * strict rule order.
Valid values of the stateful default action:
aws:drop_strict
aws:drop_established
aws:alert_strict
aws:alert_established
For more information, see Strict * evaluation order in the Network Firewall Developer Guide.
*/ inline FirewallPolicy& AddStatefulDefaultActions(const char* value) { m_statefulDefaultActionsHasBeenSet = true; m_statefulDefaultActions.push_back(value); return *this; } /** *Additional options governing how Network Firewall handles stateful rules. The * stateful rule groups that you use in your policy must have stateful rule options * settings that are compatible with these settings.
*/ inline const StatefulEngineOptions& GetStatefulEngineOptions() const{ return m_statefulEngineOptions; } /** *Additional options governing how Network Firewall handles stateful rules. The * stateful rule groups that you use in your policy must have stateful rule options * settings that are compatible with these settings.
*/ inline bool StatefulEngineOptionsHasBeenSet() const { return m_statefulEngineOptionsHasBeenSet; } /** *Additional options governing how Network Firewall handles stateful rules. The * stateful rule groups that you use in your policy must have stateful rule options * settings that are compatible with these settings.
*/ inline void SetStatefulEngineOptions(const StatefulEngineOptions& value) { m_statefulEngineOptionsHasBeenSet = true; m_statefulEngineOptions = value; } /** *Additional options governing how Network Firewall handles stateful rules. The * stateful rule groups that you use in your policy must have stateful rule options * settings that are compatible with these settings.
*/ inline void SetStatefulEngineOptions(StatefulEngineOptions&& value) { m_statefulEngineOptionsHasBeenSet = true; m_statefulEngineOptions = std::move(value); } /** *Additional options governing how Network Firewall handles stateful rules. The * stateful rule groups that you use in your policy must have stateful rule options * settings that are compatible with these settings.
*/ inline FirewallPolicy& WithStatefulEngineOptions(const StatefulEngineOptions& value) { SetStatefulEngineOptions(value); return *this;} /** *Additional options governing how Network Firewall handles stateful rules. The * stateful rule groups that you use in your policy must have stateful rule options * settings that are compatible with these settings.
*/ inline FirewallPolicy& WithStatefulEngineOptions(StatefulEngineOptions&& value) { SetStatefulEngineOptions(std::move(value)); return *this;} /** *The Amazon Resource Name (ARN) of the TLS inspection configuration.
*/ inline const Aws::String& GetTLSInspectionConfigurationArn() const{ return m_tLSInspectionConfigurationArn; } /** *The Amazon Resource Name (ARN) of the TLS inspection configuration.
*/ inline bool TLSInspectionConfigurationArnHasBeenSet() const { return m_tLSInspectionConfigurationArnHasBeenSet; } /** *The Amazon Resource Name (ARN) of the TLS inspection configuration.
*/ inline void SetTLSInspectionConfigurationArn(const Aws::String& value) { m_tLSInspectionConfigurationArnHasBeenSet = true; m_tLSInspectionConfigurationArn = value; } /** *The Amazon Resource Name (ARN) of the TLS inspection configuration.
*/ inline void SetTLSInspectionConfigurationArn(Aws::String&& value) { m_tLSInspectionConfigurationArnHasBeenSet = true; m_tLSInspectionConfigurationArn = std::move(value); } /** *The Amazon Resource Name (ARN) of the TLS inspection configuration.
*/ inline void SetTLSInspectionConfigurationArn(const char* value) { m_tLSInspectionConfigurationArnHasBeenSet = true; m_tLSInspectionConfigurationArn.assign(value); } /** *The Amazon Resource Name (ARN) of the TLS inspection configuration.
*/ inline FirewallPolicy& WithTLSInspectionConfigurationArn(const Aws::String& value) { SetTLSInspectionConfigurationArn(value); return *this;} /** *The Amazon Resource Name (ARN) of the TLS inspection configuration.
*/ inline FirewallPolicy& WithTLSInspectionConfigurationArn(Aws::String&& value) { SetTLSInspectionConfigurationArn(std::move(value)); return *this;} /** *The Amazon Resource Name (ARN) of the TLS inspection configuration.
*/ inline FirewallPolicy& WithTLSInspectionConfigurationArn(const char* value) { SetTLSInspectionConfigurationArn(value); return *this;} /** *Contains variables that you can use to override default Suricata settings in * your firewall policy.
*/ inline const PolicyVariables& GetPolicyVariables() const{ return m_policyVariables; } /** *Contains variables that you can use to override default Suricata settings in * your firewall policy.
*/ inline bool PolicyVariablesHasBeenSet() const { return m_policyVariablesHasBeenSet; } /** *Contains variables that you can use to override default Suricata settings in * your firewall policy.
*/ inline void SetPolicyVariables(const PolicyVariables& value) { m_policyVariablesHasBeenSet = true; m_policyVariables = value; } /** *Contains variables that you can use to override default Suricata settings in * your firewall policy.
*/ inline void SetPolicyVariables(PolicyVariables&& value) { m_policyVariablesHasBeenSet = true; m_policyVariables = std::move(value); } /** *Contains variables that you can use to override default Suricata settings in * your firewall policy.
*/ inline FirewallPolicy& WithPolicyVariables(const PolicyVariables& value) { SetPolicyVariables(value); return *this;} /** *Contains variables that you can use to override default Suricata settings in * your firewall policy.
*/ inline FirewallPolicy& WithPolicyVariables(PolicyVariables&& value) { SetPolicyVariables(std::move(value)); return *this;} private: Aws::Vector