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

Infrastructure diagram

2.2 - Network diagram

AWS Network diagram

Network diagram

2.3 - Security diagram

AWS Security diagram

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

  1. License Key: You will need a valid license key, which you will enter during the deployment process.
  2. 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.
  3. 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

  1. Deploying the Template: Using the AWS Management Console, AWS CLI, or SDK, initiate the CloudFormation template deployment using the provided S3 URL.

  2. 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.

  3. 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.

  4. 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.

  • ThemeCSS
    • Type: String
    • Default: ''

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.

  • Proxy
    • Type: String
    • Default: ''

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.

  • EC2MaxInstances
    • Type: Number
    • Default: 1

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.

  • HttpsConfig
    • Type: String
    • Default: ''

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.

  • Domain
    • Type: String
    • Default: ''

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.

  • ThemeCSSRegion
    • Type: String
    • Default: ''

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.

  • WebRTCSecret
    • Type: String
    • Default: ''

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.

  • STUNUrls

    • Type: String
    • Default: ''

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.

  • TURNUrls

    • Type: String
    • Default: ''

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:

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

  1. Create your custom CSS file.
  2. Upload the CSS file to S3.
  3. Get the ARN of the S3 object.
  4. 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

  1. Log in to the AWS Management Console.
  2. Navigate to S3 and create a new bucket (or use an existing bucket).
  3. Upload your custom CSS file to the S3 bucket.
  4. 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:

  1. In the S3 console, locate the uploaded CSS file.
  2. Click on the file to view its details.
  3. 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.

Example CloudFormation Parameter

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.

Important Information

  • 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

  1. Obtain your x509 private key and certificate.
  2. Concatenate the private key and certificate into a single file.
  3. Upload the concatenated file to AWS Secrets Manager.
  4. Retrieve the ARN of the stored secret.
  5. 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

  1. Log in to the AWS Management Console.
  2. Navigate to Secrets Manager.
  3. Click Store a new secret.
  4. In the Secret type section, choose Other type of secret.
  5. 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-----)
  6. 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:

  1. Open the AWS Management Console and navigate to Secrets Manager.
  2. Find the secret you created in the list.
  3. 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.

Example CloudFormation 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.

Proxy Parameter Format

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.

Example Formats:

  • 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.

Custom Request Headers

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

  1. How the System Works
  2. Encryption Key Sources
  3. Constructing URLs for Browsolate
  4. Example Implementations
  5. Deployment Considerations
  6. 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:

  1. JSON Construction: Developers define session-related JSON.
  2. AES-256-CBC Encryption: The JSON blob is encrypted using the AES-256-CBC algorithm.
  3. Base64 Encoding: The encrypted data is base64-encoded and appended to the URL as a query parameter (b8data).
  4. URL Construction: The encrypted blob is added to the URL, making it secure for transmission.

Example URL Format

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

  1. Construct the JSON Payload: Create a JSON object that holds the session-related data.
  2. 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.
  3. Base64 Encode the Encrypted Data: After encryption, base64-encode the encrypted blob for URL-safe transmission.
  4. Construct the URL: Append the b8data query parameter to the base URL along with the keyId, which identifies the source of the encryption key.

Example URL Format:

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:

  1. API Encryption: Ensure the API is enabled and credentials for accessing it are securely stored.
  2. AWS Secrets Manager: The marketplace application stores its keys in b8_urlencryption_secrets-v1.json

JSON Object Metadata

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.

  • URL
    • Type: String
    • Default: ""

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.

  • userAgent
    • Type: String
    • Default: ""

Custom Request Headers

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

An identifier for the session link, which will be logged with all events generated by the session.

  • linkId
    • Type: String
    • Default: ""

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

  1. Navigate to AWS CloudWatch in your AWS Console.
  2. Select Log groups and find the log group named browsolate-logs.
  3. Inside this log group, you will find logs for each day, named in the format sessions-YYYY-MM-DD.
  4. 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

  1. Navigate to AWS CloudWatch in your AWS Console.
  2. Select Log groups and find the log group named ComputeStack, followed by the unique ID generated during installation.
  3. 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

  1. Navigate to AWS CloudWatch in your AWS Console.
  2. Select Log groups and find the log group named eturnal-logs.
  3. 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.