zuplo 6.72.7 → 6.72.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/articles/ddos-protection.mdx +2 -2
- package/docs/articles/limits.mdx +12 -0
- package/docs/articles/local-development-troubleshooting.mdx +12 -3
- package/docs/articles/waf-ddos.mdx +1 -24
- package/docs/policies/akamai-ai-firewall/schema.json +1 -0
- package/docs/policies/akamai-firewall-for-ai-inbound/schema.json +2 -0
- package/docs/policies/akamai-firewall-for-ai-outbound/schema.json +2 -0
- package/docs/policies/amberflo-metering-inbound/schema.json +5 -2
- package/docs/policies/api-key-inbound/schema.json +11 -5
- package/docs/policies/audit-log-inbound/schema.json +2 -0
- package/docs/policies/auth0-jwt-auth-inbound/schema.json +7 -5
- package/docs/policies/authzen-inbound/schema.json +7 -5
- package/docs/policies/axiomatics-authz-inbound/schema.json +14 -6
- package/docs/policies/basic-auth-inbound/schema.json +2 -1
- package/docs/policies/caching-inbound/schema.json +20 -16
- package/docs/policies/clerk-jwt-auth-inbound/schema.json +7 -5
- package/docs/policies/cognito-jwt-auth-inbound/schema.json +7 -5
- package/docs/policies/comet-opik-tracing-inbound/schema.json +1 -0
- package/docs/policies/complex-rate-limit-inbound/schema.json +4 -0
- package/docs/policies/curity-phantom-token-inbound/schema.json +1 -0
- package/docs/policies/data-loss-prevention-inbound/schema.json +15 -12
- package/docs/policies/data-loss-prevention-outbound/schema.json +15 -12
- package/docs/policies/firebase-jwt-inbound/schema.json +7 -5
- package/docs/policies/formdata-to-json-inbound/schema.json +1 -0
- package/docs/policies/galileo-tracing-inbound/schema.json +1 -0
- package/docs/policies/geo-filter-inbound/schema.json +1 -0
- package/docs/policies/graphql-analytics-outbound/schema.json +1 -0
- package/docs/policies/mcp-auth0-oauth-inbound/schema.json +3 -0
- package/docs/policies/mcp-clerk-oauth-inbound/schema.json +3 -0
- package/docs/policies/mcp-cognito-oauth-inbound/schema.json +3 -0
- package/docs/policies/mcp-entra-oauth-inbound/schema.json +3 -0
- package/docs/policies/mcp-google-oauth-inbound/schema.json +3 -0
- package/docs/policies/mcp-keycloak-oauth-inbound/schema.json +3 -0
- package/docs/policies/mcp-logto-oauth-inbound/schema.json +3 -0
- package/docs/policies/mcp-oauth-inbound/schema.json +2 -0
- package/docs/policies/mcp-okta-oauth-inbound/schema.json +3 -0
- package/docs/policies/mcp-onelogin-oauth-inbound/schema.json +3 -0
- package/docs/policies/mcp-ping-oauth-inbound/schema.json +3 -0
- package/docs/policies/mcp-token-exchange-inbound/schema.json +10 -5
- package/docs/policies/mcp-workos-oauth-inbound/schema.json +3 -0
- package/docs/policies/monetization-inbound/schema.json +25 -23
- package/docs/policies/mtls-auth-inbound/schema.json +6 -5
- package/docs/policies/okta-fga-authz-inbound/schema.json +7 -6
- package/docs/policies/okta-jwt-auth-inbound/schema.json +7 -5
- package/docs/policies/open-id-jwt-auth-inbound/schema.json +11 -6
- package/docs/policies/openfga-authz-inbound/schema.json +7 -6
- package/docs/policies/openmeter-inbound/schema.json +23 -19
- package/docs/policies/prompt-injection-outbound/schema.json +6 -5
- package/docs/policies/propel-auth-jwt-inbound/schema.json +7 -5
- package/docs/policies/query-param-to-header-inbound/schema.json +1 -0
- package/docs/policies/quota-inbound/schema.json +9 -6
- package/docs/policies/rate-limit-inbound/schema.json +4 -0
- package/docs/policies/readme-metrics-inbound/schema.json +9 -5
- package/docs/policies/request-size-limit-inbound/schema.json +1 -0
- package/docs/policies/request-validation-inbound/schema.json +8 -6
- package/docs/policies/require-origin-inbound/schema.json +1 -0
- package/docs/policies/semantic-cache-inbound/schema.json +9 -5
- package/docs/policies/set-status-outbound/schema.json +1 -0
- package/docs/policies/set-upstream-api-key-inbound/schema.json +7 -5
- package/docs/policies/stripe-webhook-verification-inbound/schema.json +2 -1
- package/docs/policies/supabase-jwt-auth-inbound/schema.json +7 -5
- package/docs/policies/traffic-splitting-inbound/schema.json +1 -0
- package/docs/policies/upstream-aws-federated-auth-inbound/schema.json +6 -0
- package/docs/policies/upstream-aws-service-auth-inbound/schema.json +8 -0
- package/docs/policies/upstream-azure-ad-service-auth-inbound/schema.json +3 -1
- package/docs/policies/upstream-firebase-admin-auth-inbound/schema.json +2 -0
- package/docs/policies/upstream-firebase-user-auth-inbound/schema.json +8 -5
- package/docs/policies/upstream-gcp-federated-auth-inbound/schema.json +4 -0
- package/docs/policies/upstream-gcp-service-auth-inbound/schema.json +5 -0
- package/docs/policies/upstream-zuplo-jwt-auth-inbound/schema.json +20 -15
- package/docs/policies/web-bot-auth-inbound/schema.json +2 -0
- package/docs/policies/xml-to-json-outbound/schema.json +9 -5
- package/package.json +4 -4
- package/docs/articles/zuplo-waf.mdx +0 -156
|
@@ -49,6 +49,11 @@
|
|
|
49
49
|
"type": "string",
|
|
50
50
|
"description": "The property on the incoming request.user object to retrieve the value of the userId."
|
|
51
51
|
},
|
|
52
|
+
"webApiKey": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"examples": ["$env(WEB_API_KEY)"],
|
|
55
|
+
"description": "The Firebase Web API Key (found in project settings)"
|
|
56
|
+
},
|
|
52
57
|
"developerClaims": {
|
|
53
58
|
"type": "object",
|
|
54
59
|
"tsType": "Record<string, string | number | boolean | null>",
|
|
@@ -73,21 +78,19 @@
|
|
|
73
78
|
"premium": true
|
|
74
79
|
}
|
|
75
80
|
],
|
|
81
|
+
"x-advanced": true,
|
|
76
82
|
"description": "Additional claims to include in the custom token's payload."
|
|
77
83
|
},
|
|
78
|
-
"webApiKey": {
|
|
79
|
-
"type": "string",
|
|
80
|
-
"examples": ["$env(WEB_API_KEY)"],
|
|
81
|
-
"description": "The Firebase Web API Key (found in project settings)"
|
|
82
|
-
},
|
|
83
84
|
"tokenRetries": {
|
|
84
85
|
"type": "number",
|
|
85
86
|
"default": 3,
|
|
87
|
+
"x-advanced": true,
|
|
86
88
|
"description": "The number of times to retry fetching the token in the event of a failure."
|
|
87
89
|
},
|
|
88
90
|
"expirationOffsetSeconds": {
|
|
89
91
|
"type": "number",
|
|
90
92
|
"default": 300,
|
|
93
|
+
"x-advanced": true,
|
|
91
94
|
"description": "The number of seconds less than the token expiration to cache the token."
|
|
92
95
|
}
|
|
93
96
|
}
|
|
@@ -59,23 +59,27 @@
|
|
|
59
59
|
"type": "number",
|
|
60
60
|
"x-show-example": false,
|
|
61
61
|
"default": 3600,
|
|
62
|
+
"x-advanced": true,
|
|
62
63
|
"description": "The lifetime in seconds of the issued token."
|
|
63
64
|
},
|
|
64
65
|
"tokenRetries": {
|
|
65
66
|
"type": "number",
|
|
66
67
|
"x-show-example": false,
|
|
67
68
|
"default": 3,
|
|
69
|
+
"x-advanced": true,
|
|
68
70
|
"description": "The number of times to retry fetching the token in the event of a failure."
|
|
69
71
|
},
|
|
70
72
|
"expirationOffsetSeconds": {
|
|
71
73
|
"type": "number",
|
|
72
74
|
"x-show-example": false,
|
|
73
75
|
"default": 300,
|
|
76
|
+
"x-advanced": true,
|
|
74
77
|
"description": "The number of seconds less than the token expiration to cache the token."
|
|
75
78
|
},
|
|
76
79
|
"useMemoryCacheOnly": {
|
|
77
80
|
"type": "boolean",
|
|
78
81
|
"x-show-example": false,
|
|
82
|
+
"x-advanced": true,
|
|
79
83
|
"description": "This is an advanced option that should only be used if you do not want to persist information in ZoneCache."
|
|
80
84
|
}
|
|
81
85
|
}
|
|
@@ -57,17 +57,20 @@
|
|
|
57
57
|
"type": "number",
|
|
58
58
|
"x-show-example": false,
|
|
59
59
|
"default": 3,
|
|
60
|
+
"x-advanced": true,
|
|
60
61
|
"description": "The number of times to retry fetching the token in the event of a failure."
|
|
61
62
|
},
|
|
62
63
|
"expirationOffsetSeconds": {
|
|
63
64
|
"type": "number",
|
|
64
65
|
"x-show-example": false,
|
|
65
66
|
"default": 300,
|
|
67
|
+
"x-advanced": true,
|
|
66
68
|
"description": "The number of seconds less than the token expiration to cache the token."
|
|
67
69
|
},
|
|
68
70
|
"useMemoryCacheOnly": {
|
|
69
71
|
"type": "boolean",
|
|
70
72
|
"x-show-example": false,
|
|
73
|
+
"x-advanced": true,
|
|
71
74
|
"description": "This is an advanced option that should only be used if you do not want to persist information in ZoneCache."
|
|
72
75
|
},
|
|
73
76
|
"version": {
|
|
@@ -75,12 +78,14 @@
|
|
|
75
78
|
"default": 1,
|
|
76
79
|
"enum": [1, 2],
|
|
77
80
|
"x-show-example": false,
|
|
81
|
+
"x-advanced": true,
|
|
78
82
|
"description": "The version of the policy."
|
|
79
83
|
},
|
|
80
84
|
"enableSuspiciousHeaderWarning": {
|
|
81
85
|
"type": "boolean",
|
|
82
86
|
"default": true,
|
|
83
87
|
"x-show-example": false,
|
|
88
|
+
"x-advanced": true,
|
|
84
89
|
"description": "When `true` (the default), emits a warning if the inbound request carries headers like `X-Serverless-Authorization` or `X-Goog-IAP-JWT-Assertion`. Forwarding those to a downstream Cloud Run typically causes a `the access token could not be verified` 401 because Cloud Run prefers `X-Serverless-Authorization` over `Authorization` for IAM checks. Set this to `false` only if you have intentionally chosen to forward those headers (e.g. the upstream service is also IAP-fronted and expects them) — the warning is otherwise a useful diagnostic signal."
|
|
85
90
|
}
|
|
86
91
|
}
|
|
@@ -40,10 +40,26 @@
|
|
|
40
40
|
"examples": ["https://api.example.com", "my-service"],
|
|
41
41
|
"description": "The audience claim for the JWT."
|
|
42
42
|
},
|
|
43
|
+
"expiresIn": {
|
|
44
|
+
"oneOf": [
|
|
45
|
+
{
|
|
46
|
+
"type": "number",
|
|
47
|
+
"description": "Expiration time in seconds."
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"type": "string",
|
|
51
|
+
"description": "Expiration time as a string."
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
"default": 300,
|
|
55
|
+
"examples": [300, "5m", "1h", "7d"],
|
|
56
|
+
"description": "JWT expiration time. Can be a number (seconds) or a string with units (e.g., '5m' for 5 minutes, '1h' for 1 hour, '7d' for 7 days). Defaults to 300 seconds (5 minutes)."
|
|
57
|
+
},
|
|
43
58
|
"subject": {
|
|
44
59
|
"type": "string",
|
|
45
60
|
"examples": ["zuplo-gateway"],
|
|
46
61
|
"x-show-example": false,
|
|
62
|
+
"x-advanced": true,
|
|
47
63
|
"description": "The subject ('sub') claim for the minted JWT. Identifies the acting subject of the token (typically the gateway itself)."
|
|
48
64
|
},
|
|
49
65
|
"claimsFromUser": {
|
|
@@ -57,18 +73,21 @@
|
|
|
57
73
|
}
|
|
58
74
|
],
|
|
59
75
|
"x-show-example": false,
|
|
76
|
+
"x-advanced": true,
|
|
60
77
|
"description": "Maps claims in the minted JWT to values from the authenticated user (request.user). Each key is the claim name to set; each value is a light JSON-path selector into request.user using dot or bracket notation (e.g. 'sub', 'data.role', or 'data\\[\"https://example.com/claim\"\\]' for keys containing dots or slashes). When set, the policy requires an authenticated user and returns 401 if request.user is absent — it never mints a token with missing identity."
|
|
61
78
|
},
|
|
62
79
|
"headerName": {
|
|
63
80
|
"type": "string",
|
|
64
81
|
"default": "Authorization",
|
|
65
82
|
"examples": ["Authorization", "X-API-Token"],
|
|
83
|
+
"x-advanced": true,
|
|
66
84
|
"description": "The header name where the JWT will be attached. Defaults to 'Authorization'."
|
|
67
85
|
},
|
|
68
86
|
"tokenPrefix": {
|
|
69
87
|
"type": "string",
|
|
70
88
|
"default": "Bearer",
|
|
71
89
|
"examples": ["Bearer", "Token"],
|
|
90
|
+
"x-advanced": true,
|
|
72
91
|
"description": "The prefix to use before the JWT token. Defaults to 'Bearer'. Set to an empty string to send the token without a prefix."
|
|
73
92
|
},
|
|
74
93
|
"additionalClaims": {
|
|
@@ -79,23 +98,9 @@
|
|
|
79
98
|
"custom": "value"
|
|
80
99
|
}
|
|
81
100
|
],
|
|
101
|
+
"x-advanced": true,
|
|
82
102
|
"description": "Additional claims to include in the JWT. These will be merged with the default claims.",
|
|
83
103
|
"additionalProperties": true
|
|
84
|
-
},
|
|
85
|
-
"expiresIn": {
|
|
86
|
-
"oneOf": [
|
|
87
|
-
{
|
|
88
|
-
"type": "number",
|
|
89
|
-
"description": "Expiration time in seconds."
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
"type": "string",
|
|
93
|
-
"description": "Expiration time as a string."
|
|
94
|
-
}
|
|
95
|
-
],
|
|
96
|
-
"default": 300,
|
|
97
|
-
"examples": [300, "5m", "1h", "7d"],
|
|
98
|
-
"description": "JWT expiration time. Can be a number (seconds) or a string with units (e.g., '5m' for 5 minutes, '1h' for 1 hour, '7d' for 7 days). Defaults to 300 seconds (5 minutes)."
|
|
99
104
|
}
|
|
100
105
|
}
|
|
101
106
|
}
|
|
@@ -47,11 +47,13 @@
|
|
|
47
47
|
},
|
|
48
48
|
"allowUnauthenticatedRequests": {
|
|
49
49
|
"type": "boolean",
|
|
50
|
+
"x-advanced": true,
|
|
50
51
|
"description": "Allow requests without bot signatures to proceed. This is useful if you want to use multiple authentication policies or if you want to allow both authenticated and non-authenticated traffic.",
|
|
51
52
|
"default": false
|
|
52
53
|
},
|
|
53
54
|
"directoryUrl": {
|
|
54
55
|
"type": "string",
|
|
56
|
+
"x-advanced": true,
|
|
55
57
|
"description": "Optional URL to a directory of known bots (for verification).",
|
|
56
58
|
"default": null
|
|
57
59
|
}
|
|
@@ -55,29 +55,32 @@
|
|
|
55
55
|
"default": true,
|
|
56
56
|
"description": "Ignore tag attributes."
|
|
57
57
|
},
|
|
58
|
+
"trimValues": {
|
|
59
|
+
"type": "boolean",
|
|
60
|
+
"default": true,
|
|
61
|
+
"description": "Remove surrounding whitespace from tag or attribute value."
|
|
62
|
+
},
|
|
58
63
|
"stopNodes": {
|
|
59
64
|
"type": "array",
|
|
60
65
|
"items": {
|
|
61
66
|
"type": "string"
|
|
62
67
|
},
|
|
63
68
|
"examples": [["root.a", "*.accounts"]],
|
|
69
|
+
"x-advanced": true,
|
|
64
70
|
"description": "At particular point, if you don't want to parse a tag and it's nested tags then you can set their path in stopNodes. You can also set tags which should not be processed irrespective of their path using \\* as the wildcard."
|
|
65
71
|
},
|
|
66
72
|
"attributeNamePrefix": {
|
|
67
73
|
"type": "string",
|
|
68
74
|
"default": "@_",
|
|
75
|
+
"x-advanced": true,
|
|
69
76
|
"description": "The prefix of attribute names in the resulting JS object."
|
|
70
77
|
},
|
|
71
78
|
"textNodeName": {
|
|
72
79
|
"type": "string",
|
|
73
80
|
"default": "#text",
|
|
81
|
+
"x-advanced": true,
|
|
74
82
|
"description": "Text value of a tag is parsed to \\#text property by default."
|
|
75
83
|
},
|
|
76
|
-
"trimValues": {
|
|
77
|
-
"type": "boolean",
|
|
78
|
-
"default": true,
|
|
79
|
-
"description": "Remove surrounding whitespace from tag or attribute value."
|
|
80
|
-
},
|
|
81
84
|
"parseOnStatusCodes": {
|
|
82
85
|
"oneOf": [
|
|
83
86
|
{
|
|
@@ -90,6 +93,7 @@
|
|
|
90
93
|
}
|
|
91
94
|
}
|
|
92
95
|
],
|
|
96
|
+
"x-advanced": true,
|
|
93
97
|
"description": "A list of status codes and ranges \"200-299, 304\" that should the XML parser should run on. If not set, the parser will run on all status codes.",
|
|
94
98
|
"examples": ["200-299"]
|
|
95
99
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zuplo",
|
|
3
|
-
"version": "6.72.
|
|
3
|
+
"version": "6.72.8",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "The programmable API Gateway",
|
|
6
6
|
"author": "Zuplo, Inc.",
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
"zuplo": "zuplo.js"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@zuplo/cli": "6.72.
|
|
23
|
-
"@zuplo/core": "6.72.
|
|
24
|
-
"@zuplo/runtime": "6.72.
|
|
22
|
+
"@zuplo/cli": "6.72.8",
|
|
23
|
+
"@zuplo/core": "6.72.8",
|
|
24
|
+
"@zuplo/runtime": "6.72.8",
|
|
25
25
|
"@zuplo/test": "1.4.0"
|
|
26
26
|
}
|
|
27
27
|
}
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Zuplo Managed WAF
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
Zuplo's Managed WAF provides enterprise customers using our **managed edge
|
|
6
|
-
deployment** with comprehensive security protection purpose-built for API
|
|
7
|
-
Gateways. This service offers multiple layers of protection against common
|
|
8
|
-
threats, attacks, and malicious traffic without requiring you to manage complex
|
|
9
|
-
security configurations.
|
|
10
|
-
|
|
11
|
-
<EnterpriseFeature name="Zuplo Managed WAF" />
|
|
12
|
-
|
|
13
|
-
:::note
|
|
14
|
-
|
|
15
|
-
Zuplo Managed WAF is only available for customers using Zuplo's managed edge
|
|
16
|
-
deployment model. Customers using managed dedicated deployments should refer to
|
|
17
|
-
the [Managed Dedicated WAF Options](#managed-dedicated-waf-options) section
|
|
18
|
-
below.
|
|
19
|
-
|
|
20
|
-
:::
|
|
21
|
-
|
|
22
|
-
## Available Protection Rules
|
|
23
|
-
|
|
24
|
-
### OWASP Core Ruleset
|
|
25
|
-
|
|
26
|
-
Zuplo's Managed WAF includes protection based on the
|
|
27
|
-
[OWASP Core Ruleset](https://owasp.org/www-project-top-ten/), which defends
|
|
28
|
-
against the most critical web application security risks. This includes
|
|
29
|
-
protection against:
|
|
30
|
-
|
|
31
|
-
- **SQL Injection** - Prevents attackers from inserting malicious SQL code
|
|
32
|
-
- **Cross-Site Scripting (XSS)** - Blocks malicious scripts from being injected
|
|
33
|
-
into your API responses
|
|
34
|
-
- **Remote Code Execution** - Prevents attackers from executing arbitrary code
|
|
35
|
-
- **Local File Inclusion** - Blocks attempts to access local server files
|
|
36
|
-
- **Remote File Inclusion** - Prevents loading of remote malicious files
|
|
37
|
-
- **PHP Code Injection** - Blocks malicious PHP code execution attempts
|
|
38
|
-
- **HTTP Protocol Violations** - Detects and blocks malformed HTTP requests
|
|
39
|
-
- **Session Fixation** - Prevents session hijacking attempts
|
|
40
|
-
- **Scanner Detection** - Identifies and blocks automated vulnerability scanners
|
|
41
|
-
- **Metadata/Error Leakages** - Prevents exposure of sensitive system
|
|
42
|
-
information
|
|
43
|
-
|
|
44
|
-
### OFAC Sanctioned Country Blocking
|
|
45
|
-
|
|
46
|
-
Zuplo's Managed WAF includes automatic blocking of traffic from countries on the
|
|
47
|
-
[OFAC Sanctions Programs list](https://ofac.treasury.gov/sanctions-programs-and-country-information).
|
|
48
|
-
This helps ensure compliance with U.S. Treasury regulations by preventing API
|
|
49
|
-
access from sanctioned regions.
|
|
50
|
-
|
|
51
|
-
The blocked country list is automatically updated as OFAC sanctions change,
|
|
52
|
-
ensuring your API remains compliant without manual intervention.
|
|
53
|
-
|
|
54
|
-
### DDoS Protection
|
|
55
|
-
|
|
56
|
-
All Zuplo API Gateways include automatic DDoS protection that defends against:
|
|
57
|
-
|
|
58
|
-
- **Layer 3/4 Attacks** - Network and transport layer flood attacks
|
|
59
|
-
- **Layer 7 Attacks** - Application layer attacks targeting your API endpoints
|
|
60
|
-
- **Amplification Attacks** - DNS, NTP, and other amplification-based attacks
|
|
61
|
-
- **SYN Floods** - TCP connection exhaustion attempts
|
|
62
|
-
- **HTTP Floods** - High-volume HTTP request attacks
|
|
63
|
-
|
|
64
|
-
DDoS protection is always-on and automatically scales to handle attacks of any
|
|
65
|
-
size without impacting legitimate traffic.
|
|
66
|
-
|
|
67
|
-
### Zero-Day Vulnerability Protection
|
|
68
|
-
|
|
69
|
-
Zuplo's Managed WAF includes rapid response protection against emerging threats
|
|
70
|
-
and zero-day vulnerabilities. When critical vulnerabilities are discovered,
|
|
71
|
-
protection rules are automatically deployed across all protected gateways
|
|
72
|
-
without requiring any action from your team.
|
|
73
|
-
|
|
74
|
-
## Custom WAF Rules
|
|
75
|
-
|
|
76
|
-
Enterprise customers can work with Zuplo to create and enable custom WAF rules
|
|
77
|
-
tailored to their specific security requirements. Custom rules can be configured
|
|
78
|
-
to:
|
|
79
|
-
|
|
80
|
-
- Block or allow traffic based on specific patterns
|
|
81
|
-
- Create IP allowlists or blocklists
|
|
82
|
-
- Implement rate limiting for specific endpoints
|
|
83
|
-
- Add custom request validation
|
|
84
|
-
- Create geography-based access controls beyond OFAC requirements
|
|
85
|
-
- Implement custom bot detection and mitigation
|
|
86
|
-
|
|
87
|
-
To discuss custom WAF rule requirements, contact your Zuplo account team.
|
|
88
|
-
|
|
89
|
-
## Enabling Zuplo Managed WAF
|
|
90
|
-
|
|
91
|
-
Zuplo's Managed WAF is available to enterprise customers. The service can be
|
|
92
|
-
enabled with different protection levels based on your security requirements:
|
|
93
|
-
|
|
94
|
-
- **Standard Protection** - OWASP Core Rules and DDoS protection
|
|
95
|
-
- **Enhanced Protection** - Includes OFAC blocking and zero-day protection
|
|
96
|
-
- **Custom Protection** - All features plus custom rules tailored to your needs
|
|
97
|
-
|
|
98
|
-
To enable Zuplo's Managed WAF on your API Gateway, contact our
|
|
99
|
-
[sales team](mailto:sales@zuplo.com).
|
|
100
|
-
|
|
101
|
-
## Benefits
|
|
102
|
-
|
|
103
|
-
- **Edge-deployed protection** - Security rules run at the same edge locations
|
|
104
|
-
as your API, ensuring no additional latency
|
|
105
|
-
- **Automatic updates** - Protection rules are continuously updated without
|
|
106
|
-
requiring deployments
|
|
107
|
-
- **No configuration complexity** - Pre-configured rulesets based on security
|
|
108
|
-
best practices
|
|
109
|
-
- **Compliance support** - Automatic OFAC sanctions compliance
|
|
110
|
-
- **24/7 protection** - Always-on security monitoring and threat mitigation
|
|
111
|
-
|
|
112
|
-
## Complementary Zuplo Policies
|
|
113
|
-
|
|
114
|
-
In addition to Zuplo Managed WAF, you can implement many security features
|
|
115
|
-
directly using Zuplo's built-in policies:
|
|
116
|
-
|
|
117
|
-
- **IP Restriction** - Block or allow specific IP addresses with the
|
|
118
|
-
[IP Restriction policy](../policies/ip-restriction-inbound)
|
|
119
|
-
- **Geolocation Controls** - Route or block requests based on geographic
|
|
120
|
-
location using [custom policies](../guides/geolocation-backend-routing)
|
|
121
|
-
- **Rate Limiting** - Implement granular rate limits with
|
|
122
|
-
[rate limiting policies](../policies/rate-limit-inbound)
|
|
123
|
-
- **Custom Security Rules** - Create any custom security logic with
|
|
124
|
-
[custom code policies](../policies/custom-code-inbound)
|
|
125
|
-
|
|
126
|
-
These policies can be used alongside Zuplo Managed WAF for defense-in-depth
|
|
127
|
-
security or independently for specific security requirements.
|
|
128
|
-
|
|
129
|
-
## Managed Dedicated WAF Options
|
|
130
|
-
|
|
131
|
-
For customers using Zuplo's managed dedicated deployment model, WAF and DDoS
|
|
132
|
-
protection options depend on your chosen cloud provider. Unlike the standardized
|
|
133
|
-
Zuplo Managed WAF available for edge deployments, managed dedicated customers
|
|
134
|
-
can leverage the full range of security services offered by their cloud
|
|
135
|
-
platform.
|
|
136
|
-
|
|
137
|
-
For managed dedicated deployments, our team will:
|
|
138
|
-
|
|
139
|
-
1. Assess your security requirements during the deployment planning phase
|
|
140
|
-
2. Configure the appropriate WAF and DDoS services based on your cloud provider
|
|
141
|
-
3. Implement custom rules and policies specific to your use case
|
|
142
|
-
4. Provide ongoing support for security configuration updates
|
|
143
|
-
|
|
144
|
-
Contact our [sales team](mailto:sales@zuplo.com) to discuss security options for
|
|
145
|
-
your managed dedicated deployment.
|
|
146
|
-
|
|
147
|
-
## Next Steps
|
|
148
|
-
|
|
149
|
-
If you're interested in Zuplo's Managed WAF services for edge deployments or
|
|
150
|
-
need custom security configurations for managed dedicated deployments, contact
|
|
151
|
-
our [sales team](mailto:sales@zuplo.com) to discuss your requirements.
|
|
152
|
-
|
|
153
|
-
For customers requiring full control over WAF configurations, see our guides for
|
|
154
|
-
integrating with [Cloudflare WAF](./waf-ddos.mdx#cloudflare-waf--ddos),
|
|
155
|
-
[Fastly Next-Gen WAF](./waf-ddos-fastly.mdx), or
|
|
156
|
-
[AWS WAF + Shield](./waf-ddos-aws-waf-shield.mdx).
|