如何创建复杂的自定义 AWS WAF JSON 规则?
3 分钟阅读
0
如何创建复杂的自定义 AWS WAF JSON 规则?
解决方法
添加适用于 AWS WAF 的自定义规则时,在规则 JSON 编辑器中创建复杂的自定义规则。在 AWS WAF 控制台的 Web ACL 和规则组中创建和管理规则。您可以在定义规则的规则组或 Web ACL 中按名称访问规则。
如果您的使用案例要求自定义规则需要 AND、OR 或 NOT 逻辑(嵌套语句)的组合,则必须使用 JSON 编辑器创建规则。有关更多信息,请参阅 AWS WAF 规则语句。
提示:您可以使用位于 AWS WAF 控制台的规则可视化编辑器来创建与您的使用案例类似的规则语句。然后,要查看 JSON 语句,请选择规则 JSON 编辑器并在 JSON 编辑器中进行必要的更改。
以下示例提供了可用于创建自己的自定义规则逻辑的参考:
示例 1
这是一个自定义规则语句,如果请求源自 美国 – US 且 URI 为 /wp-admin/ 或 /wp-login/,则允许此请求:
**规则逻辑:**如果请求是(来自美国)且 URI 为(/a 或 /b)。
{ "Name": "test", "Priority": 100, "Statement": { "AndStatement": { "Statements": [ { "GeoMatchStatement": { "CountryCodes": [ "US" ] } }, { "OrStatement": { "Statements": [ { "ByteMatchStatement": { "SearchString": "/wp-admin/", "FieldToMatch": { "UriPath": {} }, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ], "PositionalConstraint": "CONTAINS" } }, { "ByteMatchStatement": { "SearchString": "/wp-login/", "FieldToMatch": { "UriPath": {} }, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ], "PositionalConstraint": "CONTAINS" } } ] } } ] } }, "Action": { "Allow": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "test" } }
示例 2
这是一个自定义规则语句,如果请求的正文中有 XSS 签名,它将阻止此请求,但从检查中排除 URI /test、/login 和 /admin:
**规则逻辑:**如果请求具有(正文中的 XSS 签名)且 URI 不是(/a、/b 或 /c)。
{ "Name": "XSS_Block_Allow_Uploads", "Priority": 100, "Statement": { "AndStatement": { "Statements": [ { "XssMatchStatement": { "FieldToMatch": { "Body": {} }, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ] } }, { "NotStatement": { "Statement": { "OrStatement": { "Statements": [ { "ByteMatchStatement": { "SearchString": "/test", "FieldToMatch": { "UriPath": {} }, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ], "PositionalConstraint": "EXACTLY" } }, { "ByteMatchStatement": { "SearchString": "/admin", "FieldToMatch": { "UriPath": {} }, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ], "PositionalConstraint": "EXACTLY" } }, { "ByteMatchStatement": { "SearchString": "/login", "FieldToMatch": { "UriPath": {} }, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ], "PositionalConstraint": "EXACTLY" } } ] } } } } ] } }, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "XSS_Block_Allow_Uploads" } }
示例 3
这是一个自定义规则语句,如果请求包含自定义标签内部,但主机、IP 和 URI 不是特定的组合,则此语句会阻止请求:
**规则逻辑:**如果请求(包含标签),但不是(URI、IP 和主机),则阻止。
{ "Name": "Block_internal_unauthorized", "Priority": 100, "Statement": { "AndStatement": { "Statements": [ { "LabelMatchStatement": { "Scope": "LABEL", "Key": "internal" } }, { "NotStatement": { "Statement": { "AndStatement": { "Statements": [ { "ByteMatchStatement": { "FieldToMatch": { "UriPath": {} }, "PositionalConstraint": "EXACTLY", "SearchString": "/test", "TextTransformations": [{ "Type": "NONE", "Priority": 0 }] } }, { "IPSetReferenceStatement": { "ARN": "arn:aws:wafv2:us-east-1:xxxxxxxxxxxx:regional/ipset/internal_IPs/xxx-xx-xxx" } }, { "ByteMatchStatement": { "FieldToMatch": { "SingleHeader": { "Name": "host" } }, "PositionalConstraint": "EXACTLY", "SearchString": "example.com", "TextTransformations": [{ "Type": "NONE", "Priority": 0 }] } } ] } } } } ] } }, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "Block_internal_unauthorized" } }
没有评论
相关内容
- 已提问 4 天前lg...
- AWS 官方已更新 4 个月前
- AWS 官方已更新 7 个月前
- AWS 官方已更新 1 年前