This is the multi-page printable view of this section.
Click here to print.
Return to the regular view of this page.
Browsolate Documentation
Getting started
Start with the Installation guide to deploy Browsolate in your AWS environment, or check out the Introduction for a high-level overview of how it works.
If you have any questions or need assistance, don’t hesitate to reach out through our Support page.
1 - Introduction
Secure, remote isolate browsing, in AWS
Designed for both desktop and mobile devices, Browsolate ensures user activity remains isolated from the local environment and is protected from malicious websites.
Key Features
1. Session Launch via Single URL
A secure browsing session can be launched by accessing a predefined URL. This simplifies session initiation, allowing users to start an isolated session without additional configuration or setup.
2. Isolated Browsing via Containerization
Browsolate runs each browsing session in its own container within AWS ECS. This ensures strict process separation and complete isolation of user activity, safeguarding the environment from external threats.
3. WebRTC-Based Video Streaming
Sessions are streamed to users via WebRTC, ensuring low-latency video and real-time interaction. This allows users to interact with the remote browser session as if it were running locally.
4. Customization Options
- Themes: Customize the look and feel of sessions.
- Clipboard Control: Configure clipboard read/write permissions.
- Navigation: Control in-session navigation.
- Read-Only Mode: Enable secure, read-only sessions.
- Session Duration: Set session length dynamically.
5. HTTPS and SSL Support
- Custom SSL Certificates: Use your own hostname and certificate.
- Browsolate-Provided Certificates: Option to use
browsolate.com
for simpler deployment.
6. Proxy Support
Browsolate supports routing traffic through custom anonymizer or security proxies, with optional authentication credentials in the URL.
7. Built-in STUN/TURN Servers
To support reliable WebRTC streaming in restricted network environments, Browsolate includes integrated STUN/TURN servers for robust connection handling.
8. Session Logging
All session activity, including navigation and interactions, is logged for security and auditing purposes.
9. Mobile and Desktop Support
Provides seamless performance across both mobile and desktop devices.
2 - How Browsolate works
This section outlines the technical components of Browsolate
Overview
Browsolate allows you to take a URL, and launch it in a Remote Isolated Session in a container in AWS.
sequenceDiagram
participant User
participant API as Browsolate API
participant SecretsManager
participant Viewer as Browsolate Viewer
participant ECS as ECS (Browsolate container)
User->>User: Select site to visit
User->>API: Generate encrypted URL
API->>SecretsManager: Retrieve encryption key
SecretsManager-->>API: Encryption key
API->>User: Encrypted URL
User->>Viewer: Navigate to encrypted URL
Viewer->>SecretsManager: Retrieve decryption key
SecretsManager-->>Viewer: Decryption key
Viewer->>ECS: Launch isolated browser session
ECS-->>Viewer: Browser session launched
loop Continuous interaction
Viewer->>User: Stream video of session
User-->>Viewer: Send keyboard and mouse input
end
ECS-->>Viewer: Terminate session
Viewer-->>User: End video stream
User->>User: Session terminated
Key Technical Components:
1. Isolated Browser Sessions
- Containerized Environment: Each Browsolate session runs inside an Amazon ECS (Elastic Container Service) container, with processes isolated to ensure security.
- Session Control: You have full control over the size and count of EC2 instances on which Browsolate runs, giving you the ability to scale based on demand.
- Maximum Session Lifetime: The session lifetime is configurable both at deployment and runtime, allowing you to manage resource consumption and costs effectively.
2. URL Encryption and AWS Secrets Manager
- URL Encryption: Browsolate encrypts session configuration data (such as clipboard permissions and time limits) using AES-256-CBC encryption, which is securely passed via URLs.
- Short-Lived Links: URL links can be configured to expire after a set period, adding a layer of security for temporary or sensitive sessions.
- AWS Secrets Manager Integration:
- Key Storage: Encryption keys are securely stored in AWS Secrets Manager, allowing you to manage multiple keys for different environments or use cases.
- Key Rotation: Supports key rotation to enhance security. Keys can be rotated without disrupting ongoing sessions.
See Creating an Isolated link to learn more.
3. SSL Certificates and Domain Name Configuration
- Custom SSL Certificates via AWS Secrets Manager: If you choose to use your own SSL certificates, they can be securely stored in AWS Secrets Manager. These certificates are retrieved and used to establish secure HTTPS connections for your domain.
- Domain Options: You can either use your own domain or opt for the default Browsolate domain (
browsolate.com
). SSL certificates are managed via AWS Secrets Manager.
See Bring your own Certificate to learn more.
4. Window Scaling and Resolution Management
- Window Scaling: Browsolate supports native window scaling, dynamically adjusting the remote browser session to match the resolution and aspect ratio of the client device for a seamless experience.
- Fixed Window Size: For performance optimization, you can configure fixed window sizes to ensure the remote browser session runs at a consistent resolution, reducing potential overhead from dynamic resizing.
See Screen Settings to learn more.
5. Clipboard Air-Gap
- Clipboard Transfer: Browsolate ensures clipboard security by maintaining an air-gap between the local machine and the remote browser environment. Clipboard data is only transferred when explicitly requested by the user, ensuring that no background transfers occur.
See Clipboard Access to learn more.
6. Themes and Customization
- Custom Themes and UI Styling: Browsolate allows you to customize the look and feel of the browser interface by applying your own CSS themes hosted in Amazon S3, giving you flexibility to manage your UI styling for a branded experience.
See Custom Themes to learn more.
7. Proxy Support for Network Traffic
- Proxy Configuration: Browsolate allows traffic to be routed through a proxy, configured at deployment time. You can provide authentication credentials within the proxy URL, such as
https://user:password@proxy.example.com
, enabling secure or anonymized routing.
- Custom Headers: On a per-request basis, you can add custom headers to outgoing requests. These headers can be used by upstream proxies for purposes such as accounting, routing, or logging, giving you further control over network traffic.
See Configuring a Proxy to learn more.
8. Logging and Monitoring through AWS CloudWatch
- Centralized Logging: Browsolate integrates with AWS CloudWatch to log session activity, including lifecycle events, navigation actions, and resource usage.
- Alerts and Monitoring: CloudWatch can be configured to alert you about anomalies, such as session failures or resource overuse, enabling proactive management.
See Logging to learn more.
9. STUN/TURN Servers for WebRTC Reliability
- Browsolate includes STUN/TURN server support for WebRTC-based applications to ensure reliable communication, even through firewalls or NAT devices.
- The STUN/TURN infrastructure is hosted alongside the browser sessions on AWS, providing low-latency, high-performance connectivity for media streaming, video conferencing, and other WebRTC applications.
- Browsolate can also be configured with alternate STUN/TURN servers
See STUN & TURN Services to learn more.
10. EC2 Instance Control and Resource Management
- Instance Control: You have full control over the type, size, and number of EC2 instances used for Browsolate. This flexibility allows you to tailor the infrastructure to your specific needs, whether you require compute-optimized or memory-optimized instances.
- Auto-Scaling: EC2 instances can be configured to auto-scale based on demand, dynamically adjusting available resources in response to traffic spikes or increased workload.
- Process and Container Resilience: ECS automatically manages process and container recovery, ensuring that browser sessions are restarted to maintain availability in the event of a failure.
2.1 - Infrastructure diagram
AWS Infrastructure diagram

