zuplo 6.67.32 → 6.68.0
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/README.md +9 -0
- package/docs/_index.md +44 -0
- package/docs/ai-gateway/apps.mdx +28 -0
- package/docs/ai-gateway/custom-providers.mdx +54 -0
- package/docs/ai-gateway/getting-started.mdx +224 -0
- package/docs/ai-gateway/guardrails.mdx +65 -0
- package/docs/ai-gateway/integrations/ai-sdk.mdx +109 -0
- package/docs/ai-gateway/integrations/claude-code.mdx +49 -0
- package/docs/ai-gateway/integrations/codex.mdx +78 -0
- package/docs/ai-gateway/integrations/goose.mdx +104 -0
- package/docs/ai-gateway/integrations/langchain.mdx +66 -0
- package/docs/ai-gateway/integrations/openai.mdx +99 -0
- package/docs/ai-gateway/introduction.mdx +85 -0
- package/docs/ai-gateway/managing-apps.mdx +46 -0
- package/docs/ai-gateway/managing-providers.mdx +66 -0
- package/docs/ai-gateway/managing-teams.mdx +63 -0
- package/docs/ai-gateway/policies/akamai-ai-firewall.mdx +125 -0
- package/docs/ai-gateway/policies/comet-opik-tracing.mdx +139 -0
- package/docs/ai-gateway/policies/galileo-tracing.mdx +147 -0
- package/docs/ai-gateway/providers.mdx +32 -0
- package/docs/ai-gateway/teams.mdx +38 -0
- package/docs/ai-gateway/universal-api.mdx +43 -0
- package/docs/ai-gateway/usage-limits.mdx +89 -0
- package/docs/api-management/introduction.md +127 -0
- package/docs/articles/accounts/audit-logs.mdx +227 -0
- package/docs/articles/accounts/billing.mdx +25 -0
- package/docs/articles/accounts/default-api-key.mdx +30 -0
- package/docs/articles/accounts/delete-account.mdx +36 -0
- package/docs/articles/accounts/enterprise-sso.mdx +116 -0
- package/docs/articles/accounts/managing-account-members.mdx +45 -0
- package/docs/articles/accounts/managing-project-members.mdx +37 -0
- package/docs/articles/accounts/members-and-roles.mdx +21 -0
- package/docs/articles/accounts/roles-and-permissions.mdx +115 -0
- package/docs/articles/accounts/zuplo-api-keys.mdx +94 -0
- package/docs/articles/add-api-to-backstage.mdx +216 -0
- package/docs/articles/advanced-path-matching.mdx +139 -0
- package/docs/articles/api-key-administration.mdx +47 -0
- package/docs/articles/api-key-api.mdx +220 -0
- package/docs/articles/api-key-authentication.mdx +195 -0
- package/docs/articles/api-key-buckets.mdx +61 -0
- package/docs/articles/api-key-end-users.mdx +52 -0
- package/docs/articles/api-key-leak-detection.mdx +75 -0
- package/docs/articles/api-key-management.mdx +100 -0
- package/docs/articles/api-key-react-component.mdx +90 -0
- package/docs/articles/api-key-service-limits.mdx +14 -0
- package/docs/articles/archiving-requests-to-storage.mdx +119 -0
- package/docs/articles/branch-based-deployments.mdx +184 -0
- package/docs/articles/bypass-policy-for-testing.mdx +117 -0
- package/docs/articles/check-ip-address.mdx +17 -0
- package/docs/articles/ci-cd-azure/basic-deployment.mdx +49 -0
- package/docs/articles/ci-cd-azure/deploy-and-test.mdx +47 -0
- package/docs/articles/ci-cd-azure/local-testing.mdx +59 -0
- package/docs/articles/ci-cd-azure/multi-stage-deployment.mdx +88 -0
- package/docs/articles/ci-cd-azure/pr-preview-environments.mdx +50 -0
- package/docs/articles/ci-cd-azure/tag-based-releases.mdx +37 -0
- package/docs/articles/ci-cd-bitbucket/basic-deployment.mdx +27 -0
- package/docs/articles/ci-cd-bitbucket/deploy-and-test.mdx +41 -0
- package/docs/articles/ci-cd-bitbucket/local-testing.mdx +34 -0
- package/docs/articles/ci-cd-bitbucket/multi-stage-deployment.mdx +52 -0
- package/docs/articles/ci-cd-bitbucket/pr-preview-environments.mdx +46 -0
- package/docs/articles/ci-cd-bitbucket/tag-based-releases.mdx +27 -0
- package/docs/articles/ci-cd-circleci/basic-deployment.mdx +34 -0
- package/docs/articles/ci-cd-circleci/deploy-and-test.mdx +44 -0
- package/docs/articles/ci-cd-circleci/local-testing.mdx +50 -0
- package/docs/articles/ci-cd-circleci/multi-stage-deployment.mdx +82 -0
- package/docs/articles/ci-cd-circleci/pr-preview-environments.mdx +47 -0
- package/docs/articles/ci-cd-circleci/tag-based-releases.mdx +38 -0
- package/docs/articles/ci-cd-github/basic-deployment.mdx +48 -0
- package/docs/articles/ci-cd-github/cleanup-on-branch-delete.mdx +123 -0
- package/docs/articles/ci-cd-github/deploy-and-test.mdx +82 -0
- package/docs/articles/ci-cd-github/local-testing.mdx +102 -0
- package/docs/articles/ci-cd-github/multi-stage-deployment.mdx +136 -0
- package/docs/articles/ci-cd-github/pr-preview-environments.mdx +106 -0
- package/docs/articles/ci-cd-github/tag-based-releases.mdx +99 -0
- package/docs/articles/ci-cd-gitlab/basic-deployment.mdx +28 -0
- package/docs/articles/ci-cd-gitlab/deploy-and-test.mdx +44 -0
- package/docs/articles/ci-cd-gitlab/local-testing.mdx +39 -0
- package/docs/articles/ci-cd-gitlab/mr-preview-environments.mdx +52 -0
- package/docs/articles/ci-cd-gitlab/multi-stage-deployment.mdx +64 -0
- package/docs/articles/ci-cd-gitlab/tag-based-releases.mdx +28 -0
- package/docs/articles/composite-policy-reference.mdx +284 -0
- package/docs/articles/configuring-auth0-for-mcp-auth.mdx +186 -0
- package/docs/articles/configuring-okta-for-mcp-auth.mdx +208 -0
- package/docs/articles/convert-urls-to-openapi.mdx +62 -0
- package/docs/articles/cors.mdx +447 -0
- package/docs/articles/custom-audit-log-policy.mdx +95 -0
- package/docs/articles/custom-ci-cd-azure.mdx +81 -0
- package/docs/articles/custom-ci-cd-bitbucket.mdx +80 -0
- package/docs/articles/custom-ci-cd-circleci.mdx +78 -0
- package/docs/articles/custom-ci-cd-github.mdx +99 -0
- package/docs/articles/custom-ci-cd-gitlab.mdx +79 -0
- package/docs/articles/custom-ci-cd.mdx +82 -0
- package/docs/articles/custom-code-patterns.md +418 -0
- package/docs/articles/custom-domains.mdx +258 -0
- package/docs/articles/custom-logging-example.mdx +139 -0
- package/docs/articles/ddos-protection.mdx +138 -0
- package/docs/articles/development-options.mdx +49 -0
- package/docs/articles/environment-variables.mdx +134 -0
- package/docs/articles/environments.mdx +143 -0
- package/docs/articles/fastly-zuplo-host-setup.mdx +41 -0
- package/docs/articles/github-deployment-testing.mdx +101 -0
- package/docs/articles/gke-with-upstream-auth-policy.mdx +192 -0
- package/docs/articles/graphql-security.mdx +180 -0
- package/docs/articles/handling-form-data.mdx +61 -0
- package/docs/articles/health-checks.mdx +109 -0
- package/docs/articles/hosting-options.mdx +70 -0
- package/docs/articles/lazy-load-configuration-into-cache.mdx +92 -0
- package/docs/articles/limits.mdx +98 -0
- package/docs/articles/local-development-debugging.mdx +44 -0
- package/docs/articles/local-development-env-variables.mdx +23 -0
- package/docs/articles/local-development-installing-packages.mdx +23 -0
- package/docs/articles/local-development-routes-designer.mdx +27 -0
- package/docs/articles/local-development-services.mdx +40 -0
- package/docs/articles/local-development-troubleshooting.mdx +56 -0
- package/docs/articles/local-development.mdx +81 -0
- package/docs/articles/log-plugin-aws-cloudwatch.mdx +83 -0
- package/docs/articles/log-plugin-datadog.mdx +84 -0
- package/docs/articles/log-plugin-dynatrace.mdx +75 -0
- package/docs/articles/log-plugin-gcp.mdx +75 -0
- package/docs/articles/log-plugin-loki.mdx +136 -0
- package/docs/articles/log-plugin-new-relic.mdx +84 -0
- package/docs/articles/log-plugin-splunk.mdx +104 -0
- package/docs/articles/log-plugin-sumo.mdx +73 -0
- package/docs/articles/log-plugin-vmware-log-insight.mdx +154 -0
- package/docs/articles/log-request-response-data.mdx +398 -0
- package/docs/articles/logging.mdx +115 -0
- package/docs/articles/manual-mcp-oauth-testing.mdx +193 -0
- package/docs/articles/mcp-quickstart.mdx +135 -0
- package/docs/articles/metrics-plugins.mdx +371 -0
- package/docs/articles/migrate-from-apigee.md +408 -0
- package/docs/articles/migrate-from-aws-api-gateway.md +248 -0
- package/docs/articles/migrate-from-azure-apim.md +292 -0
- package/docs/articles/migrate-from-kong.md +300 -0
- package/docs/articles/migration-overview.md +81 -0
- package/docs/articles/monetization/api-access.mdx +69 -0
- package/docs/articles/monetization/billing-models.md +520 -0
- package/docs/articles/monetization/developer-portal.md +167 -0
- package/docs/articles/monetization/features.mdx +98 -0
- package/docs/articles/monetization/index.mdx +113 -0
- package/docs/articles/monetization/meters.mdx +135 -0
- package/docs/articles/monetization/monetization-policy.md +314 -0
- package/docs/articles/monetization/plan-examples.mdx +366 -0
- package/docs/articles/monetization/plans.mdx +266 -0
- package/docs/articles/monetization/pricing-models.mdx +225 -0
- package/docs/articles/monetization/private-plans.md +154 -0
- package/docs/articles/monetization/quickstart.md +355 -0
- package/docs/articles/monetization/rate-cards.mdx +171 -0
- package/docs/articles/monetization/stripe-integration.md +195 -0
- package/docs/articles/monetization/subscription-lifecycle.md +298 -0
- package/docs/articles/monetization/tax-collection.md +166 -0
- package/docs/articles/monetization/troubleshooting.md +272 -0
- package/docs/articles/monetization-custom.mdx +71 -0
- package/docs/articles/monetization-integrations.mdx +104 -0
- package/docs/articles/monitoring-your-gateway.mdx +53 -0
- package/docs/articles/monorepo-deployment.mdx +350 -0
- package/docs/articles/multiple-auth-policies.mdx +81 -0
- package/docs/articles/non-standard-ports.mdx +30 -0
- package/docs/articles/oauth-authentication.mdx +54 -0
- package/docs/articles/openapi-server-urls.mdx +60 -0
- package/docs/articles/openapi.mdx +130 -0
- package/docs/articles/opentelemetry.mdx +250 -0
- package/docs/articles/per-user-rate-limits-using-db.mdx +112 -0
- package/docs/articles/performance-testing.mdx +304 -0
- package/docs/articles/plugin-akamai-api-security.mdx +76 -0
- package/docs/articles/plugin-azure-blob.mdx +73 -0
- package/docs/articles/plugin-azure-event-hubs.mdx +64 -0
- package/docs/articles/plugin-hydrolix-traffic-peak.mdx +147 -0
- package/docs/articles/policies.mdx +33 -0
- package/docs/articles/rename-or-move-project.mdx +39 -0
- package/docs/articles/rick-and-morty-api-developer-portal-example.mdx +23 -0
- package/docs/articles/routing.mdx +193 -0
- package/docs/articles/s3-signed-url-uploads.mdx +521 -0
- package/docs/articles/secure-tunnel.mdx +84 -0
- package/docs/articles/securing-backend-mtls.mdx +268 -0
- package/docs/articles/securing-your-backend.mdx +148 -0
- package/docs/articles/security.mdx +105 -0
- package/docs/articles/sharing-code-across-projects.mdx +412 -0
- package/docs/articles/source-control-setup-azure.mdx +13 -0
- package/docs/articles/source-control-setup-bitbucket.mdx +43 -0
- package/docs/articles/source-control-setup-github.mdx +172 -0
- package/docs/articles/source-control-setup-gitlab.mdx +12 -0
- package/docs/articles/source-control.mdx +80 -0
- package/docs/articles/step-1-setup-basic-gateway-local.mdx +136 -0
- package/docs/articles/step-1-setup-basic-gateway.mdx +118 -0
- package/docs/articles/step-2-add-rate-limiting-local.mdx +126 -0
- package/docs/articles/step-2-add-rate-limiting.mdx +82 -0
- package/docs/articles/step-3-add-api-key-auth-local.mdx +199 -0
- package/docs/articles/step-3-add-api-key-auth.mdx +166 -0
- package/docs/articles/step-4-deploying-to-the-edge.mdx +220 -0
- package/docs/articles/step-5-dynamic-rate-limiting.mdx +167 -0
- package/docs/articles/support.mdx +144 -0
- package/docs/articles/terraform.mdx +114 -0
- package/docs/articles/testing-graphql.mdx +34 -0
- package/docs/articles/testing.mdx +522 -0
- package/docs/articles/troubleshooting-slow-responses.mdx +301 -0
- package/docs/articles/troubleshooting.md +302 -0
- package/docs/articles/tsconfig.mdx +105 -0
- package/docs/articles/tunnel-setup.mdx +195 -0
- package/docs/articles/tunnel-troubleshooting.mdx +50 -0
- package/docs/articles/update-zup-in-github-action.mdx +110 -0
- package/docs/articles/use-openapi-extension-data.mdx +79 -0
- package/docs/articles/users/multifactor-authentication.mdx +64 -0
- package/docs/articles/users/profile.mdx +13 -0
- package/docs/articles/versioning-on-zuplo.mdx +89 -0
- package/docs/articles/waf-ddos-akamai.md +133 -0
- package/docs/articles/waf-ddos-aws-waf-shield.mdx +85 -0
- package/docs/articles/waf-ddos-fastly.mdx +251 -0
- package/docs/articles/waf-ddos.mdx +140 -0
- package/docs/articles/zuplo-waf.mdx +156 -0
- package/docs/ask.mdx +3 -0
- package/docs/cli/authentication.mdx +56 -0
- package/docs/cli/connectivity.mdx +38 -0
- package/docs/cli/create-zuplo-api.mdx +80 -0
- package/docs/cli/delete.mdx +79 -0
- package/docs/cli/deploy.mdx +156 -0
- package/docs/cli/deploy.partial.mdx +46 -0
- package/docs/cli/dev.mdx +115 -0
- package/docs/cli/docs.mdx +66 -0
- package/docs/cli/editor.mdx +50 -0
- package/docs/cli/global-options.mdx +19 -0
- package/docs/cli/init.mdx +74 -0
- package/docs/cli/link.mdx +74 -0
- package/docs/cli/list.mdx +55 -0
- package/docs/cli/mtls-certificate-create.mdx +94 -0
- package/docs/cli/mtls-certificate-delete.mdx +55 -0
- package/docs/cli/mtls-certificate-describe.mdx +55 -0
- package/docs/cli/mtls-certificate-disable.mdx +55 -0
- package/docs/cli/mtls-certificate-list.mdx +47 -0
- package/docs/cli/mtls-certificate-update.mdx +72 -0
- package/docs/cli/openapi-convert.mdx +111 -0
- package/docs/cli/openapi-merge.mdx +138 -0
- package/docs/cli/openapi-merge.partial.mdx +29 -0
- package/docs/cli/openapi-overlay.mdx +123 -0
- package/docs/cli/overview.mdx +78 -0
- package/docs/cli/project-create.mdx +43 -0
- package/docs/cli/source-migrate.mdx +18 -0
- package/docs/cli/source-upgrade.mdx +41 -0
- package/docs/cli/test.mdx +70 -0
- package/docs/cli/test.partial.mdx +7 -0
- package/docs/cli/tunnel-create.mdx +53 -0
- package/docs/cli/tunnel-create.partial.mdx +9 -0
- package/docs/cli/tunnel-delete.mdx +35 -0
- package/docs/cli/tunnel-delete.partial.mdx +9 -0
- package/docs/cli/tunnel-describe.mdx +45 -0
- package/docs/cli/tunnel-describe.partial.mdx +5 -0
- package/docs/cli/tunnel-list.mdx +35 -0
- package/docs/cli/tunnel-list.partial.mdx +9 -0
- package/docs/cli/tunnel-rate-token.partial.mdx +9 -0
- package/docs/cli/tunnel-rotate-token.mdx +39 -0
- package/docs/cli/tunnel-services-describe.mdx +45 -0
- package/docs/cli/tunnel-services-describe.partial.mdx +9 -0
- package/docs/cli/tunnel-services-update.mdx +48 -0
- package/docs/cli/variable-create.mdx +91 -0
- package/docs/cli/variable-create.partial.mdx +5 -0
- package/docs/cli/variable-update.mdx +75 -0
- package/docs/cli/variable-update.partial.mdx +5 -0
- package/docs/concepts/api-keys.md +146 -0
- package/docs/concepts/authentication.mdx +109 -0
- package/docs/concepts/how-zuplo-works.mdx +120 -0
- package/docs/concepts/project-structure.mdx +174 -0
- package/docs/concepts/rate-limiting.md +246 -0
- package/docs/concepts/request-lifecycle.mdx +56 -0
- package/docs/concepts/source-control-and-deployment.mdx +229 -0
- package/docs/conferences/conference-prize-terms.mdx +80 -0
- package/docs/dedicated/akamai/ai-powered-applications.mdx +223 -0
- package/docs/dedicated/akamai/architecture.mdx +280 -0
- package/docs/dedicated/akamai/caching.mdx +212 -0
- package/docs/dedicated/akamai/cdn.mdx +156 -0
- package/docs/dedicated/architecture.mdx +208 -0
- package/docs/dedicated/custom-domains.mdx +31 -0
- package/docs/dedicated/federated-gateways.mdx +80 -0
- package/docs/dedicated/networking.mdx +69 -0
- package/docs/dedicated/overview.mdx +80 -0
- package/docs/dedicated/source-control.mdx +63 -0
- package/docs/dev-portal/dev-portal-create-consumer-on-auth.mdx +134 -0
- package/docs/dev-portal/introduction.mdx +65 -0
- package/docs/dev-portal/local-development.mdx +72 -0
- package/docs/dev-portal/migration.mdx +526 -0
- package/docs/dev-portal/node-modules.mdx +45 -0
- package/docs/dev-portal/updating.mdx +28 -0
- package/docs/dev-portal/zudoku/components/alert.mdx +130 -0
- package/docs/dev-portal/zudoku/components/badge.mdx +70 -0
- package/docs/dev-portal/zudoku/components/button.mdx +132 -0
- package/docs/dev-portal/zudoku/components/callout.mdx +112 -0
- package/docs/dev-portal/zudoku/components/card.mdx +104 -0
- package/docs/dev-portal/zudoku/components/checkbox.mdx +72 -0
- package/docs/dev-portal/zudoku/components/client-only.mdx +79 -0
- package/docs/dev-portal/zudoku/components/code-tabs.mdx +179 -0
- package/docs/dev-portal/zudoku/components/dialog.mdx +167 -0
- package/docs/dev-portal/zudoku/components/head.mdx +199 -0
- package/docs/dev-portal/zudoku/components/icons.mdx +27 -0
- package/docs/dev-portal/zudoku/components/input.mdx +96 -0
- package/docs/dev-portal/zudoku/components/label.mdx +86 -0
- package/docs/dev-portal/zudoku/components/link.mdx +242 -0
- package/docs/dev-portal/zudoku/components/markdown.mdx +151 -0
- package/docs/dev-portal/zudoku/components/mermaid.mdx +81 -0
- package/docs/dev-portal/zudoku/components/playground.mdx +87 -0
- package/docs/dev-portal/zudoku/components/secret.mdx +78 -0
- package/docs/dev-portal/zudoku/components/select.mdx +176 -0
- package/docs/dev-portal/zudoku/components/shadcn.mdx +73 -0
- package/docs/dev-portal/zudoku/components/slider.mdx +108 -0
- package/docs/dev-portal/zudoku/components/slot.mdx +119 -0
- package/docs/dev-portal/zudoku/components/stepper.mdx +138 -0
- package/docs/dev-portal/zudoku/components/switch.mdx +96 -0
- package/docs/dev-portal/zudoku/components/syntax-highlight.mdx +602 -0
- package/docs/dev-portal/zudoku/components/textarea.mdx +78 -0
- package/docs/dev-portal/zudoku/components/tooltip.mdx +195 -0
- package/docs/dev-portal/zudoku/components/typography.mdx +61 -0
- package/docs/dev-portal/zudoku/configuration/ai-assistants.md +64 -0
- package/docs/dev-portal/zudoku/configuration/api-catalog.md +108 -0
- package/docs/dev-portal/zudoku/configuration/api-reference.md +397 -0
- package/docs/dev-portal/zudoku/configuration/authentication-auth0.md +173 -0
- package/docs/dev-portal/zudoku/configuration/authentication-azure-ad.md +238 -0
- package/docs/dev-portal/zudoku/configuration/authentication-clerk.md +110 -0
- package/docs/dev-portal/zudoku/configuration/authentication-firebase.md +61 -0
- package/docs/dev-portal/zudoku/configuration/authentication-pingfederate.md +136 -0
- package/docs/dev-portal/zudoku/configuration/authentication-supabase.md +225 -0
- package/docs/dev-portal/zudoku/configuration/authentication.md +199 -0
- package/docs/dev-portal/zudoku/configuration/build-configuration.mdx +147 -0
- package/docs/dev-portal/zudoku/configuration/docs.md +282 -0
- package/docs/dev-portal/zudoku/configuration/footer.mdx +214 -0
- package/docs/dev-portal/zudoku/configuration/llms.md +89 -0
- package/docs/dev-portal/zudoku/configuration/navigation.mdx +408 -0
- package/docs/dev-portal/zudoku/configuration/overview.md +380 -0
- package/docs/dev-portal/zudoku/configuration/protected-routes.md +149 -0
- package/docs/dev-portal/zudoku/configuration/search.md +169 -0
- package/docs/dev-portal/zudoku/configuration/sentry.mdx +44 -0
- package/docs/dev-portal/zudoku/configuration/site.md +124 -0
- package/docs/dev-portal/zudoku/configuration/slots.mdx +124 -0
- package/docs/dev-portal/zudoku/configuration/vite-config.md +18 -0
- package/docs/dev-portal/zudoku/custom-plugins.md +287 -0
- package/docs/dev-portal/zudoku/customization/colors-theme.mdx +275 -0
- package/docs/dev-portal/zudoku/customization/fonts.md +110 -0
- package/docs/dev-portal/zudoku/extending/events.md +124 -0
- package/docs/dev-portal/zudoku/guides/custom-pages.md +106 -0
- package/docs/dev-portal/zudoku/guides/environment-variables.md +99 -0
- package/docs/dev-portal/zudoku/guides/mermaid.mdx +70 -0
- package/docs/dev-portal/zudoku/guides/navigation-migration.md +87 -0
- package/docs/dev-portal/zudoku/guides/navigation-rules.mdx +197 -0
- package/docs/dev-portal/zudoku/guides/processors.mdx +234 -0
- package/docs/dev-portal/zudoku/guides/static-files.md +55 -0
- package/docs/dev-portal/zudoku/guides/transforming-examples.md +156 -0
- package/docs/dev-portal/zudoku/guides/using-multiple-apis.md +87 -0
- package/docs/dev-portal/zudoku/markdown/admonitions.md +128 -0
- package/docs/dev-portal/zudoku/markdown/code-blocks.md +196 -0
- package/docs/dev-portal/zudoku/markdown/frontmatter.md +172 -0
- package/docs/dev-portal/zudoku/markdown/mdx.md +68 -0
- package/docs/dev-portal/zudoku/markdown/overview.md +275 -0
- package/docs/dev-portal/zudoku/plugins.md +5 -0
- package/docs/dev-portal/zudoku/writing.mdx +72 -0
- package/docs/errors/bad-request.mdx +39 -0
- package/docs/errors/build-error.mdx +45 -0
- package/docs/errors/fatal-project-error.mdx +39 -0
- package/docs/errors/gateway-timeout.mdx +33 -0
- package/docs/errors/get-head-body-error.mdx +41 -0
- package/docs/errors/main-mod-error.mdx +40 -0
- package/docs/errors/no-project-set.mdx +41 -0
- package/docs/errors/not-found.mdx +43 -0
- package/docs/errors/rate-limit-exceeded.mdx +31 -0
- package/docs/errors/schema-validation-failed.mdx +51 -0
- package/docs/errors/system-configuration-error.mdx +44 -0
- package/docs/errors/unauthorized.mdx +50 -0
- package/docs/errors/unknown-error.mdx +42 -0
- package/docs/errors.mdx +14 -0
- package/docs/guides/canary-routing-for-employees.mdx +385 -0
- package/docs/guides/geolocation-backend-routing.mdx +404 -0
- package/docs/guides/modify-openapi-paths.mdx +371 -0
- package/docs/guides/openapi-overlays.mdx +492 -0
- package/docs/guides/overview.mdx +12 -0
- package/docs/guides/user-based-backend-routing.mdx +437 -0
- package/docs/handlers/aws-lambda.mdx +201 -0
- package/docs/handlers/custom-handler.mdx +112 -0
- package/docs/handlers/legacy-dev-portal-handler.mdx +135 -0
- package/docs/handlers/mcp-server.mdx +730 -0
- package/docs/handlers/openapi.mdx +78 -0
- package/docs/handlers/redirect.mdx +115 -0
- package/docs/handlers/system-handlers.mdx +41 -0
- package/docs/handlers/url-forward.mdx +204 -0
- package/docs/handlers/url-rewrite.mdx +224 -0
- package/docs/handlers/websocket-handler.mdx +154 -0
- package/docs/home.mdx +6 -0
- package/docs/managed-edge/overview.md +78 -0
- package/docs/mcp-server/configuration-migration-guide.mdx +344 -0
- package/docs/mcp-server/custom-tools.mdx +487 -0
- package/docs/mcp-server/graphql.mdx +241 -0
- package/docs/mcp-server/introduction.mdx +122 -0
- package/docs/mcp-server/openai-apps-sdk.mdx +160 -0
- package/docs/mcp-server/prompts.mdx +283 -0
- package/docs/mcp-server/resources.mdx +288 -0
- package/docs/mcp-server/testing.mdx +53 -0
- package/docs/mcp-server/tools.mdx +306 -0
- package/docs/policies/_index.md +92 -0
- package/docs/policies/ab-test-inbound/intro.md +8 -0
- package/docs/policies/ab-test-inbound/policy.ts +14 -0
- package/docs/policies/ab-test-inbound/schema.json +27 -0
- package/docs/policies/ab-test-outbound/intro.md +8 -0
- package/docs/policies/ab-test-outbound/policy.ts +26 -0
- package/docs/policies/ab-test-outbound/schema.json +27 -0
- package/docs/policies/acl-policy-inbound/intro.md +5 -0
- package/docs/policies/acl-policy-inbound/policy.ts +32 -0
- package/docs/policies/acl-policy-inbound/schema.json +52 -0
- package/docs/policies/akamai-ai-firewall/schema.json +98 -0
- package/docs/policies/amberflo-metering-inbound/doc.md +183 -0
- package/docs/policies/amberflo-metering-inbound/intro.md +20 -0
- package/docs/policies/amberflo-metering-inbound/schema.json +108 -0
- package/docs/policies/api-key-inbound/doc.md +77 -0
- package/docs/policies/api-key-inbound/intro.md +30 -0
- package/docs/policies/api-key-inbound/schema.json +84 -0
- package/docs/policies/archive-request-aws-s3-inbound/intro.md +4 -0
- package/docs/policies/archive-request-aws-s3-inbound/policy.ts +58 -0
- package/docs/policies/archive-request-aws-s3-inbound/schema.json +68 -0
- package/docs/policies/archive-request-azure-storage-inbound/doc.md +31 -0
- package/docs/policies/archive-request-azure-storage-inbound/intro.md +4 -0
- package/docs/policies/archive-request-azure-storage-inbound/policy.ts +54 -0
- package/docs/policies/archive-request-azure-storage-inbound/schema.json +53 -0
- package/docs/policies/archive-request-gcp-storage-inbound/doc.md +63 -0
- package/docs/policies/archive-request-gcp-storage-inbound/intro.md +4 -0
- package/docs/policies/archive-request-gcp-storage-inbound/policy.ts +68 -0
- package/docs/policies/archive-request-gcp-storage-inbound/schema.json +47 -0
- package/docs/policies/archive-response-aws-s3-outbound/intro.md +2 -0
- package/docs/policies/archive-response-aws-s3-outbound/policy.ts +59 -0
- package/docs/policies/archive-response-aws-s3-outbound/schema.json +68 -0
- package/docs/policies/archive-response-azure-storage-outbound/doc.md +31 -0
- package/docs/policies/archive-response-azure-storage-outbound/intro.md +3 -0
- package/docs/policies/archive-response-azure-storage-outbound/policy.ts +54 -0
- package/docs/policies/archive-response-azure-storage-outbound/schema.json +53 -0
- package/docs/policies/audit-log-inbound/doc.md +78 -0
- package/docs/policies/audit-log-inbound/intro.md +10 -0
- package/docs/policies/audit-log-inbound/schema.json +81 -0
- package/docs/policies/auth0-jwt-auth-inbound/doc.md +125 -0
- package/docs/policies/auth0-jwt-auth-inbound/intro.md +17 -0
- package/docs/policies/auth0-jwt-auth-inbound/schema.json +74 -0
- package/docs/policies/authzen-inbound/doc.md +24 -0
- package/docs/policies/authzen-inbound/intro.md +31 -0
- package/docs/policies/authzen-inbound/schema.json +126 -0
- package/docs/policies/axiomatics-authz-inbound/doc.md +144 -0
- package/docs/policies/axiomatics-authz-inbound/intro.md +11 -0
- package/docs/policies/axiomatics-authz-inbound/schema.json +161 -0
- package/docs/policies/basic-auth-inbound/intro.md +9 -0
- package/docs/policies/basic-auth-inbound/schema.json +99 -0
- package/docs/policies/bot-detection-inbound/intro.md +4 -0
- package/docs/policies/bot-detection-inbound/schema.json +56 -0
- package/docs/policies/brownout-inbound/doc.md +55 -0
- package/docs/policies/brownout-inbound/intro.md +12 -0
- package/docs/policies/brownout-inbound/schema.json +115 -0
- package/docs/policies/caching-inbound/doc.md +209 -0
- package/docs/policies/caching-inbound/intro.md +23 -0
- package/docs/policies/caching-inbound/schema.json +98 -0
- package/docs/policies/change-method-inbound/schema.json +56 -0
- package/docs/policies/clear-headers-inbound/schema.json +59 -0
- package/docs/policies/clear-headers-outbound/schema.json +59 -0
- package/docs/policies/clerk-jwt-auth-inbound/doc.md +85 -0
- package/docs/policies/clerk-jwt-auth-inbound/intro.md +4 -0
- package/docs/policies/clerk-jwt-auth-inbound/schema.json +68 -0
- package/docs/policies/cognito-jwt-auth-inbound/intro.md +7 -0
- package/docs/policies/cognito-jwt-auth-inbound/schema.json +74 -0
- package/docs/policies/comet-opik-tracing-inbound/schema.json +65 -0
- package/docs/policies/complex-rate-limit-inbound/doc.md +20 -0
- package/docs/policies/complex-rate-limit-inbound/intro.md +23 -0
- package/docs/policies/complex-rate-limit-inbound/schema.json +142 -0
- package/docs/policies/composite-inbound/doc.md +69 -0
- package/docs/policies/composite-inbound/intro.md +15 -0
- package/docs/policies/composite-inbound/schema.json +59 -0
- package/docs/policies/composite-outbound/intro.md +6 -0
- package/docs/policies/composite-outbound/schema.json +59 -0
- package/docs/policies/curity-phantom-token-inbound/doc.md +109 -0
- package/docs/policies/curity-phantom-token-inbound/intro.md +3 -0
- package/docs/policies/curity-phantom-token-inbound/schema.json +68 -0
- package/docs/policies/custom-code-inbound/doc.md +267 -0
- package/docs/policies/custom-code-inbound/intro.md +2 -0
- package/docs/policies/custom-code-inbound/schema.json +48 -0
- package/docs/policies/custom-code-outbound/doc.md +235 -0
- package/docs/policies/custom-code-outbound/intro.md +2 -0
- package/docs/policies/custom-code-outbound/schema.json +43 -0
- package/docs/policies/firebase-jwt-inbound/intro.md +6 -0
- package/docs/policies/firebase-jwt-inbound/schema.json +68 -0
- package/docs/policies/formdata-to-json-inbound/schema.json +60 -0
- package/docs/policies/galileo-tracing-inbound/schema.json +65 -0
- package/docs/policies/geo-filter-inbound/doc.md +33 -0
- package/docs/policies/geo-filter-inbound/schema.json +108 -0
- package/docs/policies/graphql-complexity-limit-inbound/doc.md +48 -0
- package/docs/policies/graphql-complexity-limit-inbound/intro.md +2 -0
- package/docs/policies/graphql-complexity-limit-inbound/schema.json +90 -0
- package/docs/policies/graphql-disable-introspection-inbound/doc.md +66 -0
- package/docs/policies/graphql-disable-introspection-inbound/intro.md +15 -0
- package/docs/policies/graphql-disable-introspection-inbound/schema.json +48 -0
- package/docs/policies/graphql-introspection-filter-outbound/doc.md +148 -0
- package/docs/policies/graphql-introspection-filter-outbound/schema.json +79 -0
- package/docs/policies/hmac-auth-inbound/doc.md +30 -0
- package/docs/policies/hmac-auth-inbound/intro.md +10 -0
- package/docs/policies/hmac-auth-inbound/policy.ts +70 -0
- package/docs/policies/hmac-auth-inbound/schema.json +53 -0
- package/docs/policies/http-deprecation-outbound/doc.md +73 -0
- package/docs/policies/http-deprecation-outbound/schema.json +83 -0
- package/docs/policies/ip-restriction-inbound/intro.md +8 -0
- package/docs/policies/ip-restriction-inbound/policy.ts +40 -0
- package/docs/policies/ip-restriction-inbound/schema.json +58 -0
- package/docs/policies/jwt-scopes-inbound/schema.json +59 -0
- package/docs/policies/ldap-auth-inbound/schema.json +56 -0
- package/docs/policies/mock-api-inbound/schema.json +72 -0
- package/docs/policies/moesif-inbound/doc.md +44 -0
- package/docs/policies/moesif-inbound/intro.md +6 -0
- package/docs/policies/moesif-inbound/schema.json +68 -0
- package/docs/policies/monetization-inbound/doc.md +87 -0
- package/docs/policies/monetization-inbound/intro.md +6 -0
- package/docs/policies/monetization-inbound/schema.json +102 -0
- package/docs/policies/mtls-auth-inbound/intro.md +6 -0
- package/docs/policies/mtls-auth-inbound/schema.json +68 -0
- package/docs/policies/okta-fga-authz-inbound/doc.md +181 -0
- package/docs/policies/okta-fga-authz-inbound/intro.md +20 -0
- package/docs/policies/okta-fga-authz-inbound/schema.json +104 -0
- package/docs/policies/okta-jwt-auth-inbound/intro.md +7 -0
- package/docs/policies/okta-jwt-auth-inbound/schema.json +74 -0
- package/docs/policies/open-id-jwt-auth-inbound/doc.md +58 -0
- package/docs/policies/open-id-jwt-auth-inbound/intro.md +30 -0
- package/docs/policies/open-id-jwt-auth-inbound/schema.json +128 -0
- package/docs/policies/openfga-authz-inbound/doc.md +207 -0
- package/docs/policies/openfga-authz-inbound/intro.md +17 -0
- package/docs/policies/openfga-authz-inbound/schema.json +191 -0
- package/docs/policies/openmeter-inbound/doc.md +163 -0
- package/docs/policies/openmeter-inbound/intro.md +18 -0
- package/docs/policies/openmeter-inbound/schema.json +183 -0
- package/docs/policies/prompt-injection-outbound/doc.md +106 -0
- package/docs/policies/prompt-injection-outbound/intro.md +4 -0
- package/docs/policies/prompt-injection-outbound/schema.json +74 -0
- package/docs/policies/propel-auth-jwt-inbound/doc.md +88 -0
- package/docs/policies/propel-auth-jwt-inbound/intro.md +4 -0
- package/docs/policies/propel-auth-jwt-inbound/schema.json +74 -0
- package/docs/policies/query-param-to-header-inbound/doc.md +70 -0
- package/docs/policies/query-param-to-header-inbound/intro.md +5 -0
- package/docs/policies/query-param-to-header-inbound/schema.json +74 -0
- package/docs/policies/quota-inbound/doc.md +235 -0
- package/docs/policies/quota-inbound/intro.md +7 -0
- package/docs/policies/quota-inbound/schema.json +133 -0
- package/docs/policies/rate-limit-inbound/doc.md +78 -0
- package/docs/policies/rate-limit-inbound/intro.md +30 -0
- package/docs/policies/rate-limit-inbound/schema.json +134 -0
- package/docs/policies/rbac-policy-inbound/intro.md +3 -0
- package/docs/policies/rbac-policy-inbound/policy.ts +42 -0
- package/docs/policies/rbac-policy-inbound/schema.json +52 -0
- package/docs/policies/readme-metrics-inbound/doc.md +1 -0
- package/docs/policies/readme-metrics-inbound/intro.md +3 -0
- package/docs/policies/readme-metrics-inbound/schema.json +84 -0
- package/docs/policies/remove-headers-inbound/schema.json +59 -0
- package/docs/policies/remove-headers-outbound/schema.json +59 -0
- package/docs/policies/remove-query-params-inbound/schema.json +59 -0
- package/docs/policies/replace-string-outbound/schema.json +69 -0
- package/docs/policies/request-size-limit-inbound/schema.json +60 -0
- package/docs/policies/request-validation-inbound/doc.md +72 -0
- package/docs/policies/request-validation-inbound/intro.md +24 -0
- package/docs/policies/request-validation-inbound/schema.json +98 -0
- package/docs/policies/require-origin-inbound/intro.md +12 -0
- package/docs/policies/require-origin-inbound/schema.json +65 -0
- package/docs/policies/secret-masking-outbound/doc.md +41 -0
- package/docs/policies/secret-masking-outbound/intro.md +13 -0
- package/docs/policies/secret-masking-outbound/schema.json +65 -0
- package/docs/policies/semantic-cache-inbound/doc.md +63 -0
- package/docs/policies/semantic-cache-inbound/intro.md +4 -0
- package/docs/policies/semantic-cache-inbound/schema.json +179 -0
- package/docs/policies/set-body-inbound/intro.md +7 -0
- package/docs/policies/set-body-inbound/schema.json +56 -0
- package/docs/policies/set-headers-inbound/doc.md +41 -0
- package/docs/policies/set-headers-inbound/intro.md +2 -0
- package/docs/policies/set-headers-inbound/schema.json +83 -0
- package/docs/policies/set-headers-outbound/schema.json +83 -0
- package/docs/policies/set-query-params-inbound/schema.json +83 -0
- package/docs/policies/set-status-outbound/schema.json +62 -0
- package/docs/policies/sleep-inbound/schema.json +56 -0
- package/docs/policies/stripe-webhook-verification-inbound/intro.md +2 -0
- package/docs/policies/stripe-webhook-verification-inbound/schema.json +60 -0
- package/docs/policies/supabase-jwt-auth-inbound/doc.md +29 -0
- package/docs/policies/supabase-jwt-auth-inbound/intro.md +12 -0
- package/docs/policies/supabase-jwt-auth-inbound/schema.json +86 -0
- package/docs/policies/transform-body-inbound/intro.md +8 -0
- package/docs/policies/transform-body-inbound/policy.ts +16 -0
- package/docs/policies/transform-body-inbound/schema.json +27 -0
- package/docs/policies/transform-body-outbound/intro.md +8 -0
- package/docs/policies/transform-body-outbound/policy.ts +19 -0
- package/docs/policies/transform-body-outbound/schema.json +27 -0
- package/docs/policies/upstream-azure-ad-service-auth-inbound/doc.md +82 -0
- package/docs/policies/upstream-azure-ad-service-auth-inbound/intro.md +20 -0
- package/docs/policies/upstream-azure-ad-service-auth-inbound/schema.json +84 -0
- package/docs/policies/upstream-firebase-admin-auth-inbound/intro.md +10 -0
- package/docs/policies/upstream-firebase-admin-auth-inbound/schema.json +68 -0
- package/docs/policies/upstream-firebase-user-auth-inbound/intro.md +2 -0
- package/docs/policies/upstream-firebase-user-auth-inbound/schema.json +113 -0
- package/docs/policies/upstream-gcp-federated-auth-inbound/doc.md +139 -0
- package/docs/policies/upstream-gcp-federated-auth-inbound/intro.md +21 -0
- package/docs/policies/upstream-gcp-federated-auth-inbound/schema.json +96 -0
- package/docs/policies/upstream-gcp-jwt-inbound/intro.md +10 -0
- package/docs/policies/upstream-gcp-jwt-inbound/schema.json +62 -0
- package/docs/policies/upstream-gcp-service-auth-inbound/doc.md +132 -0
- package/docs/policies/upstream-gcp-service-auth-inbound/intro.md +25 -0
- package/docs/policies/upstream-gcp-service-auth-inbound/schema.json +95 -0
- package/docs/policies/upstream-zuplo-jwt-auth-inbound/doc.md +213 -0
- package/docs/policies/upstream-zuplo-jwt-auth-inbound/intro.md +16 -0
- package/docs/policies/upstream-zuplo-jwt-auth-inbound/schema.json +101 -0
- package/docs/policies/validate-json-schema-inbound/doc.md +129 -0
- package/docs/policies/validate-json-schema-inbound/intro.md +7 -0
- package/docs/policies/validate-json-schema-inbound/schema.json +56 -0
- package/docs/policies/web-bot-auth-inbound/doc.md +104 -0
- package/docs/policies/web-bot-auth-inbound/intro.md +16 -0
- package/docs/policies/web-bot-auth-inbound/schema.json +76 -0
- package/docs/policies/xml-to-json-outbound/doc.md +71 -0
- package/docs/policies/xml-to-json-outbound/intro.md +4 -0
- package/docs/policies/xml-to-json-outbound/schema.json +117 -0
- package/docs/programmable-api/audit-log.mdx +74 -0
- package/docs/programmable-api/background-dispatcher.mdx +124 -0
- package/docs/programmable-api/background-loader.mdx +104 -0
- package/docs/programmable-api/cache.mdx +186 -0
- package/docs/programmable-api/compatibility-dates.mdx +201 -0
- package/docs/programmable-api/console-logging.mdx +48 -0
- package/docs/programmable-api/context-data.mdx +127 -0
- package/docs/programmable-api/custom-cors-policy.mdx +64 -0
- package/docs/programmable-api/environment.mdx +328 -0
- package/docs/programmable-api/hooks.mdx +569 -0
- package/docs/programmable-api/http-problems.mdx +385 -0
- package/docs/programmable-api/jwt-service-plugin.mdx +420 -0
- package/docs/programmable-api/logger.mdx +223 -0
- package/docs/programmable-api/memory-zone-read-through-cache.mdx +96 -0
- package/docs/programmable-api/node-modules.mdx +67 -0
- package/docs/programmable-api/not-found-handler.mdx +47 -0
- package/docs/programmable-api/oauth-protected-resource-plugin.mdx +46 -0
- package/docs/programmable-api/overview.mdx +213 -0
- package/docs/programmable-api/problem-response-formatter.mdx +183 -0
- package/docs/programmable-api/request-user.mdx +289 -0
- package/docs/programmable-api/reusing-code.mdx +26 -0
- package/docs/programmable-api/route-raw.mdx +55 -0
- package/docs/programmable-api/runtime-behaviors.mdx +25 -0
- package/docs/programmable-api/runtime-errors.mdx +246 -0
- package/docs/programmable-api/runtime-extensions.mdx +340 -0
- package/docs/programmable-api/safely-clone-a-request-or-response.mdx +57 -0
- package/docs/programmable-api/streaming-zone-cache.mdx +155 -0
- package/docs/programmable-api/web-crypto-apis.mdx +219 -0
- package/docs/programmable-api/web-standard-apis.mdx +109 -0
- package/docs/programmable-api/zone-cache.mdx +131 -0
- package/docs/programmable-api/zp-body-removed.mdx +32 -0
- package/docs/programmable-api/zuplo-context.mdx +414 -0
- package/docs/programmable-api/zuplo-id-token.mdx +90 -0
- package/docs/programmable-api/zuplo-json.mdx +91 -0
- package/docs/programmable-api/zuplo-request.mdx +200 -0
- package/docs/sample-apis.mdx +78 -0
- package/docs/self-hosted/overview.md +60 -0
- package/package.json +6 -5
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: mTLS Authentication
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<EnterpriseFeature name="mTLS Client Certificates" />
|
|
6
|
+
|
|
7
|
+
Mutual TLS (mTLS) authentication establishes a trust relationship between your
|
|
8
|
+
Zuplo API Gateway and your backend services using client certificates. With
|
|
9
|
+
mTLS, both the client (Zuplo Gateway) and the server (your backend) authenticate
|
|
10
|
+
each other, creating a "Zero Trust" security model.
|
|
11
|
+
|
|
12
|
+
This is particularly useful for enterprise customers who need to ensure that
|
|
13
|
+
both parties in a connection verify each other's identity before exchanging
|
|
14
|
+
data.
|
|
15
|
+
|
|
16
|
+
## How mTLS Works
|
|
17
|
+
|
|
18
|
+
When Zuplo makes an outbound request to your backend service:
|
|
19
|
+
|
|
20
|
+
1. Your backend service presents its SSL/TLS certificate to Zuplo (standard TLS)
|
|
21
|
+
2. Zuplo presents a client certificate to your backend (the mutual part)
|
|
22
|
+
3. Both parties verify each other's certificates against a trusted Certificate
|
|
23
|
+
Authority (CA)
|
|
24
|
+
4. Only after mutual verification does the secure connection establish
|
|
25
|
+
|
|
26
|
+
This ensures that your backend only accepts requests from authorized Zuplo
|
|
27
|
+
gateways, and Zuplo can verify it's connecting to the correct backend service.
|
|
28
|
+
|
|
29
|
+
## Prerequisites
|
|
30
|
+
|
|
31
|
+
Before you begin, you need:
|
|
32
|
+
|
|
33
|
+
- A client certificate and private key generated from a Certificate Authority
|
|
34
|
+
(CA) that your backend trusts
|
|
35
|
+
- Your backend service configured to require and validate client certificates
|
|
36
|
+
- The Zuplo CLI installed (see [CLI documentation](../cli/overview.mdx))
|
|
37
|
+
|
|
38
|
+
## 1/ Upload Your Certificate
|
|
39
|
+
|
|
40
|
+
Use the Zuplo CLI to upload your client certificate and private key to your
|
|
41
|
+
project. You can upload multiple certificates, each with a unique name.
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
zuplo mtls-certificate create \
|
|
45
|
+
--cert cert.pem \
|
|
46
|
+
--key key.pem \
|
|
47
|
+
--name my-backend-cert \
|
|
48
|
+
--account your-account \
|
|
49
|
+
--project your-project \
|
|
50
|
+
--environment-type development \
|
|
51
|
+
--environment-type preview \
|
|
52
|
+
--environment-type production
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
:::note
|
|
56
|
+
|
|
57
|
+
The certificate name must follow JavaScript's variable naming constraints since
|
|
58
|
+
you will use the name later in your code. The CLI will validate these
|
|
59
|
+
constraints when you create the certificate.
|
|
60
|
+
|
|
61
|
+
:::
|
|
62
|
+
|
|
63
|
+
**Parameters:**
|
|
64
|
+
|
|
65
|
+
- `--cert`: Path to your PEM-encoded client certificate file
|
|
66
|
+
- `--key`: Path to your PEM-encoded private key file
|
|
67
|
+
- `--name`: A unique name to identify this certificate in your project
|
|
68
|
+
- `--account`: Your Zuplo account name
|
|
69
|
+
- `--project`: Your Zuplo project name
|
|
70
|
+
- `--environment-type`: Specify which environments can use this certificate (can
|
|
71
|
+
be specified multiple times)
|
|
72
|
+
|
|
73
|
+
## 2/ Use the Certificate in Your Code
|
|
74
|
+
|
|
75
|
+
Once uploaded, you can use the certificate when making outbound requests from
|
|
76
|
+
your Zuplo Gateway.
|
|
77
|
+
|
|
78
|
+
### Using mTLS in a Request Handler
|
|
79
|
+
|
|
80
|
+
Reference the certificate by name in the `zuplo` options object when making
|
|
81
|
+
fetch requests:
|
|
82
|
+
|
|
83
|
+
```ts
|
|
84
|
+
import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
85
|
+
|
|
86
|
+
export default async function (request: ZuploRequest, context: ZuploContext) {
|
|
87
|
+
const response = await fetch("https://secure-backend.example.com/api", {
|
|
88
|
+
zuplo: {
|
|
89
|
+
mtlsCertificate: "my-backend-cert",
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
return response;
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Using mTLS in a Policy
|
|
98
|
+
|
|
99
|
+
You can also configure mTLS in the URL Forward Handler or URL Rewrite Handler
|
|
100
|
+
that make outbound requests:
|
|
101
|
+
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"export": "UrlForwardHandler",
|
|
105
|
+
"module": "$import(@zuplo/runtime)",
|
|
106
|
+
"options": {
|
|
107
|
+
"baseUrl": "https://secure-backend.example.com",
|
|
108
|
+
"mtlsCertificate": "my-backend-cert"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## 3/ Using Environment Variables
|
|
114
|
+
|
|
115
|
+
For better flexibility across environments, store the certificate name as an
|
|
116
|
+
[environment variable](./environment-variables.mdx):
|
|
117
|
+
|
|
118
|
+
**Production environment:**
|
|
119
|
+
|
|
120
|
+
```text
|
|
121
|
+
BACKEND_MTLS_CERT=my-backend-prod-cert
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Staging environment:**
|
|
125
|
+
|
|
126
|
+
```text
|
|
127
|
+
BACKEND_MTLS_CERT=my-backend-staging-cert
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Then reference it in your code:
|
|
131
|
+
|
|
132
|
+
```ts
|
|
133
|
+
import { ZuploContext, ZuploRequest, environment } from "@zuplo/runtime";
|
|
134
|
+
|
|
135
|
+
export default async function (request: ZuploRequest, context: ZuploContext) {
|
|
136
|
+
const response = await fetch("https://secure-backend.example.com/api", {
|
|
137
|
+
zuplo: {
|
|
138
|
+
mtlsCertificate: environment.BACKEND_MTLS_CERT,
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
return response;
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Or in your policy configuration:
|
|
147
|
+
|
|
148
|
+
```json
|
|
149
|
+
{
|
|
150
|
+
"export": "UrlForwardHandler",
|
|
151
|
+
"module": "$import(@zuplo/runtime)",
|
|
152
|
+
"options": {
|
|
153
|
+
"baseUrl": "https://secure-backend.example.com",
|
|
154
|
+
"mtlsCertificate": "$env(BACKEND_MTLS_CERT)"
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Managing Certificates
|
|
160
|
+
|
|
161
|
+
### Listing Certificates
|
|
162
|
+
|
|
163
|
+
To view all certificates in your project:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
zuplo mtls-certificate list \
|
|
167
|
+
--account your-account \
|
|
168
|
+
--project your-project
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Deleting Certificates
|
|
172
|
+
|
|
173
|
+
To remove a certificate:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
zuplo mtls-certificate delete \
|
|
177
|
+
--cert-id my-cert-id \
|
|
178
|
+
--account your-account \
|
|
179
|
+
--project your-project
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
:::caution
|
|
183
|
+
|
|
184
|
+
You can't delete a certificate that's referenced by any of your deployments in
|
|
185
|
+
your project. This is to prevent your deployments from failing if the
|
|
186
|
+
certificate that's being referenced is no longer available.
|
|
187
|
+
|
|
188
|
+
First, disable the certificate by using the CLI with
|
|
189
|
+
`zuplo mtls-certificate disable`. Then redeploy the deployments in your project
|
|
190
|
+
that reference it. Once there are no more references to the certificate, you can
|
|
191
|
+
delete it.
|
|
192
|
+
|
|
193
|
+
:::
|
|
194
|
+
|
|
195
|
+
### Certificate Rotation
|
|
196
|
+
|
|
197
|
+
When your certificates need to be rotated (due to expiration or security
|
|
198
|
+
policies):
|
|
199
|
+
|
|
200
|
+
1. Upload the new certificate with a different name
|
|
201
|
+
2. Update your environment variables or code to reference the new certificate
|
|
202
|
+
name
|
|
203
|
+
3. Use the CLI `zuplo mtls-certificate disable` command to disable the old
|
|
204
|
+
certificate.
|
|
205
|
+
4. Deploy your changes to all environments that reference the old certificate.
|
|
206
|
+
5. After verifying the new certificate works, you may delete the old
|
|
207
|
+
certificate.
|
|
208
|
+
|
|
209
|
+
The order of operations is important so that your services continue to work as
|
|
210
|
+
you rotate the certificate.
|
|
211
|
+
|
|
212
|
+
## Local Development
|
|
213
|
+
|
|
214
|
+
:::warning
|
|
215
|
+
|
|
216
|
+
mTLS bindings aren't currently available in local development environments. Your
|
|
217
|
+
code using mTLS will only work when deployed to Zuplo's edge infrastructure.
|
|
218
|
+
|
|
219
|
+
:::
|
|
220
|
+
|
|
221
|
+
For local development, consider:
|
|
222
|
+
|
|
223
|
+
- Using conditional logic to bypass mTLS when running locally
|
|
224
|
+
- Setting up a separate backend endpoint that doesn't require mTLS for
|
|
225
|
+
development
|
|
226
|
+
- Testing mTLS functionality in a preview environment
|
|
227
|
+
|
|
228
|
+
## Troubleshooting
|
|
229
|
+
|
|
230
|
+
### Certificate Validation Errors
|
|
231
|
+
|
|
232
|
+
If your backend rejects the certificate, verify:
|
|
233
|
+
|
|
234
|
+
- The certificate is signed by a CA that your backend trusts
|
|
235
|
+
- The certificate hasn't expired
|
|
236
|
+
- The certificate name in your code matches the uploaded certificate name
|
|
237
|
+
|
|
238
|
+
### Connection Failures
|
|
239
|
+
|
|
240
|
+
If requests fail to connect:
|
|
241
|
+
|
|
242
|
+
- Ensure your backend is configured to accept mTLS connections
|
|
243
|
+
- Verify the certificate is uploaded to the correct environment (development,
|
|
244
|
+
preview, production)
|
|
245
|
+
- Check that your backend's CA certificate is properly configured
|
|
246
|
+
|
|
247
|
+
### Runtime Errors
|
|
248
|
+
|
|
249
|
+
If you see errors about missing certificates:
|
|
250
|
+
|
|
251
|
+
- Confirm the certificate was uploaded successfully using
|
|
252
|
+
`zuplo mtls-certificate list`
|
|
253
|
+
- Ensure the environment type was specified correctly during upload
|
|
254
|
+
- Verify your code references the correct certificate name
|
|
255
|
+
|
|
256
|
+
## Additional Resources
|
|
257
|
+
|
|
258
|
+
For more information on securing your backend, see:
|
|
259
|
+
|
|
260
|
+
- [Securing your Backend](./securing-your-backend.mdx) - Overview of all backend
|
|
261
|
+
security options
|
|
262
|
+
- [Shared Secret / API Key](./securing-your-backend.mdx#1-shared-secret--api-key) -
|
|
263
|
+
Alternative approach using shared secrets
|
|
264
|
+
- [Secure Tunnels](./secure-tunnel.mdx) - Connect to private backends without
|
|
265
|
+
exposing them to the internet
|
|
266
|
+
|
|
267
|
+
If you need assistance configuring mTLS for your project, contact us at
|
|
268
|
+
[support@zuplo.com](mailto:support@zuplo.com).
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Securing your backend
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
When using a gateway, it's important to ensure that your backend API is only
|
|
6
|
+
receiving traffic via the gateway to be confident that your policies are being
|
|
7
|
+
correctly applied to all traffic.
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
To do this, we need to secure the communication between Zuplo and your backend
|
|
12
|
+
APIs (origin). There are several options to do this securely.
|
|
13
|
+
|
|
14
|
+
## 1/ Shared secret / API Key
|
|
15
|
+
|
|
16
|
+
This is the most popular option and is used by companies like Supabase,
|
|
17
|
+
Firebase, and Stripe to secure their own APIs. In this solution the backend
|
|
18
|
+
requires a secret that's known only by the gateway. This is usually an opaque
|
|
19
|
+
key sent as a header on every request to the origin. Zuplo adds this to the
|
|
20
|
+
request - the client is never aware of the secret.
|
|
21
|
+
|
|
22
|
+
### Step 1: Set an environment variable
|
|
23
|
+
|
|
24
|
+
Set an [environment variable](./environment-variables.mdx) in your Zuplo
|
|
25
|
+
project. This variable is a secret that only your Zuplo project and your backend
|
|
26
|
+
know. It is sent as a header on every request to your backend API.
|
|
27
|
+
|
|
28
|
+
Open the **Settings** section of your project and select **Environment
|
|
29
|
+
Variables**. Create a new variable and name it `BACKEND_SECRET`. Set the value
|
|
30
|
+
to a secure, random value. Ensure that the value is marked as a secret.
|
|
31
|
+
|
|
32
|
+

|
|
33
|
+
|
|
34
|
+
### Step 2: Create a set header policy
|
|
35
|
+
|
|
36
|
+
Create a policy that sets the `BACKEND_SECRET` as a header on the request to
|
|
37
|
+
your backend API. This policy is an inbound policy that runs before the request
|
|
38
|
+
is sent to your backend.
|
|
39
|
+
|
|
40
|
+
Navigate to the route you want to secure and add a new policy. Select the **Add
|
|
41
|
+
or Set Request Headers** policy type and configure it as follows:
|
|
42
|
+
|
|
43
|
+

|
|
44
|
+
|
|
45
|
+
The configuration uses the environment variable via the `$env(BACKEND_SECRET)`
|
|
46
|
+
selector as shown below.
|
|
47
|
+
|
|
48
|
+
```json
|
|
49
|
+
{
|
|
50
|
+
"name": "set-backend-secret",
|
|
51
|
+
"policyType": "set-headers-inbound",
|
|
52
|
+
"handler": {
|
|
53
|
+
"export": "SetHeadersInboundPolicy",
|
|
54
|
+
"module": "$import(@zuplo/runtime)",
|
|
55
|
+
"options": {
|
|
56
|
+
"headers": [
|
|
57
|
+
{
|
|
58
|
+
"name": "backend-secret",
|
|
59
|
+
"value": "$env(BACKEND_SECRET)"
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Add this policy to any of the routes in your API that call your secure backend.
|
|
68
|
+
|
|
69
|
+
### Step 3: Verify the secret on your backend
|
|
70
|
+
|
|
71
|
+
Verify the secret on your backend. The implementation depends on the framework
|
|
72
|
+
and language you use, but the typical pattern is to use middleware to check the
|
|
73
|
+
header value. If the header does not match the secret, return a 401 Unauthorized
|
|
74
|
+
response.
|
|
75
|
+
|
|
76
|
+
An example using a Node.js Express middleware:
|
|
77
|
+
|
|
78
|
+
```js
|
|
79
|
+
const express = require("express");
|
|
80
|
+
const app = express();
|
|
81
|
+
|
|
82
|
+
app.use((req, res, next) => {
|
|
83
|
+
if (req.headers["backend-secret"] !== process.env.BACKEND_SECRET) {
|
|
84
|
+
return res.status(401).send("Unauthorized");
|
|
85
|
+
}
|
|
86
|
+
next();
|
|
87
|
+
});
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## 2/ Federated Authentication
|
|
91
|
+
|
|
92
|
+
This is a new option where you can configure your cloud service (for example,
|
|
93
|
+
GCP or AWS) to trust a JWT token created by the Zuplo runtime. If you're
|
|
94
|
+
interested in using this option please contact us at `support@zuplo.com`.
|
|
95
|
+
|
|
96
|
+
## 3/ Upstream Service Authentication
|
|
97
|
+
|
|
98
|
+
Utilize the IAM controls provided by your Cloud host to secure inbound requests
|
|
99
|
+
and allow only authorized service principals access to your service.
|
|
100
|
+
|
|
101
|
+
- For Azure users, you can user our
|
|
102
|
+
[Upstream Azure AD Service Auth](../policies/upstream-azure-ad-service-auth-inbound.mdx)
|
|
103
|
+
policy. This uses Azure AD App registrations to create a token that Zuplo will
|
|
104
|
+
send to requests to Azure.
|
|
105
|
+
|
|
106
|
+
- For GCP users, you can use our
|
|
107
|
+
[Upstream GCP Service AUth](../policies/upstream-gcp-service-auth-inbound.mdx)
|
|
108
|
+
or [Upstream GCP JWT](../policies/upstream-gcp-jwt-inbound.mdx) policies.
|
|
109
|
+
These use a `service.json` credential to create or issue JWT tokens that Zuplo
|
|
110
|
+
will send to requests to GCP.
|
|
111
|
+
|
|
112
|
+
## 4/ mTLS Authentication
|
|
113
|
+
|
|
114
|
+
Mutual TLS (mTLS) authentication allows the configuration of a trust
|
|
115
|
+
relationship between your Zuplo gateway and your backend API using client
|
|
116
|
+
certificates. With mTLS, both your gateway and backend authenticate each other,
|
|
117
|
+
providing a "Zero Trust" security model that's popular with enterprise
|
|
118
|
+
customers.
|
|
119
|
+
|
|
120
|
+
To learn how to set up mTLS with client certificates, see the
|
|
121
|
+
[Securing your Backend with mTLS](./securing-backend-mtls.mdx) article. This is
|
|
122
|
+
an [enterprise feature](https://zuplo.com/pricing).
|
|
123
|
+
|
|
124
|
+
## 5/ Secure Tunneling
|
|
125
|
+
|
|
126
|
+
Used by some of our larger customers, our [secure tunnels](./secure-tunnel.mdx)
|
|
127
|
+
allow you to create a WireGuard based tunnel from your VPC or private
|
|
128
|
+
data-center that connects directly to your Zuplo gateway. This option is useful
|
|
129
|
+
when running workloads in a non-cloud provider (for example, bare metal, on
|
|
130
|
+
premises, etc.) that don't have IAM or mTLS capabilities. In this solution, your
|
|
131
|
+
backend API doesn't need to be exposed to the internet at all. This is a more
|
|
132
|
+
complex setup and is only available on our
|
|
133
|
+
[enterprise plan](https://zuplo.com/pricing).
|
|
134
|
+
|
|
135
|
+
To discuss security and connectivity options, our
|
|
136
|
+
[discord channel](https://discord.zuplo.com) is a great community, with active
|
|
137
|
+
participation from the Zuplo team.
|
|
138
|
+
|
|
139
|
+
## 6/ Custom Networking (Managed Dedicated Only)
|
|
140
|
+
|
|
141
|
+
For customers on our managed dedicated plan, we can provide custom networking to
|
|
142
|
+
connect your backend to Zuplo. This can include using VPC connectivity
|
|
143
|
+
capabilities from your cloud provider (for example AWS, Azure, GCP, etc.) such
|
|
144
|
+
as AWS Transit Gateway, PrivateLink, or VPC Peering to connect to your backend
|
|
145
|
+
services.
|
|
146
|
+
|
|
147
|
+
For more details on networking options for managed dedicated customers, see our
|
|
148
|
+
[Networking documentation](../dedicated/networking.mdx).
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Security
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Zuplo hosts mission-critical infrastructure for our customers and as such we
|
|
6
|
+
take our security and your security very seriously. Zuplo was started with a
|
|
7
|
+
security mindset and all team members are responsible for ensuring our services
|
|
8
|
+
and infrastructure are secure. Services are designed with security in mind from
|
|
9
|
+
the beginning and we rely on best-in-class security tooling to ensure our
|
|
10
|
+
infrastructure is safe and secure.
|
|
11
|
+
|
|
12
|
+
:::tip
|
|
13
|
+
|
|
14
|
+
**Reporting Issues**: If you have a security concern or believe you have found a
|
|
15
|
+
vulnerability in any part of Zuplo please contact us immediately by emailing us
|
|
16
|
+
at [security@zuplo.com](mailto:security@zuplo.com). For full terms see our
|
|
17
|
+
[Security Policy](https://zuplo.com/legal/security-policy).
|
|
18
|
+
|
|
19
|
+
:::
|
|
20
|
+
|
|
21
|
+
## Security Practices
|
|
22
|
+
|
|
23
|
+
### Corporate Security
|
|
24
|
+
|
|
25
|
+
Zuplo implements a number of security controls to ensure that only authorized
|
|
26
|
+
Zuplo team members have access to company infrastructure. This section is
|
|
27
|
+
intended to give a high level of our security practices.
|
|
28
|
+
|
|
29
|
+
- Access to services, applications, and infrastructure is controlled via SSO
|
|
30
|
+
using our corporate identity provider.
|
|
31
|
+
- We require strong, phishing-resistant 2FA on all identity accounts.
|
|
32
|
+
- We rely on identity and device policy-enforced access controls for all
|
|
33
|
+
services.
|
|
34
|
+
- No access is the default, when access to systems is granted the least
|
|
35
|
+
privilege required is granted. When possible temporary permission escalation
|
|
36
|
+
is used.
|
|
37
|
+
- Access controls are centralized, employee onboarding/offboarding is automated,
|
|
38
|
+
and audit logs are kept for all business-critical services. Access grants are
|
|
39
|
+
regularly audited.
|
|
40
|
+
|
|
41
|
+
### Network and Infrastructure Security
|
|
42
|
+
|
|
43
|
+
Zuplo implements many layers of security to ensure our networks and
|
|
44
|
+
infrastructure remain secure.
|
|
45
|
+
|
|
46
|
+
- Our infrastructure runs on Google Cloud Platform and Cloudflare.
|
|
47
|
+
- Zuplo only exposes traffic directly to the internet through Cloudflare.
|
|
48
|
+
Internal infrastructure and services don't have public IP addresses and
|
|
49
|
+
instead are connected to Cloudflare using outbound secure tunnels.
|
|
50
|
+
- Each service that's exposed is protected by DDoS, Firewall, WAF, and other
|
|
51
|
+
security measures.
|
|
52
|
+
- Internal and external APIs are protected by Zuplo API Gateway.
|
|
53
|
+
- Internal services can only be connected to by Zuplo employees using an
|
|
54
|
+
identity and device policy-enforced proxy using secure tunnels.
|
|
55
|
+
- Interconnected Zuplo services utilize mTLS authentication or gateway
|
|
56
|
+
authorization for access control.
|
|
57
|
+
- Traffic between Zuplo services or services Zuplo uses is encrypted in transit.
|
|
58
|
+
- Customer data and compute is isolated in multiple ways (secure Kubernetes
|
|
59
|
+
virtualization, V8 Isolates, etc.)
|
|
60
|
+
- Logging data is centralized and configured for monitoring and alerting.
|
|
61
|
+
- Customer data is encrypted at rest.
|
|
62
|
+
|
|
63
|
+
### Application Security
|
|
64
|
+
|
|
65
|
+
At Zuplo, application security is considered at every phase of software
|
|
66
|
+
development. We utilize multiple layers and tools to help us build secure
|
|
67
|
+
software.
|
|
68
|
+
|
|
69
|
+
- Changes are done via pull requests with code reviews.
|
|
70
|
+
- Infrastructure is managed via Terraform, changes go through code reviews.
|
|
71
|
+
- Third-party dependencies are continually scanned for vulnerabilities and
|
|
72
|
+
patches are applied using automated tools whenever possible.
|
|
73
|
+
- Containers are automatically scanned using GCP Container Scanning.
|
|
74
|
+
- Penetration testing is performed regularly.
|
|
75
|
+
- Builds and deployments are fully automated.
|
|
76
|
+
|
|
77
|
+
### Disaster Recovery
|
|
78
|
+
|
|
79
|
+
We understand that if we go down, our customers' APIs go down too. While Zuplo
|
|
80
|
+
has an excellent track record of uptime serving billions and billions of
|
|
81
|
+
requests with zero downtime, the team also plans for the worst. We maintain a
|
|
82
|
+
variety of measures to ensure we can quickly recover from any type of disaster.
|
|
83
|
+
|
|
84
|
+
- Full data backups occur on regular schedules (usually every 6 hours)
|
|
85
|
+
- Incremental backups occur frequently (usually every hour)
|
|
86
|
+
- Event-based backups occur for customer APIs - for example, we save each
|
|
87
|
+
production Gateway build/configuration so everything needed to recover
|
|
88
|
+
customer services to a particular point in time is available.
|
|
89
|
+
- Data recovery is tested regularly with full disaster recovery testing done
|
|
90
|
+
every year.
|
|
91
|
+
- Business critical configuration is managed via source code (mostly Terraform)
|
|
92
|
+
to ensure that in the event portions of our infrastructure are taken offline
|
|
93
|
+
they can be quickly restored.
|
|
94
|
+
- Business critical services used by Zuplo have enterprise SLAs with at least
|
|
95
|
+
99.95% uptime guarantees.
|
|
96
|
+
|
|
97
|
+
### Compliance
|
|
98
|
+
|
|
99
|
+
See our [Trust & Compliance Report](https://trust.zuplo.com/) for details on
|
|
100
|
+
compliance including our SOC2 Type II accreditation status.
|
|
101
|
+
|
|
102
|
+
### Security Questionnaire
|
|
103
|
+
|
|
104
|
+
If you have a custom security questionnaire, send it to us and we will get
|
|
105
|
+
responses back to you as soon as possible.
|