2020-09-22 09:08:49 -07:00
# Boundary
2023-03-08 14:23:33 -05:00
2025-09-03 15:45:38 -04:00
- What is Boundary: https://developer.hashicorp.com/boundary/docs/what-is-boundary
- Website: https://www.developer.hashicorp.com/boundary/
2023-10-12 15:49:09 -07:00
- Forums: [HashiCorp Discuss ](https://discuss.hashicorp.com/c/boundary/ )
2025-09-03 15:45:38 -04:00
- Documentation: [https://developer.hashicorp.com/boundary/docs ](https://developer.hashicorp.com/boundary/docs )
2023-10-12 15:49:09 -07:00
- Tutorials: [HashiCorp's Learn Platform ](https://developer.hashicorp.com/boundary/tutorials )
2020-02-12 13:53:27 -05:00
2023-10-12 15:49:09 -07:00
<img alt="Boundary" src="boundary.png" alt="Image" width="500px"/>
2020-02-12 13:53:27 -05:00
2023-10-12 15:49:09 -07:00
Boundary is an identity-aware proxy that provides a simple, secure way to access hosts and critical systems on your network.
2020-02-12 13:53:27 -05:00
2023-10-12 15:49:09 -07:00
With Boundary you can:
* Integrate with your IdP of choice using OpenID Connect, enabling users to securely sign-in to their Boundary environment
2025-09-03 15:45:38 -04:00
* Provide just-in-time network access to network resources, wherever they reside
2023-10-12 15:49:09 -07:00
* Manage session credentials via a native static credential store, or dynamically generate unique per-session credentials by integrating with HashiCorp Vault
* Automate discovery of new endpoints
* Manage privileged sessions using Boundary’ s session controls
* Standardize your team's access workflow with a consistent experience for any type of infrastructure across any provider
2020-10-14 09:19:33 -07:00
2025-09-03 15:45:38 -04:00
Boundary is designed to be straightforward to understand, highly scalable, and
2020-10-14 09:19:33 -07:00
resilient. It can run in clouds, on-prem, secure enclaves and more, and does not require
2023-10-12 15:49:09 -07:00
an agent to be installed on every end host, making it suitable for access to managed/cloud services and container-based workflows in addition to traditional host systems and services.
2025-09-03 15:45:38 -04:00
<video controls>
<source src="https://www.datocms-assets.com/2885/1694719896-how-boundary-works-v3.mp4" type="video/mp4" alt="Watch the video" />
</video>
2023-10-12 15:49:09 -07:00
2025-09-03 15:45:38 -04:00
For more information, refer to "[What is Boundary? ](https://developer.hashicorp.com/boundary/docs/what-is-boundary )" on the Boundary website.
2023-10-12 15:49:09 -07:00
2023-11-01 13:53:39 -07:00
## Getting Started
2020-02-12 13:53:27 -05:00
2025-09-03 15:45:38 -04:00
Boundary consists of two server components:
2020-02-12 13:53:27 -05:00
2023-10-12 15:49:09 -07:00
* **Controller**, which serves the API and coordinate session requests
* **Workers**, which perform session handling
2020-02-12 13:53:27 -05:00
2023-10-12 15:49:09 -07:00
A real-world Boundary installation will likely consist of one or more
controllers paired with one or more workers. A single Boundary binary can act
in either, or both, of these two modes.
2020-02-12 13:53:27 -05:00
2025-09-03 15:45:38 -04:00
Additionally, Boundary provides a Desktop client and CLI for end-users to request and establish
2023-10-12 15:49:09 -07:00
authorized sessions to resources across a network.
<img src="boundary_desktop_example.gif" alt="Boundary Desktop GIF" width="66%" height="66%" loop="true">
Boundary does _not_ require software to be installed on your hosts and services.
2020-02-12 13:53:27 -05:00
## Requirements
2025-09-03 15:45:38 -04:00
Boundary has two external dependencies:
2023-10-12 15:49:09 -07:00
- A SQL database
- At least one KMS
### SQL database
2025-09-03 15:45:38 -04:00
The database contains Boundary's configuration and session information. The
controller nodes must be able to access the database.
2023-10-12 15:49:09 -07:00
Values that are secrets (e.g credentials) are encrypted in the database. Currently, PostgreSQL is supported as a database and has been tested with Postgres 12 and above.
Boundary uses only common extensions and both hosted and self-managed instances are supported. In most instances, all that you need is a database endpoint and the appropriate credentials.
2020-02-12 13:53:27 -05:00
2025-09-03 15:45:38 -04:00
### KMS
2023-10-12 15:49:09 -07:00
Boundary uses KMS keys for various purposes, such as protecting secrets, authenticating workers, recovering data, encrypting values in Boundary’ s configuration, and more. Boundary uses key derivation extensively to avoid key sprawl of these high-value keys.
2025-09-03 15:45:38 -04:00
You can use [any cloud KMS or Vault's Transit Secrets Engine to satisfy the KMS requirement ](https://developer.hashicorp.com/boundary/docs/configuration/kms ).
2020-02-12 13:53:27 -05:00
2020-08-10 17:15:02 -04:00
## Trying out Boundary
2020-10-08 14:50:02 -04:00
2020-08-10 17:15:02 -04:00
Running Boundary in a more permanent context requires a few more steps, such
2020-02-12 13:53:27 -05:00
as writing some simple configuration files to tell the nodes how to reach their
2020-09-18 17:22:41 -07:00
database and KMS. The steps below, along with the extra information needed
2025-09-03 15:45:38 -04:00
for permanent installations, are detailed in our [Installation Guide ](https://developer.hashicorp.com/boundary/docs/deploy/self-managed/install ).
2023-10-12 15:49:09 -07:00
> ⚠️ Do _not_ use the `main` branch except for dev or test cases. Boundary 0.10 introduced release branches which should be safe to track, however, migrations in `main` may be renumbered if needed. The Boundary team will not be able to provide assistance if running `main` over the long term results in migration breakages or other bugs.
### Download and Run from Release Page
Download the latest release of the server binary and appropriate desktop
client(s) from our [downloads page ](https://developer.hashicorp.com/boundary/downloads )
2020-02-12 13:53:27 -05:00
2023-10-12 15:49:09 -07:00
## Quickstart with Boundary Dev
2020-06-08 14:20:25 -07:00
2023-10-12 15:49:09 -07:00
Boundary has a `dev` mode that you can use for testing. In `dev` mode, you can start both a
controller and worker with a single command, and they have the
following properties:
* The controller starts a PostgreSQL Docker container to use as storage.
This container will be shut down and removed, if possible, when the
controller is shut down gracefully.
* The controller uses an internal KMS with ephemeral keys
2022-08-25 14:59:23 -04:00
2023-10-12 15:49:09 -07:00
### Building from Source
If you meet the following local requirements, you can quickly get up and running with Boundary:
- Go v1.21 or greater
2020-06-08 14:20:25 -07:00
- Docker
2023-10-12 15:49:09 -07:00
- Either the [Boundary UI dependencies ](https://github.com/hashicorp/boundary-ui#prerequisites )
2022-09-20 11:14:02 -04:00
for locally building the ui assets
or [gh cli ](https://cli.github.com ) for downloading pre-built ui assets.
2020-06-08 14:20:25 -07:00
2023-10-12 15:49:09 -07:00
Simply run:
2020-06-08 14:20:25 -07:00
2022-03-16 16:39:53 -04:00
```make install` ``
2020-06-08 14:20:25 -07:00
2020-10-08 14:50:02 -04:00
This will build Boundary. (The first time this is run it will fetch and compile
UI assets; which will take a few extra minutes.) Once complete, run Boundary in
` dev` mode:
2020-06-08 14:20:25 -07:00
2021-04-19 22:17:49 +02:00
` ``$GOPATH/bin/boundary dev` ``
2020-06-08 14:20:25 -07:00
2021-04-15 12:14:59 -04:00
Please note that development may require other tools; to install the set of
tools at the versions used by the Boundary team, run:
2020-10-15 10:46:43 -07:00
` ``make tools` ``
2022-03-16 16:39:53 -04:00
Without doing so, you may encounter errors while running ` make install`. It is important
2020-10-15 10:46:43 -07:00
to also note that using ` make tools` will install various tools used for Boundary
development to the normal Go binary directory; this may overwrite or take precedence
over tools that might already be installed on the system.
2020-08-10 17:15:02 -04:00
### Start Boundary
2020-06-08 14:20:25 -07:00
2020-06-30 11:26:22 -04:00
Start the server binary with:
2020-06-08 14:20:25 -07:00
2020-08-10 17:15:02 -04:00
` ``boundary dev` ``
2020-06-08 14:20:25 -07:00
2020-06-30 11:26:22 -04:00
This will start a Controller service listening on ` http://127.0.0.1:9200` for
2020-10-08 14:50:02 -04:00
incoming API requests and a Worker service listening on ` http://127.0.0.1:9202`
for incoming session requests. It will also create various default resources and
display various useful pieces of information, such as a login name and password
that can be used to authenticate.
2020-02-12 13:53:27 -05:00
2020-06-30 11:26:22 -04:00
### Configuring Resources
2020-02-12 13:53:27 -05:00
2020-08-10 17:15:02 -04:00
For a simple test of Boundary in ` dev` mode you don't generally need to
2020-02-12 13:53:27 -05:00
configure any resources at all! But it's useful to understand what ` dev` mode
2020-10-08 14:50:02 -04:00
did for you so you can then take further steps. By default, ` dev` mode will
create:
* The ` global` Scope for initial authentication, containing a Password-type
Auth Method, along with an Account for login.
* An organization Scope under ` global`, and a project Scope inside the
organization.
* A Host Catalog with a default Host Set, which itself contains a Host with the
2020-10-15 19:58:29 +05:30
address of the local machine (` 127.0.0.1`)
2020-10-08 14:50:02 -04:00
* A Target mapping the Host Set to a set of connection parameters, with a
default port of ` 22` (e.g. SSH)
2020-02-12 13:53:27 -05:00
2023-10-12 15:49:09 -07:00
You can go into Boundary's web UI or use its API to change these
2020-10-08 14:50:02 -04:00
default values, for instance if you want to connect to a different host or need
2024-02-21 18:26:53 +09:00
to modify the port on which to connect.
2020-02-12 13:53:27 -05:00
### Making the Connection
2020-08-10 17:15:02 -04:00
Next, let's actually make a connection to your local SSH daemon via Boundary:
2020-02-12 13:53:27 -05:00
2020-10-08 14:50:02 -04:00
1. Authenticate to Boundary; using default ` dev` values, this would be ` boundary
authenticate password -auth-method-id ampw_1234567890 -login-name admin
-password password`. (Note that if you do not include the ` password` flag you
will be prompted for it.)
2. Run ` boundary connect ssh -target-id ttcp_1234567890`. If you want to adjust
the username, pass ` -username <name>` to the command.
2023-10-12 15:49:09 -07:00
Check out the possibilities for target configuration to test out limiting (or increasing) the
2020-10-08 14:50:02 -04:00
number of connections per session or setting a maximum time limit; try canceling
an active session from the sessions page or via ` boundary sessions`, make your
own commands with ` boundary connect -exec`, and so on.
2020-02-12 13:53:27 -05:00
### Going Further
This example is a simple way to get started but omits several key steps that
could be taken in a production context:
* Using a firewall or other means to restrict the set of hosts allowed to
2020-10-08 14:50:02 -04:00
connect to a local service to only Boundary Worker nodes, thereby making
2020-08-10 17:15:02 -04:00
Boundary the _only_ means of ingress to a host
2023-10-12 15:49:09 -07:00
* Using the [Boundary Terraform provider ](https://registry.terraform.io/providers/hashicorp/boundary/latest ) to easily integrate Boundary with your
2020-10-08 14:50:02 -04:00
existing code-based infrastructure
2023-10-12 15:49:09 -07:00
* Pointing a BI tool (PowerBI, Tableau, etc.) at Boundary's data warehouse to
2020-10-08 14:50:02 -04:00
generate insights and look for anomalies with respect to session access
2023-10-12 15:49:09 -07:00
----
**Please note** : We take Boundary's security and our users' trust very
seriously. If you believe you have found a security issue in Boundary,
_please responsibly disclose_ by contacting us at
[security@hashicorp.com ](mailto:security@hashicorp.com ).
----
2021-02-12 10:43:05 -06:00
## Contributing
Thank you for your interest in contributing! Please refer to
[CONTRIBUTING.md ](https://github.com/hashicorp/boundary/blob/main/CONTRIBUTING.md ) for guidance.