/** * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0. */ #pragma once #include #include #include #include #include #include #include #include #include #include #include namespace Aws { namespace Utils { namespace Json { class JsonValue; class JsonView; } // namespace Json } // namespace Utils namespace WAFV2 { namespace Model { /** *

A single rule, which you can use in a WebACL or RuleGroup to * identify web requests that you want to allow, block, or count. Each rule * includes one top-level Statement that WAF uses to identify matching web * requests, and parameters that govern how WAF handles them.

See * Also:

AWS API * Reference

*/ class Rule { public: AWS_WAFV2_API Rule(); AWS_WAFV2_API Rule(Aws::Utils::Json::JsonView jsonValue); AWS_WAFV2_API Rule& operator=(Aws::Utils::Json::JsonView jsonValue); AWS_WAFV2_API Aws::Utils::Json::JsonValue Jsonize() const; /** *

The name of the rule. You can't change the name of a Rule after * you create it.

*/ inline const Aws::String& GetName() const{ return m_name; } /** *

The name of the rule. You can't change the name of a Rule after * you create it.

*/ inline bool NameHasBeenSet() const { return m_nameHasBeenSet; } /** *

The name of the rule. You can't change the name of a Rule after * you create it.

*/ inline void SetName(const Aws::String& value) { m_nameHasBeenSet = true; m_name = value; } /** *

The name of the rule. You can't change the name of a Rule after * you create it.

*/ inline void SetName(Aws::String&& value) { m_nameHasBeenSet = true; m_name = std::move(value); } /** *

The name of the rule. You can't change the name of a Rule after * you create it.

*/ inline void SetName(const char* value) { m_nameHasBeenSet = true; m_name.assign(value); } /** *

The name of the rule. You can't change the name of a Rule after * you create it.

*/ inline Rule& WithName(const Aws::String& value) { SetName(value); return *this;} /** *

The name of the rule. You can't change the name of a Rule after * you create it.

*/ inline Rule& WithName(Aws::String&& value) { SetName(std::move(value)); return *this;} /** *

The name of the rule. You can't change the name of a Rule after * you create it.

*/ inline Rule& WithName(const char* value) { SetName(value); return *this;} /** *

If you define more than one Rule in a WebACL, WAF * evaluates each request against the Rules in order based on the * value of Priority. WAF processes rules with lower priority first. * The priorities don't need to be consecutive, but they must all be different.

*/ inline int GetPriority() const{ return m_priority; } /** *

If you define more than one Rule in a WebACL, WAF * evaluates each request against the Rules in order based on the * value of Priority. WAF processes rules with lower priority first. * The priorities don't need to be consecutive, but they must all be different.

*/ inline bool PriorityHasBeenSet() const { return m_priorityHasBeenSet; } /** *

If you define more than one Rule in a WebACL, WAF * evaluates each request against the Rules in order based on the * value of Priority. WAF processes rules with lower priority first. * The priorities don't need to be consecutive, but they must all be different.

*/ inline void SetPriority(int value) { m_priorityHasBeenSet = true; m_priority = value; } /** *

If you define more than one Rule in a WebACL, WAF * evaluates each request against the Rules in order based on the * value of Priority. WAF processes rules with lower priority first. * The priorities don't need to be consecutive, but they must all be different.

*/ inline Rule& WithPriority(int value) { SetPriority(value); return *this;} /** *

The WAF processing statement for the rule, for example * ByteMatchStatement or SizeConstraintStatement.

*/ inline const Statement& GetStatement() const{ return m_statement; } /** *

The WAF processing statement for the rule, for example * ByteMatchStatement or SizeConstraintStatement.

*/ inline bool StatementHasBeenSet() const { return m_statementHasBeenSet; } /** *

The WAF processing statement for the rule, for example * ByteMatchStatement or SizeConstraintStatement.

*/ inline void SetStatement(const Statement& value) { m_statementHasBeenSet = true; m_statement = value; } /** *

The WAF processing statement for the rule, for example * ByteMatchStatement or SizeConstraintStatement.

*/ inline void SetStatement(Statement&& value) { m_statementHasBeenSet = true; m_statement = std::move(value); } /** *

The WAF processing statement for the rule, for example * ByteMatchStatement or SizeConstraintStatement.

*/ inline Rule& WithStatement(const Statement& value) { SetStatement(value); return *this;} /** *

The WAF processing statement for the rule, for example * ByteMatchStatement or SizeConstraintStatement.

*/ inline Rule& WithStatement(Statement&& value) { SetStatement(std::move(value)); return *this;} /** *

The action that WAF should take on a web request when it matches the rule * statement. Settings at the web ACL level can override the rule action setting. *

This is used only for rules whose statements do not reference a rule * group. Rule statements that reference a rule group include * RuleGroupReferenceStatement and * ManagedRuleGroupStatement.

You must specify either this * Action setting or the rule OverrideAction setting, but * not both:

  • If the rule statement does not reference a rule * group, use this rule action setting and not the rule override action setting. *

  • If the rule statement references a rule group, use the * override action setting and not this action setting.

*/ inline const RuleAction& GetAction() const{ return m_action; } /** *

The action that WAF should take on a web request when it matches the rule * statement. Settings at the web ACL level can override the rule action setting. *

This is used only for rules whose statements do not reference a rule * group. Rule statements that reference a rule group include * RuleGroupReferenceStatement and * ManagedRuleGroupStatement.

You must specify either this * Action setting or the rule OverrideAction setting, but * not both:

  • If the rule statement does not reference a rule * group, use this rule action setting and not the rule override action setting. *

  • If the rule statement references a rule group, use the * override action setting and not this action setting.

*/ inline bool ActionHasBeenSet() const { return m_actionHasBeenSet; } /** *

The action that WAF should take on a web request when it matches the rule * statement. Settings at the web ACL level can override the rule action setting. *

This is used only for rules whose statements do not reference a rule * group. Rule statements that reference a rule group include * RuleGroupReferenceStatement and * ManagedRuleGroupStatement.

You must specify either this * Action setting or the rule OverrideAction setting, but * not both:

  • If the rule statement does not reference a rule * group, use this rule action setting and not the rule override action setting. *

  • If the rule statement references a rule group, use the * override action setting and not this action setting.

*/ inline void SetAction(const RuleAction& value) { m_actionHasBeenSet = true; m_action = value; } /** *

The action that WAF should take on a web request when it matches the rule * statement. Settings at the web ACL level can override the rule action setting. *

This is used only for rules whose statements do not reference a rule * group. Rule statements that reference a rule group include * RuleGroupReferenceStatement and * ManagedRuleGroupStatement.

You must specify either this * Action setting or the rule OverrideAction setting, but * not both:

  • If the rule statement does not reference a rule * group, use this rule action setting and not the rule override action setting. *

  • If the rule statement references a rule group, use the * override action setting and not this action setting.

*/ inline void SetAction(RuleAction&& value) { m_actionHasBeenSet = true; m_action = std::move(value); } /** *

The action that WAF should take on a web request when it matches the rule * statement. Settings at the web ACL level can override the rule action setting. *

This is used only for rules whose statements do not reference a rule * group. Rule statements that reference a rule group include * RuleGroupReferenceStatement and * ManagedRuleGroupStatement.

You must specify either this * Action setting or the rule OverrideAction setting, but * not both:

  • If the rule statement does not reference a rule * group, use this rule action setting and not the rule override action setting. *

  • If the rule statement references a rule group, use the * override action setting and not this action setting.

*/ inline Rule& WithAction(const RuleAction& value) { SetAction(value); return *this;} /** *

The action that WAF should take on a web request when it matches the rule * statement. Settings at the web ACL level can override the rule action setting. *

This is used only for rules whose statements do not reference a rule * group. Rule statements that reference a rule group include * RuleGroupReferenceStatement and * ManagedRuleGroupStatement.

You must specify either this * Action setting or the rule OverrideAction setting, but * not both:

  • If the rule statement does not reference a rule * group, use this rule action setting and not the rule override action setting. *

  • If the rule statement references a rule group, use the * override action setting and not this action setting.

*/ inline Rule& WithAction(RuleAction&& value) { SetAction(std::move(value)); return *this;} /** *

The action to use in the place of the action that results from the rule group * evaluation. Set the override action to none to leave the result of the rule * group alone. Set it to count to override the result to count only.

You * can only use this for rule statements that reference a rule group, like * RuleGroupReferenceStatement and * ManagedRuleGroupStatement.

This option is usually * set to none. It does not affect how the rules in the rule group are evaluated. * If you want the rules in the rule group to only count matches, do not use this * and instead use the rule action override option, with Count action, * in your rule group reference statement settings.

*/ inline const OverrideAction& GetOverrideAction() const{ return m_overrideAction; } /** *

The action to use in the place of the action that results from the rule group * evaluation. Set the override action to none to leave the result of the rule * group alone. Set it to count to override the result to count only.

You * can only use this for rule statements that reference a rule group, like * RuleGroupReferenceStatement and * ManagedRuleGroupStatement.

This option is usually * set to none. It does not affect how the rules in the rule group are evaluated. * If you want the rules in the rule group to only count matches, do not use this * and instead use the rule action override option, with Count action, * in your rule group reference statement settings.

*/ inline bool OverrideActionHasBeenSet() const { return m_overrideActionHasBeenSet; } /** *

The action to use in the place of the action that results from the rule group * evaluation. Set the override action to none to leave the result of the rule * group alone. Set it to count to override the result to count only.

You * can only use this for rule statements that reference a rule group, like * RuleGroupReferenceStatement and * ManagedRuleGroupStatement.

This option is usually * set to none. It does not affect how the rules in the rule group are evaluated. * If you want the rules in the rule group to only count matches, do not use this * and instead use the rule action override option, with Count action, * in your rule group reference statement settings.

*/ inline void SetOverrideAction(const OverrideAction& value) { m_overrideActionHasBeenSet = true; m_overrideAction = value; } /** *

The action to use in the place of the action that results from the rule group * evaluation. Set the override action to none to leave the result of the rule * group alone. Set it to count to override the result to count only.

You * can only use this for rule statements that reference a rule group, like * RuleGroupReferenceStatement and * ManagedRuleGroupStatement.

This option is usually * set to none. It does not affect how the rules in the rule group are evaluated. * If you want the rules in the rule group to only count matches, do not use this * and instead use the rule action override option, with Count action, * in your rule group reference statement settings.

*/ inline void SetOverrideAction(OverrideAction&& value) { m_overrideActionHasBeenSet = true; m_overrideAction = std::move(value); } /** *

The action to use in the place of the action that results from the rule group * evaluation. Set the override action to none to leave the result of the rule * group alone. Set it to count to override the result to count only.

You * can only use this for rule statements that reference a rule group, like * RuleGroupReferenceStatement and * ManagedRuleGroupStatement.

This option is usually * set to none. It does not affect how the rules in the rule group are evaluated. * If you want the rules in the rule group to only count matches, do not use this * and instead use the rule action override option, with Count action, * in your rule group reference statement settings.

*/ inline Rule& WithOverrideAction(const OverrideAction& value) { SetOverrideAction(value); return *this;} /** *

The action to use in the place of the action that results from the rule group * evaluation. Set the override action to none to leave the result of the rule * group alone. Set it to count to override the result to count only.

You * can only use this for rule statements that reference a rule group, like * RuleGroupReferenceStatement and * ManagedRuleGroupStatement.

This option is usually * set to none. It does not affect how the rules in the rule group are evaluated. * If you want the rules in the rule group to only count matches, do not use this * and instead use the rule action override option, with Count action, * in your rule group reference statement settings.

*/ inline Rule& WithOverrideAction(OverrideAction&& value) { SetOverrideAction(std::move(value)); return *this;} /** *

Labels to apply to web requests that match the rule match statement. WAF * applies fully qualified labels to matching web requests. A fully qualified label * is the concatenation of a label namespace and a rule label. The rule's rule * group or web ACL defines the label namespace.

Rules that run after this * rule in the web ACL can match against these labels using a * LabelMatchStatement.

For each label, provide a * case-sensitive string containing optional namespaces and a label name, according * to the following guidelines:

  • Separate each component of the * label with a colon.

  • Each namespace or name can have up to 128 * characters.

  • You can specify up to 5 namespaces in a label.

    *
  • Don't use the following reserved words in your label * specification: aws, waf, managed, * rulegroup, webacl, regexpatternset, or * ipset.

For example, myLabelName or * nameSpace1:nameSpace2:myLabelName.

*/ inline const Aws::Vector