Secured access
Secure access authenticates communication between SDK and sandbox controller. Sandbox controller runs in sandbox itself and exposes APIs for work with file system, run commands, and generally control the sandbox via our SDK. Without secure access, anyone with a sandbox ID can access the controller APIs and control the sandbox from inside.SDKs version
v2.0.0 and above are using secure access by default when creating sandbox. This may not be compatible with older custom templates and you may need to rebuild them.Migration path
When using custom templates created before envdv0.2.0, you need to rebuild the templates to enable secure access.
Temporarily, you can disable secure access by setting secure to false during sandbox creation, but this is not recommended for production use because it increases security risks.
You can check the template envd version using the e2b template list command or by viewing the templates list on the dashboard.
Supported versions
All sandboxes based on templates with envd version at leastv0.2.0 already support secure access without any additional changes.
The secure access flag was introduced in 1.5.0 for JavaScript and Python SDKs to be used optionally.
Starting with SDK version v2.0.0, sandboxes are created with secure access enabled by default.
Access sandbox API directly
In some cases, you might want to access sandbox controller APIs directly through its URL, such as when you are not using SDKs. When secure access is enabled, you must provide an authentication token that was returned during sandbox creation. Each call to the sandbox controller must include an additional headerX-Access-Token with the access token value returned during sandbox creation.
For sandbox upload and download URLs, you need to generate pre-signed URLs. We are advising to use SDK for generating presigned URLs.
Disable secure access
Disabling secured access is discouraged because it creates security vulnerabilities.Internet access
Every sandbox has access to the internet and can be reached by a public URL.Controlling internet access
You can control whether a sandbox has access to the internet by using theallowInternetAccess parameter when creating a sandbox. By default, internet access is enabled (true), but you can disable it for security-sensitive workloads.
Setting
allowInternetAccess to false is equivalent to setting network.denyOut to ['0.0.0.0/0'] (denying all traffic).Fine-grained network control
For more granular control over network access, you can use thenetwork configuration option to specify allow and deny lists for outbound traffic.
Allow and deny lists
You can specify IP addresses, CIDR blocks, or domain names that the sandbox is allowed to use:Domain-based filtering
You can allow traffic to specific domains by specifying hostnames inallow out. When using domain-based filtering, you must include ALL_TRAFFIC in deny out to block all other traffic. Domains are not supported in the deny out list.
When any domain is used, the default nameserver
8.8.8.8 is automatically allowed to ensure proper DNS resolution.Domain-based filtering only works for HTTP traffic on port 80 (via Host header inspection) and TLS traffic on port 443 (via SNI inspection). Traffic on other ports uses CIDR-based filtering only. UDP-based protocols like QUIC/HTTP3 are not supported for domain filtering.
Priority rules
When bothallow out and deny out are specified, allow rules always take precedence over deny rules. This means if an IP address is in both lists, it will be allowed.
ALL_TRAFFIC helper
TheALL_TRAFFIC constant represents the CIDR range 0.0.0.0/0, which matches all IP addresses. Use it to easily deny or allow all network traffic:
Sandbox public URL
Every sandbox has a public URL that can be used to access running services inside the sandbox.Restricting public access to sandbox URLs
By default, sandbox URLs are publicly accessible. You can restrict access to require authentication using theallowPublicTraffic option:
allowPublicTraffic is set to false, all requests to the sandbox’s public URLs must include the e2b-traffic-access-token header with the value from sandbox.trafficAccessToken.
Connecting to a server running inside the sandbox
You can start a server inside the sandbox and connect to it using the public URL approach described above. In this example we will start a simple HTTP server that listens on port 3000 and responds with the content of the directory where the server is started.Masking request host headers
You can customize theHost header that gets sent to services running inside the sandbox using the maskRequestHost option. This is useful when your application expects a specific host format.
${PORT} variable in the mask will be automatically replaced with the actual port number of the requested service.
Rate limits
This section describes API and sandbox rate limits of the E2B platform. Here’s a limits breakdown table based on the plan:| Plan | Hobby | Pro | Enterprise |
|---|---|---|---|
| Sandbox lifecycle & management API | 20,000 / 30s | 20,000 / 30s | Custom |
| Sandbox operations | 40,000 / 60s per IP | 40,000 / 60s per IP | Custom |
| Concurrent sandboxes | 20 | 100 - 1,100* | Custom |
| Sandbox creation rate | 1 / sec | 5 / sec | Custom |
| Egress connections per sandbox | 2,500 | 2,500 | Custom |
*Pro plan default is 100 concurrent sandboxes. Higher concurrency of up to 1,100 is available as a separate purchasable add-on.
Sandbox lifecycle and management API
20,000 requests per 30 seconds This rate limit applies to lifecycle and management operations such as sandbox create, kill, update, list, and other.Sandbox operations and requests to sandboxes
40,000 requests per 60 seconds This rate limits applies to operations to/within running sandboxes such as running code, listing files, running commands, etc. This also includes requests made to custom ports in the sandbox.This limit is enforced globally across all sandbox operations from a single IP address.
Concurrent sandboxes
Number of concurrent sandboxes differs based on the pricing tier.Hobby tier
Up to 20 concurrent sandboxesPro tier
Starts at 100 concurrent sandboxesCan go up to 1,100 with additional add-ons available for purchase.
Enterprise tier
Custom limit - 1,100+ concurrent sandboxesSandbox creation rate
This limit controls how quickly you can create new sandboxes.Hobby tier
1 sandbox per secondPro tier
5 sandboxes per secondEnterprise tier
Custom limit - 5+ sandboxes per secondEgress connections
2,500 connections per sandbox This limit controls the maximum number of outbound (egress) network connections that can be established from a single sandbox.Reaching limits
When you reach the limits of your plan, subsequent requests/function calls will be effectively dropped and return the following:- the
429 Too Many RequestsHTTP status code (when calling API/sandbox ports directly) RateLimitErrorin the JS/TS SDKRateLimitExceptionin the Python SDK
Sandbox.create() in JS/TS or Sandbox.create() in Python) will fail and return RateLimitError or RateLimitException respectively.
Once the number of running sandboxes drops below 100, or you purchase a concurrency add-on, you’ll be able to create new sandboxes again.