Azure
Manage Azure VMs, images, and containers
Azure takes its credentials from BeyondTrust Workload Credentials, so there is no
static key or .env value to fix here. Check the personal access token
and the dynamic-secret names under
Settings → Preview features →
Workload Credentials.
Complete the setup wizard, or set AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID, and AZURE_SUBSCRIPTION_ID in your .env file.
| Name / SKU | Publisher | OS | Actions |
|---|---|---|---|
Gallery images + standalone Managed Images in your resource group.
| Name | Source | OS | State | Actions | |
|---|---|---|---|---|---|
| Name | State | IP Addresses | Size | Location | Deployed By | Actions |
|---|---|---|---|---|---|---|
|
—
|
Job |
Deploy Azure VM
Marketplace URN publisher:offer:sku:version or full ARM resource ID (managed image / Shared Image Gallery version).
Batch names are capped at 15 characters so each VM gets a distinct in-guest hostname — keep the base to 12 or fewer to avoid truncation.
No NSGs found.
Key retrieved from vault:
Any Key Vault secret. Must be JSON with a public_key — validated on launch.
Requires Entitle registration enabled; private VMs also need a provisioned Entitle agent.
Requires Password Safe registration enabled; onboards the image's adminuser account, SSH-key managed.
BeyondTrust PRA options — optional; fall back to the configured defaults.
No PRA jump groups/Gateways returned — the shell jump falls back to the configured defaults.
Overrides bt_client_secret for this deploy's shell jump.
Overrides the ACI Gateway deploy key for this deploy.
Bulk Deploy Azure VMs
images selected — one VM per image. To deploy several copies of a single image, use the Count field on the normal deploy form.
No NSGs found.
Key retrieved from vault:
Capture VM Image
SSH key for
Retrieved from Azure Key Vault secret
— this is the canonical private key that pairs with the public key the
dashboard injected when the VM was deployed.
Keypair mismatch in Key Vault.
The stored public_key does not match the stored private_key. The VM
was provisioned with the public_key, so this private key WILL NOT
authenticate. Generate a new keypair (e.g.
ssh-keygen -t rsa -b 4096),
update both fields in the unified Key Vault secret, and redeploy.
Decode error:
Admin password for
Generated at deploy time and stored in the secrets backend
.
Build Azure Image with Packer
Provision a marketplace image with a shell or PowerShell script and register the result as a new Azure Managed Image. Runs as a tracked background job (typically 10–20 min; Windows builds run longer).
Shell script run before the Azure waagent deprovision step (which Packer always runs to generalize the image).
PowerShell script run (then a restart) before the Sysprep generalize step, which the build always runs last.
Loaded from .
BeyondTrust provisioner options — used by the bt-ready scripts; ignored by other provisioners.
Storage pins the version you synced and doesn't need BeyondTrust reachable from the build — sync it first on the Storage page. Not available on local-filesystem storage.
EPM-L is installed at build; activation runs post-deploy via the EPM-L integration.
Environment variables — passed to the provisioner script.
Secret refs are resolved at build start and passed via Packer sensitive variables — never written to the generated or archived template.
OT Demo Cell
Deploy a simulated plant cell — a Modbus PLC simulator (:502) + FUXA web HMI (:1881) from the Packer-baked ot-sim gallery image — with no public IP, and BeyondTrust access auto-wired: Web Jump → HMI, protocol tunnel → PLC port, plus the Shell Jump and optional Password Safe onboarding every Azure deploy gets. Bake the image first on the Build Image tab (Debian 12 preset + provisioners/ot/ot-sim-debian.sh).
Deploy a cell
No ot-sim image yet — build one on the Build Image tab, or tick "show all".
The cell gets no public IP — access is PRA-brokered only, which is the point.
No NSGs found.
The cell simulates all of these at once — each gets its own PRA protocol tunnel, so access can be granted per vendor. Protocols the image does not simulate (e.g. DNP3) stay available on the standalone tunnel card below.
BeyondTrust PRA placement — where the cell's jump items land; defaults are the configured azure_bt_jump_group_name / azure_jumpoint_name.
Pick the pair matching the cell's region. With a Gateway override the deploy skips the shared-gateway size check — the host behind that Gateway needs ≥2 GB RAM for the Web Jump.
The gateway backing the Web Jump needs ≥2 GB RAM (azure_jumpoint_vm_size Standard_B1ms minimum, Standard_B2s preferred — Settings → Integrations → Privileged Remote Access) — the deploy checks and refuses early with the remedy otherwise.
Cells
No OT cells yet.
Standalone OT Protocol Tunnel
A generic-TCP PRA protocol tunnel to any host the gateway can reach — for demoing against your own lab gear without deploying a cell.