← Back to dashboard

BeyondTrust Integrations

What is it?

The dashboard integrates with four BeyondTrust products. Each has its own page and its own feature flag; this page is the map, plus the parts that belong to no single product.


Four products, four feature flags

Product Flag Settings panel Page
Password Safe / Secrets Safe password_safe_enabled Settings → Integrations → Password Safe password-safe.md
Privileged Remote Access pra_enabled Settings → Integrations → Privileged Remote Access privileged-remote-access.md
EPM for Linux epml_enabled Settings → Integrations → EPM for Linux epml.md
Entitle entitle_enabled Settings → Integrations → Entitle entitle.md

Password Safe, PRA and EPM-L used to share a single beyondtrust_enabled flag and a single Settings panel. They are now independent, because customers routinely license one or two of the three: a Password Safe deployment with no PRA no longer renders Gateway tabs and jump-item options it cannot use, and a PRA deployment needs no Secrets Safe licence to provision jump items.

Upgrading an existing install carries your old setting forward — the first boot after the upgrade copies whatever beyondtrust_enabled said into all three new flags, so nothing turns on or off by surprise. The legacy key is left in place, not deleted, so rolling back to a previous image is a no-op.

These are all Settings keys, not environment variables. The dashboard's config store reads from the database only; exporting an equivalently-named env var has no effect.

Independently gated is not independently behaved. Some paths genuinely need two products live, and enabling only one leaves them inert rather than broken: Kubernetes token rotation rotates a token whose ServiceAccount PRA injects; a database tunnel is PRA, while the credential it carries can be Password Safe-managed; and bt_ps_deploy_key_title stores a PRA Gateway's Docker deploy key in Password Safe. Each page says so where it applies.


Which page do I want?

I want to… Page
Check out a secret or managed-account credential at runtime Password Safe
Onboard a VM or cloud database as a managed system Password Safe
Rotate a Kubernetes ServiceAccount token Password Safe
Create Shell Jump / Web Jump / RDP / tunnel jump items Privileged Remote Access
Mint PRA Vault accounts for tunnel credentials Privileged Remote Access
Deploy or inventory more Gateway hosts Gateway hosts
Build EPM-L agent packages or mint installation tokens EPM-L
Request just-in-time cloud access Entitle
Pre-condition an image for any of the above below

Preparing images for BT management

This section stays on the hub because it is keyed to an artifact, not a product: one run of bt-ready-debian.sh hardens sshd for PRA Shell Jump, creates the Password Safe bootstrap account, and installs the EPM-L package — and its env vars all go into the same Packer build form.

Images built by the dashboard's Packer flow (/images/aws, /images/azure, /images/gcp) can be pre-conditioned for BeyondTrust pickup using the provisioner scripts under provisioners/beyondtrust/:

Script Targets Packer provisioner
bt-ready-debian.sh Debian, Ubuntu shell
bt-ready-rpm.sh RHEL, Rocky, CentOS Stream, AlmaLinux, Amazon Linux 2 / 2023 shell
bt-ready-windows.ps1 Windows Server, incl. Server Core powershell
bt-ready-windows11-vdi.ps1 Windows 11 multi-session (AVD SKU), for PRA VDI desktops powershell

What the Linux scripts prepare

PRA SSH certificate authority (optional)

Set BT_PRA_CA_PUBKEY to your PRA Vault SSH CA public key and the script pins it as a cert-authority line in each PRA account's authorized_keys, so those accounts trust certificates PRA issues instead of needing a static key. Unset ⇒ the feature is entirely off.

BT_PRA_USERS is the comma-separated list of accounts to create for it — and these must match the usernames of the PRA Vault SSH-CA accounts targeting this host, because a certificate is scoped to its vault account. It is not a list of people. BT_PRA_PRINCIPAL overrides the required principal; BT_PRA_SUDO=1 grants those accounts NOPASSWD sudo (default: none).