2.2 - Network diagram
AWS Network diagram

2.3 - Security diagram
AWS Security diagram

3 - Installation
Installation and configuration from AWS Marketplace or AWS CloudFormation
3.1 - Marketplace installation
Installation from AWS Marketplace
When setting up Browsolate from AWS Marketplace, several parameters can be configured to customize the solution to fit your organization’s requirements.
These parameters affect security, performance, session handling, and the overall behavior of the service.
See Installation parameters to learn more.
3.2 - CloudFormation installation
Installation via CloudFormation
This guide is targeted at developers and system administrators who need to install Browsolate using AWS CloudFormation. This installation method is required for certain configurations and license agreements.
Prerequisites
- License Key: You will need a valid license key, which you will enter during the deployment process.
- CloudFormation Template Location: An S3 location containing the CloudFormation templates will be provided to you, along with any specific configuration instructions related to your contract.
- AWS Permissions: Ensure that the deploying user has the necessary AWS IAM permissions, as outlined below.
Security and Template Inspection
For security assurance, you are encouraged to inspect the provided CloudFormation templates to review settings, including role and IAM policies.
Required AWS Permissions
The following AWS IAM permissions are required for deploying Browsolate via CloudFormation:
AmazonEC2ContainerRegistryFullAccess
AmazonEC2FullAccess
AmazonECS_FullAccess
AmazonSSMReadOnlyAccess
AWSCloudFormationFullAccess
AWSLambda_FullAccess
CloudWatchLogsFullAccess
IAMFullAccess
Installation Steps
-
Deploying the Template: Using the AWS Management Console, AWS CLI, or SDK, initiate the CloudFormation template deployment using the provided S3 URL.
-
Parameters: Follow the parameters listed in the Installation Options Documentation to configure the template. Additionally, you will need to pass your secret key, provided in your installation email. Ensure you check this email for any additional installation notes or customer-specific instructions.
-
Deployment Verification: Once the deployment is complete, check the Outputs section in the CloudFormation template. Here you will find URLs, deployment details, and other relevant configuration information.
-
DNS Propagation: If using a browsolate.com
domain, DNS propagation may take some time. To monitor the progress, consult the CloudWatch logs.
Testing the installation
If you enabled the Launcher UI you can use the built-in example page to create and launch arbitrary URLs. The URL of the Launcher will be published in the Outputs section of the CloudFormation deployment.
NOTES
- By default, the Launcher UI is hosted on port 5443. Access to this port in controlled by the Public API Enabled installation parameter, and the security group tagged Browsolate-PublicSecurityGroup, which you can customise to control access to the Launcher UI.
- The username for the Launcher UI is b8admin .
- The password in configured at installation by the Management Password parameter.
3.3 - Installation parameters
Installation parameters for AWS Marketplace and CloudFormation
When setting up Browsolate using AWS Marketplace or AWS CloudFormation, several parameters can be configured to customize the solution to fit your organization’s requirements. These parameters affect security, performance, session handling, and the overall behavior of the service. Below are detailed explanations of each parameter group and the associated options.
Parameter Groups
Administration
Management Password
This parameter sets the password used to access management APIs. If left blank, management pages such as KeyManager and Launcher will not be enabled.
- MGMTPasswd
- Type: String
- Default:
''
(blank)
Enable Launcher UI
Determines whether the launcher page, which is the interface users interact with to initiate isolated sessions, is enabled. Disabling the launcher UI may be useful if you’re directly controlling session creation through APIs.
- LauncherUI
- Type: Boolean
- Default:
true
- Allowed Values:
true
, false
Enable Encryption Keys Management UI
This parameter determines whether the encryption key management page is enabled.
- UrlEncryptionKeysManagerUI
- Type: Boolean
- Default:
true
- Allowed Values:
true
, false
Custom Theme CSS ARN
Specifies the Amazon Resource Name (ARN) of a custom CSS file that contains themes to modify the look and feel of the Browsolate user interface. This allows you to brand the user interface with your company’s identity or create a custom experience for your users.
Public API Access
Controls whether the API ports (default 5443) are publicly accessible. Setting this to true
allows external users to access the APIs, which might be useful for testing or other use cases. For production environments, you may want to restrict access by setting it to false
.
- PublicAPIAccess
- Type: Boolean
- Default:
false
- Allowed Values:
true
, false
Session Configuration
Session Maximum Duration
This parameter defines the maximum allowed duration for a single user session, in seconds. After the specified duration, the session will automatically end, helping to prevent long, inactive sessions and optimize resource usage.
- Duration
- Type: Number
- Default:
600
(10 minutes)
Session Dead Time
Sets the maximum period (in seconds) during which a session can remain inactive before being terminated. This is useful in cases where a user leaves a session open but inactive, allowing resources to be reclaimed after the dead time has passed.
- Deadtime
- Type: Number
- Default:
90
(seconds)
System Configuration
Proxy Server URL
URL for the proxy server that will be used to route user traffic. This can include authentication credentials within the URL if required (e.g., https://user:password@proxy.example.com
). Setting a proxy server allows you to route traffic through a secure or anonymized network.
EC2 Instance Type
Determines the type of EC2 instance used to host Browsolate. The instance type you choose affects the computational power and memory available, which can impact the performance of the service. You need to ensure that the instance type you specify is available in your AWS region. Choose a larger instance for higher performance and scalability.
- InstanceType
- Type: String
- Default:
m5.large
Maximum number of EC2 instances
Determines the maximum number of EC2 instances which can be deployed into the ECS cluster. Choose more instances for higher scalability.
HTTPS Certificates Configuration
Specifies the value stored in AWS Secrets Manager that contains your HTTPS certificates. This allows Browsolate to serve HTTPS traffic securely using your own certificates.
Domain Name
Allows you to specify a custom domain name for your organization. If left blank, Browsolate will register your service with the default domain browsolate.com
. Using your own domain requires additional setup to configure DNS and certificates.
Availability Zone Index
Specifies the index of the AWS Availability Zone (AZ) where the service will be deployed. Choose 0
for the first AZ, 1
for the second, and so on. Ensure that the selected instance type is available in the chosen Availability Zone.
- AvailabilityZoneIndex
- Type: Number
- Default:
0
- Min Value:
0
- Max Value:
2
UI Configuration
Region for Custom Theme CSS
Defines the AWS region where your custom theme CSS file is stored. This is useful when hosting theme files in regions other than the default region of your deployment. Providing this value ensures that the correct region is used to retrieve the CSS file.
STUN/TURN Server
STUN/TURN Server EC2 Instance Type
This parameter defines the EC2 instance type for the STUN/TURN servers. STUN/TURN servers are responsible for relaying WebRTC traffic when direct peer-to-peer connections are not possible (such as when users are behind firewalls). A more powerful instance type can handle a higher volume of traffic.
- WebRTCInstanceType
- Type: String
- Default:
t3.large
STUN/TURN Server Shared Secret
The shared secret used by the STUN/TURN server for authenticating clients. This secret is used to secure WebRTC connections between clients.
Existing STUN Server URLs
If using existing STUN/TURN servers, specify a comma-separated list of stun: URLs here. This parameter allows you to connect to external STUN servers instead of creating new instances.
Existing TURN Server URLs
If using existing STUN/TURN servers, specify a comma-separated list of turn: URLs here. This parameter allows you to connect to external TURN servers instead of creating new instances.
Number of STUN/TURN Server Instances
Specifies the number of STUN/TURN server instances to deploy.
More instances can improve redundancy and performance, particularly for users behind firewalls or on mobile networks.
You can scale the number of instances depending on the expected traffic.
This field is ignored if STUNUrls or TURNUrls are provided.
-
WebRTCInstances
- Type: Number
- Default:
1
- Min Value:
1
- Max Value:
20
These parameters allow you to customize various aspects of Browsolate during installation, from session management and EC2 instance types to the configuration of STUN/TURN servers and UI themes. Adjust these settings based on your organization’s requirements for performance, security, and scalability.
3.4 - Network security
Learn about the network configuration
Network Ports
The following network ports are used by Browsolate:
- Port 443 (TCP): The primary port used for session isolation. All isolated session traffic is secured by the URL encryption mechanism as discussed in Creating an Isolated Link.
- Port 5443 (TCP): This port hosts the optional URL creation API and test/example UI pages for session management and key management. Traffic on this port is protected by HTTPS and Basic Authorization, using the password set during installation in MGMTPasswd (details here). It is recommended to restrict access to this port if exposing it externally is not required.
- Port 80 (TCP): Used periodically when auto-generating HTTPS certificates through Browsolate.
- Port 3478 (TCP/UDP): Used for STUN/TURN services, facilitating WebRTC connections.
- Ports 49160–49200 (TCP/UDP): Additional ports for WebRTC traffic.
The security configuration, as shown in the CloudFormation template, controls which of these ports are exposed to external access.
Restricting Access to Port 5443
For enhanced security, you can restrict access to Port 5443 using AWS Security Groups. By default, this port is used for API and UI access and can be limited to internal networks only if public API access is not required.
API and UI Security
Browsolate offers an API endpoints for URL encryption, and several user interface pages for creatings sessions and managing keys. These are available on Port 5443.
Disabling API and UI Access
To disable the API or UI pages:
- Set the PublicAPIAccess parameter to
false
to limit API access.
- Disable optional UI pages in the configuration if they are not needed.
For the highest level of security, you can protect session links with a shared secret stored in AWS Secrets Manager, and completely disable external access to the API, setting PublicAPIAccess to false
See Creating an Isolated Link to learn more about using Browsolate with AWS Secrets Manager.
3.5 - Custom themes
Instructions for providing a custom theme
Introduction
In Browsolate, you can fully customize the look and feel of the interface by providing a custom CSS file. This CSS file should be stored in an S3 bucket, and the ARN of the CSS file must be provided during the setup process.
This guide will walk you through the steps for creating and using a custom theme.
Steps Overview
- Create your custom CSS file.
- Upload the CSS file to S3.
- Get the ARN of the S3 object.
- Specify the ARN in the CloudFormation template or Marketplace configuration.
Example Custom CSS File
Here is an example of a CSS file that customizes various elements of the Browsolate interface:
:root.b8-theme-cp-default {
--theme-display-name: Cherrypops Inc;
--company-logo: 'https://cherrypops.inc/assets/logo.png';
--toolbar-background: linear-gradient(145deg, #ff7bff, #ff56b3);
--toolbar-button-hover-background: linear-gradient(145deg, #ff56b3, #ff7bff);
--toolbar-button-active-background: linear-gradient(145deg, #ff3366, #ff4085);
--toolbar-button-text-colour: white;
--toolbar-button-box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.1);
--toolbar-button-active-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2), 0 1px 3px rgba(0, 0, 0, 0.2);
--toolbar-button-focus-box-shadow: 0 0 0 4px rgba(0, 23, 55, 0.5);
--toolbar-button-font-size: 24px;
--toolbar-button-width: 40px;
--toolbar-button-height: 40px;
--toolbar-button-padding: 8px 8px;
--toolbar-height: 55px;
--toolbar-menu-font-size: 16px;
--toolbar-url-background-colour: #090909;
--toolbar-url-text-colour: #ece;
--session-end-content: 'https://media.istockphoto.com/id/944014530/video/animation-of-digital-human-head-on-colorful-noisy-moving-lines.mp4?s=mp4-640x640-is&k=20&c=vhYdSXvu3CDPXjtwtv6ExxOBg44nPU0_14aYbeHAOyM=';
}
Explanation of the Fields:
--theme-display-name
: The name of your theme, displayed in the Browsolate interface.
--company-logo
: The URL of your company’s logo, which is shown in the interface.
--toolbar-background
: The background style for the toolbar, in this case, a gradient.
--toolbar-button-hover-background
: The background style when hovering over toolbar buttons.
--toolbar-button-active-background
: The background style for active toolbar buttons.
--toolbar-button-text-colour
: The text color of the toolbar buttons.
--toolbar-button-box-shadow
: The box-shadow applied to the toolbar buttons by default.
--toolbar-button-active-box-shadow
: The box-shadow for active toolbar buttons.
--toolbar-button-focus-box-shadow
: The box-shadow applied when a toolbar button is focused.
--toolbar-button-font-size
: The font size of toolbar button text.
--toolbar-button-width
: The width of toolbar buttons.
--toolbar-button-height
: The height of toolbar buttons.
--toolbar-button-padding
: Padding around toolbar buttons.
--toolbar-height
: The height of the entire toolbar.
--toolbar-menu-font-size
: The font size used in the toolbar menu.
--toolbar-url-background-colour
: The background color of the URL input box.
--toolbar-url-text-colour
: The color of the text in the URL input box.
--session-end-content
: URL of a video or image displayed when the session ends.
Step 1: Create Your Custom CSS File
Create a CSS file with your custom styles, following the example above. Save the file locally, ensuring that the .css
extension is used.
Step 2: Upload the CSS File to S3
- Log in to the AWS Management Console.
- Navigate to S3 and create a new bucket (or use an existing bucket).
- Upload your custom CSS file to the S3 bucket.
- Set the appropriate permissions for the file to ensure it can be accessed by Browsolate.
Step 3: Retrieve the ARN of the CSS File
To retrieve the ARN of your CSS file in S3:
- In the S3 console, locate the uploaded CSS file.
- Click on the file to view its details.
- The ARN of the object will be displayed in the details section. It will look something like this:
arn:aws:s3:::bucket-name/path-to-your-file.css
Step 4: Specify the ARN in the Setup
During the installation of Browsolate, you will need to specify the ARN of your custom CSS file in the ThemeCSS . This can be done either in the CloudFormation template or the AWS Marketplace configuration.
Parameters:
ThemeCSS:
Type: String
Description: "ARN of the custom theme CSS file in S3"
Default: "arn:aws:s3:::bucket-name/path-to-your-file.css"
By setting the ThemeCSS
parameter to the ARN of your stored CSS file, Browsolate will apply your custom theme during operation.
3.6 - Bring your own certificate
This guide explains how to bring your own HTTPS certificate to Browsolate for secure communication.
Introduction
Instead of using the default Let’s Encrypt certificate provided by Browsolate, administrators can specify their own x509 certificate and private key. This is done by uploading the certificate and key to AWS Secrets Manager and providing the ARN during the setup process.
- Bringing your own certificate will disable automatic domain registration with Route 53 and the use of the
browsolate.com
domain. You are responsible for managing your own domain name and DNS settings.
Steps Overview
- Obtain your x509 private key and certificate.
- Concatenate the private key and certificate into a single file.
- Upload the concatenated file to AWS Secrets Manager.
- Retrieve the ARN of the stored secret.
- Specify the ARN in the HttpsConfig parameter during setup (either in CloudFormation or the Marketplace).
Step 1: Obtain Your x509 Certificates
You need to have both an x509 private key and an x509 certificate ready. These should be in .pem
format (or a similar format). These files are usually provided by your Certificate Authority (CA) when you purchase an SSL certificate.
- Private key: The private key associated with your domain.
- Certificate: The x509 certificate authenticating your domain, signed by a trusted CA.
Step 2: Concatenate the Private Key and Certificate
Browsolate requires the private key and certificate to be combined into a single file for ease of use. You can do this easily in a terminal.
Command to Concatenate the Files
# Concatenate the private key and certificate
cat my_private_key.pem my_certificate.pem > my_combined_cert.pem
This will create a new file called my_combined_cert.pem
, which contains both your private key and certificate in the correct order.
Step 3: Upload to AWS Secrets Manager
You can now upload the concatenated file to AWS Secrets Manager. This will allow Browsolate to securely retrieve your certificate and private key during operation.
Option 1: Using the AWS Secrets Manager UI
- Log in to the AWS Management Console.
- Navigate to Secrets Manager.
- Click Store a new secret.
- In the Secret type section, choose Other type of secret.
- In the Key/value pairs section, paste the contents of your concatenated file, which should include:
- Private Key (beginning with
-----BEGIN PRIVATE KEY-----
)
- Certificate (beginning with
-----BEGIN CERTIFICATE-----
)
- Complete the remaining setup steps and click Store.
Option 2: Using the AWS CLI
If you prefer the command line, you can upload the concatenated file directly:
# Upload the concatenated certificate and private key to Secrets Manager
aws secretsmanager create-secret --name MyWebServerCert --secret-string file://my_combined_cert.pem
The output of this command will include the ARN of the secret, which you will need later.
Step 4: Retrieve the ARN of the Secret
To retrieve the ARN of the secret you stored in AWS Secrets Manager, follow these steps:
- Open the AWS Management Console and navigate to Secrets Manager.
- Find the secret you created in the list.
- The ARN will be displayed in the details of the secret. It will look something like this:
arn:aws:secretsmanager:region:account-id:secret:MyWebServerCert-xxxxxx
Copy this ARN as you will need it for the next step.
Step 5: Specify the ARN in the Setup
During the installation of Browsolate, whether through the AWS Marketplace or a CloudFormation template, you will need to provide the ARN of the secret that holds your certificate and private key.
In the CloudFormation template or the Marketplace configuration, this is specified as the HttpsConfig parameter.
Parameters:
HttpsConfig:
Type: String
Description: "ARN of the certificate and private key in Secrets Manager"
Default: "arn:aws:secretsmanager:region:account-id:secret:MyWebServerCert-xxxxxx"
By setting the HttpsConfig
parameter to the ARN of your stored secret, Browsolate will use your custom certificate and private key for HTTPS communication.
3.7 - Configuring a proxy
Instructions for configuring a proxy server
Introduction
When deploying Browsolate, you can configure a proxy server to route all traffic through an external network. This is particularly useful for enhancing security, anonymity, or enforcing network policies.
The proxy configuration is passed through the Proxy parameter from the AWS Marketplace installer or the the CloudFormation template.
The format of the Proxy parameter follows standard URL syntax. It supports various types of proxy servers, including HTTP, HTTPS, and SOCKS (SOCKS4 and SOCKS5). Authentication can also be included in the URL if required.
-
HTTP / HTTPS Proxy:
http://proxy.example.com:8080
https://proxy.example.com:443
https://username:password@proxy.example.com:443
-
SOCKS4 / SOCKS5 Proxy:
socks4://proxy.example.com:1080
socks5://proxy.example.com:1080
socks5://username:password@proxy.example.com:1080
In this format:
username
and password
are your proxy authentication credentials (if required).
proxy.example.com
is the hostname or IP address of your proxy server.
8080
, 443
, and 1080
are the ports that the proxy server is listening on.
In addition to proxy configuration, Browsolate allows the addition of custom headers at runtime through the customRequestHeaders field in the URL JSON configuration. This feature provides flexibility in injecting headers into requests, giving fine-grained control over how requests are handled by an upstream proxy.
Example
To include a custom header, modify the customRequestHeaders field in the URL configuration:
{
"url": "https://example.com",
"customRequestHeaders": {
"X-Custom-Header1": "custom-value1",
"X-Proxy-Username": "protected@mycompany.com"
}
}
3.8 - STUN & TURN services
Usage and configuration
Purpose of STUN & TURN Services
STUN (Session Traversal Utilities for NAT) and TURN (Traversal Using Relays around NAT) servers play essential roles in WebRTC communication by helping manage NAT (Network Address Translation) traversal and facilitating peer-to-peer connectivity. These services ensure smooth media flow even when direct peer-to-peer connections are not possible.
- STUN: STUN servers provide the necessary information about a client’s public IP and port, which helps establish direct peer-to-peer connections. STUN is lightweight, but it only works if both peers can establish connections directly.
- TURN: TURN servers, on the other hand, relay media data between peers when direct connectivity is not possible, such as when one or both peers are behind symmetric NATs or firewalls. TURN is more resource-intensive, as it relays data through the server, making it essential for handling media traffic where direct connections fail.
Note: While there are several free STUN servers available, TURN functionality is generally not provided for free due to the high resource demand of relaying media traffic.
STUN & TURN Server in Browsolate
Browsolate includes the open-source Eturnal STUN/TURN server. If no alternative STUN/TURN servers are specified during setup, Browsolate will deploy an Eturnal server instance for you.
To use alternative servers, specify them as comma-separated URLs in the STUNUrls and TURNUrls parameters in the CloudFormation template or AWS Marketplace installation. This option can be particularly helpful for enterprises already using third-party WebRTC providers.
Configuring Authentication
Browsolate supports username/password authentication for TURN services as defined in RFC 8489. You can set the shared secret required for this authentication in the CloudFormation template during installation, as detailed in the WebRTCSecret parameter.
Sizing STUN/TURN Server Instances
The size and number of STUN/TURN server instances you deploy depend on your traffic volume and user network conditions:
- Instance Type: You can specify the instance type used for STUN/TURN servers in the CloudFormation configuration (e.g.,
t3.large
for moderate usage).
- Instance Count: Adjust the WebRTCInstances parameter to define the number of server instances deployed. This is useful for balancing load and maintaining performance across high volumes of media traffic.
Currently, autoscaling is not supported, so it’s important to select the appropriate instance size and count to meet your expected usage.
Integrating with Third-Party Providers
If your use case requires specific password requirements or you need to integrate Browsolate with third-party WebRTC providers, we offer customization options. For more details or to discuss custom integration needs, please contact us through the Contact Page.
4 - Launching Sessions
Instructions for launching and configuring sessions in Browsolate.
Built-in utilities
If EnableLauncherUI and PublicAPIAccess have been enabled at installation, a launcher page is available at
https://<aws_region>.<your_subdomain>.isolated.browsolate.com:5443/launcher.html
This page provides an easy-to-use interface for configuring and launching secure, isolated browsing sessions.
Advanced session options can be accessed by appending the advanced
query parameter to the URL.
https://<aws_region>.<your_subdomain>.isolated.browsolate.com:5443/launcher.html?advanced
At its core, launching a session simply involves navigating the end-users browser to a properly formatted URL. The launcher page is designed to generate these URLs based on the session settings you define. However, you are not limited to using the launcher page; URLs can be programmatically constructed within your own application.
To create session URLs programmatically, follow the guide Creating an Isolated Link.
Code Samples
Browser Extensions
These extensions must be installed in developer mode.
For Chromium-based Browsers (Edge/Chrome)
For Firefox
Configure the extension with the root URL for your Browsolate instance.
You may either use the extension with the API (Enter management password), or include the base64 URL encryption key in the extension configuration.
4.1 - Creating an Isolated link
Overview
Browsolate is a secure, isolated browser environment designed to safely render and interact with websites. To facilitate secure communication and configuration, Browsolate uses encrypted URLs containing JSON blobs that define browser session settings. These URLs are constructed with sensitive data that needs to be encrypted for safe transfer.
This documentation outlines how developers can construct such URLs, using encryption keys sourced from an API or AWS Secrets Manager.
Table of Contents
- How the System Works
- Encryption Key Sources
- Constructing URLs for Browsolate
- Example Implementations
- Deployment Considerations
- JSON Object Metadata
How the System Works
At the core of Browsolate’s system, URLs are used to initiate browser sessions with encrypted JSON data. This data is required to configure each session and contains sensitive information such as session parameters, permissions, and other settings.
Encryption Process:
- JSON Construction: Developers define session-related JSON.
- AES-256-CBC Encryption: The JSON blob is encrypted using the AES-256-CBC algorithm.
- Base64 Encoding: The encrypted data is base64-encoded and appended to the URL as a query parameter (
b8data
).
- URL Construction: The encrypted blob is added to the URL, making it secure for transmission.
https://<aws_region>.<your_subdomain>.isolated.browsolate.com/viewer.html?keyId=default&b8data=ENCRYPTED_BASE64_DATA
Where:
<aws_region>
is the AWS region where the instance is hosted.
<your_subdomain>
is the unique subdomain assigned to you as a customer using Browsolate.
Encrypting the JSON
API-Sourced Encryption
If the API has been enabled at deployment time, the data may be encrypted via a POST to the /encrypt
HTTP endpoint
API Endpoint:
- HTTP Basic Auth required.
- User:
b8admin
- Password:
(Specified during marketplace deployment)
- JSON Payload
- keyName: The name of key to use for encryption.
default
is created upon deployment
- data: The data to be encrypted. This may be in the form of an Object, or an escaped JSON string.
- JSON Response
{"encryptedData":"ENCRYPTED_BASE64_DATA"}
API Example:
POST /encrypt HTTP/1.1
Host: us-east-1.abc123_custid.isolated.browsolate.com
Authorization: Basic b8admin:password
Content-Type: application/json
{
"keyName": "default",
"data": {
"url": "https://example.com",
"linkExpiry": -1
}
}
The response contains the encrypted base64 data:
{
"encryptedData": "ENCRYPTED_BASE64_DATA"
}
AWS Secrets Manager
AWS Secrets Manager is used to secure the encryption keys. When deployed from AWS Marketplace, the secret b8_urlencryption_secrets-v1.json
is created (if not already present).
- Secret Name:
b8_urlencryption_secrets-v1.json
Secrets Manager Fetch Example:
aws secretsmanager get-secret-value --secret-id b8_urlencryption_secrets-v1.json
This returns the encryption keys stored as a JSON blob.
Constructing URLs for Browsolate
- Construct the JSON Payload: Create a JSON object that holds the session-related data.
- Encrypt the JSON Blob: Use AES-256-CBC encryption to encrypt the JSON payload with the chosen key. The initialization vector (IV) should be securely generated.
- Base64 Encode the Encrypted Data: After encryption, base64-encode the encrypted blob for URL-safe transmission.
- Construct the URL: Append the
b8data
query parameter to the base URL along with the keyId
, which identifies the source of the encryption key.
https://<aws_region>.<your_subdomain>.isolated.browsolate.com/viewer.html?keyId=default&b8data=ENCRYPTED_BASE64_DATA
Example Implementations
cURL Example - Calling the Browsolate API
For generating a URL, the API can be called via cURL as follows:
curl -X POST "https://us-west-1.your_subdomain.isolated.browsolate.com:5443/encrypt" \
-H "Authorization: Basic B64(b8admin:password)" \
-H "Content-Type: application/json" \
-d '{
"keyName": "default",
"data": {
"url": "https://example.com",
"linkExpiry": -1
},
"returnBase64": true
}'
Node.js Example - Encrypting the URL yourself
const crypto = require('crypto');
const base64url = require('base64url');
function encrypt(key, data) {
const iv = crypto.randomBytes(16);
const cipher = crypto.createCipheriv('aes-256-cbc', key, iv);
const encrypted = Buffer.concat([cipher.update(data, 'utf8'), cipher.final()]);
return base64url(Buffer.concat([iv, encrypted]));
}
const key = Buffer.from('your-256-bit-secret-key', 'utf8');
const jsonData = JSON.stringify({
"url": "https://example.com",
"linkExpiry": -1
});
const encryptedData = encrypt(key, jsonData);
const url = `https://us-east-1.your_subdomain.isolated.browsolate.com/viewer.html?keyId=default&b8data=${encryptedData}`;
console.log(url);
Further examples
Sample code for Java, Python, JavaScript and shell-scripting.
Deployment Considerations
Depending on the environment, the encryption key may be sourced differently:
- API Encryption: Ensure the API is enabled and credentials for accessing it are securely stored.
- AWS Secrets Manager: The marketplace application stores its keys in
b8_urlencryption_secrets-v1.json
The following table describes all the fields that may appear in the JSON object.
Name |
Type |
Description |
Default Value |
url * |
string |
URL to be browsed |
"" |
linkExpiry * |
abstime |
Absolute time this link expires (or -1 for no expiry) |
-1 |
clipboardRead |
boolean |
Allow reading from clipboard |
false |
clipboardWrite |
boolean |
Allow writing to clipboard |
false |
userAgent |
string |
User Agent string |
"" |
readOnly |
boolean |
Enable read-only mode |
false |
navigation |
boolean |
Allow navigation |
true |
urlEditable |
boolean |
URL is editable |
false |
sessionLifetime |
integer |
Session lifetime (secs) |
300 |
sessionExtensionAllowed |
boolean |
Allow session extension |
false |
sessionExtensionTime |
integer |
Time to extend session by (secs) |
30 |
screenWidth |
integer |
Screen width, or -1 for auto |
1024 |
screenHeight |
integer |
Screen height, or -1 for auto |
768 |
mobileAutoSize |
boolean |
Automatically size screen on mobile devices |
true |
debugModeEnabled |
boolean |
Enable debug mode |
false |
customRequestHeaders |
keyValue |
Custom request headers |
"" |
themeName |
string |
Theme name for the UI |
default |
linkId |
string |
Identifier for link, will be logged with all events generated by this URL |
"" |
logDirectUrlNavigation |
boolean |
Log whenever a page navigation occurs within a session |
false |
logIndirectUrlNavigation |
boolean |
Log whenever a URL is fetched from within a session |
false |
Note: Fields marked with *
are required.
4.2 - Session configuration options
When creating URLs to launch sessions in Browsolate, you can pass various runtime arguments to customize session behavior dynamically. These options allow for flexible control over user interactions, security, and session parameters during runtime.
Below is a detailed explanation of the available runtime arguments and their effects.
Runtime Arguments
Mandatory arguments
URL to Browse
The URL that will be opened in the isolated browser session. This must be a valid web address.
Link Expiry
Specifies the absolute time when the session link will expire, or -1
for no expiry.
- linkExpiry
- Type: Abstime
- Default:
-1
Clipboard Access
Allow Clipboard Read
Specifies whether the session is allowed to read content from the user’s clipboard. If set to true
, the session can access clipboard data.
- clipboardRead
- Type: Boolean
- Default:
false
Allow Clipboard Write
Specifies whether the session can write content to the user’s clipboard. If set to true
, the session can modify clipboard content.
- clipboardWrite
- Type: Boolean
- Default:
false
User Interface and Experience
Theme Name
Specifies the theme to use for the session’s user interface.
- themeName
- Type: String
- Default:
"default"
Read-Only Mode
Enables or disables read-only mode for the session. When enabled, the session restricts user actions such as input or interaction with web forms.
- readOnly
- Type: Boolean
- Default:
false
Allow Navigation
Determines if the user is allowed to navigate to different URLs during the session.
- navigation
- Type: Boolean
- Default:
true
URL Editable
Specifies whether the URL bar is editable by the user during the session.
- urlEditable
- Type: Boolean
- Default:
false
Session Management
Session Lifetime
Defines the total duration (in seconds) of the session before it is automatically terminated.
- sessionLifetime
- Type: Integer
- Default:
300
Allow Session Extension
Specifies whether the session can be extended beyond its original lifetime.
- sessionExtensionAllowed
- Type: Boolean
- Default:
false
Session Extension Time
Defines the amount of time (in seconds) to extend the session when allowed.
- sessionExtensionTime
- Type: Integer
- Default:
30
Screen Settings
Screen Width
Specifies the width of the browser window. Use -1
for automatic sizing.
- screenWidth
- Type: Integer
- Default:
-1
Screen Height
Specifies the height of the browser window. Use -1
for automatic sizing.
- screenHeight
- Type: Integer
- Default:
-1
Mobile Device Automatic Sizing
Automatically size the screen on mobile devices, ignore any fixed width and height.
- mobileAutoSize
- Type: Boolean
- Default:
true
Customization Options
User Agent String
Defines the User-Agent string for the session. This is an advanced option and can be used to modify how the browser identifies itself to websites.
Allows custom request headers to be sent with each HTTP request. This is an advanced option for customizing how requests are made.
- customRequestHeaders
- Type: KeyValue
- Default:
""
Debugging and Logging
Link ID
An identifier for the session link, which will be logged with all events generated by the session.
Log Direct URL Navigation
Logs whenever the user navigates directly to a new URL within the session.
- logDirectUrlNavigation
- Type: Boolean
- Default:
false
Log Indirect URL Navigation
Logs when URLs are fetched indirectly from within the session, such as through JavaScript.
- logIndirectUrlNavigation
- Type: Boolean
- Default:
false
Enable Debug Mode
Turns on debug mode for the session, which may provide additional diagnostic information.
- debugModeEnabled
- Type: Boolean
- Default:
false
5 - Logging
System and Session Logging
5.1 - Session logging
Session logs capture all user activity and interactions during a Browsolate session.
Introduction
Browsolate logs all session activity for auditing and security purposes. These logs are accessible through AWS CloudWatch in the log group named browsolate-logs. Each day has its own logfile, named according to the format sessions-YYYY-MM-DD
.
Logs are stored in the region where your Browsolate instance is deployed, and you can view them directly in CloudWatch.
Accessing Logs
- Navigate to AWS CloudWatch in your AWS Console.
- Select Log groups and find the log group named browsolate-logs.
- Inside this log group, you will find logs for each day, named in the format
sessions-YYYY-MM-DD
.
- Open the log for the desired date to view detailed session events.
Sample Log Entries
Logs capture key events such as the start and end of a session, along with various session parameters and configurations. Below are sample log entries for session start and session end events.
Sample Session Start Event:
{
"event": "session_start",
"sessionId": "SESSION:94e31200-7991-4c4b-8a3e-a211a43f8723",
"startTime": "2024-10-23T10:18:34.838Z",
"clipboardRead": true,
"sessionExtensionTime": 30,
"screenWidth": 1024,
"customRequestHeaders": {
"header1": "value1",
"header2": "value2"
},
"urlEditable": false,
"screenHeight": 768,
"readOnly": false,
"userAgent": "",
"sessionExtensionAllowed": false,
"url": "https://www.redacted .com/",
"logIndirectUrlNavigation": false,
"navigation": true,
"linkId": "",
"clipboardWrite": true,
"linkExpiry": -1,
"logDirectUrlNavigation": false,
"sessionLifetime": 300,
"debugMode": false
}
Sample Session End Event:
{
"event": "session_end",
"sessionId": "SESSION:94e31200-7991-4c4b-8a3e-a211a43f8723",
"startTime": "2024-10-23T10:18:34.838Z",
"endTime": "2024-10-23T10:18:47.937Z",
"sessionLengthSeconds": 13,
"reason": "Session ended",
"clipboardRead": true,
"sessionExtensionTime": 30,
"screenWidth": 1024,
"customRequestHeaders": {
"header1": "value1",
"header2": "value2"
},
"urlEditable": false,
"screenHeight": 768,
"readOnly": false,
"userAgent": "",
"sessionExtensionAllowed": false,
"url": "https://www.redacted.com/",
"logIndirectUrlNavigation": false,
"navigation": true,
"linkId": "",
"clipboardWrite": true,
"linkExpiry": -1,
"logDirectUrlNavigation": false,
"sessionLifetime": 300,
"debugMode": false
}
5.2 - System logging
System logs capture events related to the underlying infrastructure of Browsolate.
System logs
These logs help in tracking down issues related to deployment, configuration, and the overall health of the system.
System logs are stored in AWS CloudWatch under the ComputeStack log group. This log group is identified by the unique ID assigned during the installation process by the AWS Marketplace.
Accessing System Logs
- Navigate to AWS CloudWatch in your AWS Console.
- Select Log groups and find the log group named ComputeStack, followed by the unique ID generated during installation.
- Within this log group, you will find logs for different components of the system infrastructure.
Use Cases for System Logs
System logs are especially useful for:
- Debugging: Identifying issues related to infrastructure components such as ECS tasks, networking, or resource limits.
- Health Monitoring: Ensuring that all system components are running as expected and diagnosing potential failures or bottlenecks.
5.3 - Eturnal logs
Eturnal logs are generated by the integrated STUN/TURN server used for WebRTC traffic.
Eturnal logs in Browsolate
The Eturnal STUN/TURN server handles WebRTC traffic routing for Browsolate, allowing real-time video and audio streaming through firewalls and NATs. Logging for Eturnal is crucial for diagnosing connectivity issues and monitoring the performance of WebRTC sessions.
Eturnal logs are stored in the eturnal-logs log group in AWS CloudWatch.
Accessing Eturnal Logs
- Navigate to AWS CloudWatch in your AWS Console.
- Select Log groups and find the log group named eturnal-logs.
- Review the logs to track WebRTC traffic and diagnose any issues with STUN/TURN traffic handling.
6 - Troubleshooting and Logs
Common issues and solutions, along with logging details.
Common Issues and Solutions
- Connection problems (WebRTC, TURN servers).
- Performance issues (EC2 scaling, bandwidth).
Accessing Logs
- Session logging and monitoring.
- Where to find logs and how to interpret them.
7 - Licenses & Legal information
Licenses, privacy policy and legal information
End User License Agreement
Privacy policy
Open-Source Software Acknowledgment
At Browsolate, we are proud to use open-source software to build and enhance our products.
We recognize the hard work and dedication of the open-source community. This product includes software developed by many contributors from around the world, and we are committed to acknowledging their efforts and adhering to the terms of each license.