如何建立複雜的自訂 AWS WAF JSON 規則?
3 分的閱讀內容
0
如何建立複雜的自訂 AWS WAF JSON 規則?
解決方案
為 AWS WAF 新增自訂規則時,在規則 JSON 編輯器中建立複雜的自訂規則。規則在 Web ACLs 中建立和管理,而規則群組則在 AWS WAF 主控台中建立和管理。您可以在規則群組或定義規則的 Web ACL 中,依名稱存取規則。
如果您的使用案例所需的自訂規則需要 AND、OR 或 NOT 邏輯 (巢狀陳述式),則您必須使用 JSON 編輯器建立規則。如需詳細資訊,請參閱 AWS WAF 規則陳述式。
秘訣:您可以使用 AWS WAF 主控台中的規則視覺化編輯器,來建立與您使用案例相似的規則陳述式。然後,若要檢視 JSON 陳述式,請選擇規則 JSON 編輯器,並在 JSON 編輯器中進行必要的變更。
下列範例提供可用來建立自訂規則邏輯的參考:
範例 1
這是一個自訂規則陳述式,如果它來自 美國且 URI 是 /wp-admin/ 或 /wp-login/,則允許請求:
**規則邏輯:**如果要求是 (來自美國) 且 URI 為 ( /a OR /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 OR /b, OR /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" } }

AWS 官方已更新 10 個月前
沒有評論
相關內容
- 已提問 6 個月前lg...
- 已提問 7 個月前lg...
- 已提問 7 個月前lg...
- AWS 官方已更新 10 個月前
- AWS 官方已更新 1 年前
- AWS 官方已更新 8 個月前
- AWS 官方已更新 1 年前