What the scripts deliberately don't do

Operator-overridable env vars

Set these as Packer build env on the build page. Full detail and a smoke-test recipe in provisioners/beyondtrust/README.md.

Var Notes
BT_TARGET_USER Force the sudoers-target user; default autodetects the cloud-default (ubuntu/debian/admin, ec2-user/rocky/centos/almalinux/cloud-user)
BT_ADMIN_USER The Password-Safe-managed bootstrap account (default adminuser)
BT_SEED_ADMIN_KEY=1 Seed adminuser's authorized_keys with a throwaway key so the AWS Systems Manager plugin has one to rotate — the private half is discarded. Relevant to the AWS SSM path, where the credential is minted on first change
BT_ADMIN_NOPASSWD_ALL=1 Full NOPASSWD: ALL sudo for adminuser instead of the scoped set — required for Ansible Config-Management become, which runs sudo's /bin/sh
BT_PRA_CA_PUBKEY PRA Vault SSH CA public key (enables certificate login)
BT_PRA_USERS Accounts to create for certificate login; names must match the PRA vault accounts
BT_PRA_PRINCIPAL Require a specific principal instead of the default (principal == username)
BT_PRA_SUDO=1 NOPASSWD sudo for those accounts
BT_EPML_URL Presigned URL to the EPM-L package; set to install it
BT_AUTOPATCH=1 Enable unattended-upgrades / dnf-automatic on the built image
BT_SKIP_UPDATES=1 Skip the upgrade step (faster iteration builds)
BT_SKIP_CLEANUP=1 Keep host keys / machine-id / logs while debugging
BT_APPLY_CIS=1 Run OpenSCAP remediation
BT_CIS_PROFILE Override the profile id (default CIS L1 Server)

Cross-cloud constraint: Azure's Packer builder invokes shell scripts as sudo -E sh '{{ .Path }}', forcing /bin/sh regardless of shebang. Both .sh scripts are strict POSIX sh (verified with dash -n) so they behave identically on AWS, Azure, and GCP. They also self-elevate via sudo -E, since the AWS and GCP templates invoke the provisioner as the cloud-default user rather than root.

Using them

Linux — upload the script to your active storage backend via /storage, then on the AWS / Azure / GCP build page pick it from the Load from storage dropdown above the Provisioner Script textarea.

Windowsbt-ready-windows.ps1 runs on the Azure Windows build (os_type=Windows) before the template's windows-restart + Sysprep finisher. It bakes OpenSSH + RDP into the output image so VMs deployed from it are reachable by SSH like Linux ones, plus agentless RDP through the Gateway.

Azure cannot inject SSH public keys into Windows VMs — that is a Linux-only deploy feature. So the key is authorized in the image. Use the public half of the keypair the dashboard holds in Key Vault (azure_ssh_keypair_secret_name) so the private half stays retrievable from the VMs tab exactly as it is for Linux. With no key set, password SSH still works using the admin password the deploy generates and vaults.

bt-ready-windows11-vdi.ps1 is the VDI counterpart: multi-session RDP, NLA + firewall for agentless PRA Remote RDP, conservative VDI optimizations, and optional first-boot staging of the Remote Support jump client — never baked installed, so each clone registers a distinct client (cloning an installed one produces a confused rep-console entry, KB0017470).


Where else BeyondTrust shows up

Doc What it covers
Gateway hosts The managed-vs-requested Gateway lifecycle, placement, naming and node firewalls
Databases Cloud-DB provisioning, PRA tunnels, and Password Safe database onboarding
Kubernetes Cluster provisioning, PRA k8s tunnels, and access identity
Cloud VMs The full VM deploy story — provisioning, Shell Jump, onboarding, Entitle
Config management Ansible runs, including managed-account checkout as the login identity
Secrets management Where Password Safe sits among the dashboard's secret backends
provisioners/beyondtrust/README.md The image-prep scripts in depth, with a smoke-test recipe