Password managers: reading secrets from CyberArk, Delinea, Vault and Azure Key Vault
Lighthouse signs in to many things: CAs, Windows servers, appliances, cloud vaults, mail relays, ticketing systems. By default each password or token is a stored secret on the computer that uses it (lh secret set <name> on the server, DPAPI-protected; lh-outpost secret set <name> or Settings, Outposts, Secrets on an Outpost).
With the optional feature Password managers (Settings, Features; in every license), Lighthouse can instead read any of them from the password manager or secrets vault your organisation already uses, at the moment it needs it:
| Product | What Lighthouse calls | Reference |
|---|---|---|
| CyberArk Privileged Access (Central Credential Provider) | GET /AIMWebService/api/Accounts?AppID=…&Safe=…&Object=… |
cyberark:Safe/Object, or cyberark:Safe/Object#UserName for another property |
| Delinea Secret Server (on site or Secret Server Cloud) | GET /api/v1/secrets/{id}/fields/{slug} (or /winauthwebservices/…) |
delinea:1234 (the password field), or delinea:1234/username |
| HashiCorp Vault, KV version 1 or 2 | GET /v1/{mount}/data/{path} (KV 2) or /v1/{mount}/{path} (KV 1) |
vault:lighthouse/smtp#password (#password when no key is given) |
| Azure Key Vault secrets | GET https://{vault}.vault.azure.net/secrets/{name}[/{version}] |
azure:smtp-password, or azure:smtp-password/<version> |
| Any other vault with a PowerShell SecretManagement extension (KeePass, 1Password, BeyondTrust, AWS Secrets Manager, LastPass, CyberArk and Delinea extensions, and more) | Get-Secret -Vault <vault> -Name <name> on the computer that reads |
keepass:smtp-relay, keepass:smtp-relay#UserName for a credential's user name, #key for an entry of a hashtable |
The first part of a reference is the name you give the password manager in Lighthouse, so you can have several of the same product (cyberark-prod:…, cyberark-dmz:…).
What Lighthouse promises
- Read at the moment of use, never kept. The value is handed to the step that needs it and kept nowhere: no cache, no file, no database row, no log line. The next use reads again, so a password the manager rotates is the one used next time.
- Signs in as itself where the product allows, so there is no extra password to look after: the gMSA on the server, the Outpost's own account on an Outpost.
- Every read is in the Keeper's Log, with the reference and what it was for, never the value:
password-manager-read, orpassword-manager-read-failedwith the product's reason. - A refusal stops at once. HTTP 401 or 403 from the product fails the step with its reason, and nothing is retried.
- Outposts read for themselves. A job that runs from an Outpost reads its references on the Outpost's computer, with the Outpost's own sign-in. Lighthouse sends it the password manager's settings, which hold no secrets, and never sees the value (the same rule as Outpost secrets).
- TLS is always checked, redirects are never followed, and only https addresses are accepted.
Setting it up
- Settings, Features: turn on Password managers.
- Settings, Connections, Password managers, Add password manager: pick the product, give it a short name (references start with it, and it cannot be changed later), its address and how Lighthouse signs in.
- Try a reference: Lighthouse reads it as this server and says whether that worked, never what it read.
- Write the reference wherever a stored secret's name goes. For example, on a Windows Installation's Sign in as, the password secret
cyberark:Windows/svc-install. - For one of Lighthouse's own fixed-name secrets (only these can point) (
smtp-password,teams-webhook,slack-webhook,jira-token,servicenow-password,ai-model-key, an OpenID Connect provider'ssignin-<id>), add a pointer under Lighthouse's own secrets: Lighthouse then reads that name from the password manager. Remove the pointer and the stored value, if any, is used again. Secrets Lighthouse makes itself (keepers-log-seal,scep-ra,acme-key-*, webhook signing secrets and the password managers' ownpassword-manager-*) cannot be pointed anywhere.
Where references can go: a Windows Installation's Sign in as password, PFX and keystore passwords, network appliance passwords, cloud vault credentials, Jamf's client secret, DigiCert, Sectigo and GoDaddy API keys and passwords, a Vault CA's token or AppRole secret id, an ACME CA's EAB HMAC key and Cloudflare token, and a job's own SMTP password or Teams webhook.
In each product
Give Lighthouse read only on the secrets it needs, and nothing else.
CyberArk (Central Credential Provider)
- In the PVWA, add an Application for Lighthouse, such as
Lighthouse. That is the Application id. - Choose how the CCP recognises Lighthouse, and set the same under Signs in:
- OS user (recommended): add the service account as an allowed OS user, such as
EXAMPLE\gmsa-lighthouse$, and turn on Windows authentication for the AIMWebService application in the CCP's IIS. Lighthouse signs in with Negotiate (Kerberos) as that account. - Client certificate: issue the server a client certificate, put it with its key in
LocalMachine\My, allow the service account to read the key, and give the thumbprint. - Allowed Machines: the addresses of each Lighthouse server and Outpost. Use it only together with one of the above where you can.
- OS user (recommended): add the service account as an allowed OS user, such as
- Give the application Retrieve accounts on each safe Lighthouse reads from (add the application, and the CCP's Provider user, as safe members).
- Address: the CCP's base address, such as
https://ccp.example.com. Lighthouse adds/AIMWebService/api/Accounts.
Delinea Secret Server
- Windows authentication (recommended): turn on Integrated Windows Authentication for
winauthwebservices, and give the service account View on the secrets (or their folder). Address:https://secrets.example.com/SecretServer. - Application account: make an application account with View on the secrets. Give its user name, and type its password once in the dialog (kept in this server's secret store as
password-manager-<name>). Secret Server Cloud: addresshttps://<tenant>.secretservercloud.com. - References use the secret's id (in its address in Secret Server) and the field's slug:
passwordunless you add/username,/private-keyand so on.
HashiCorp Vault (KV)
- AppRole (recommended): make a role with a policy that only reads the paths Lighthouse needs, for example
path "secret/data/lighthouse/*" { capabilities = ["read"] }. Give the role id, and type the secret id once (kept aspassword-manager-<name>). - Token: a read-only, renewable token with that policy, typed once.
- Give the KV mount (
secretby default), its version (2 by default) and, on Vault Enterprise or HCP, the namespace.
Azure Key Vault
- Managed identity (recommended, when Lighthouse runs in Azure): give the VM's identity the role Key Vault Secrets User on the vault. For a user-assigned identity, give its client id.
- App registration: give its tenant id and client id, type its client secret once, and give the app Key Vault Secrets User.
- Address: the vault's Vault URI, such as
https://example-kv.vault.azure.net.
Any other vault: PowerShell SecretManagement
For a vault Lighthouse has no reader for, use Microsoft's SecretManagement module with that vault's extension. Lighthouse ships none of the vault's code: it runs one fixed script that calls Get-Secret, with the vault's name, the secret's name and the key passed as environment variables, never as script text, so nothing typed becomes code. The value comes back base64-encoded on standard output and is never in the script, so PowerShell's script block logging does not see it.
On each computer that reads (the Lighthouse servers, and any Outpost that runs those jobs):
- Install the modules for all users in Windows PowerShell 5.1, which Lighthouse runs on Windows:
Install-Module Microsoft.PowerShell.SecretManagement, <the vault's extension> -Scope AllUsers. (On a Linux Outpost, Lighthouse runspwsh.) - Register the vault as the account Lighthouse runs as, since vault registrations belong to the user: for a gMSA, run
Register-SecretVault -Name <vault> -ModuleName <extension> -VaultParameters @{...}from a scheduled task that runs as the gMSA, once. - Set the vault up to need no prompt (no master password typed at run time). Use the extension's own way to sign in non-interactively, such as a key file readable only by that account.
- In Lighthouse, add a password manager of the kind Any other, through PowerShell SecretManagement with that vault name, and try a reference.
The built-in readers above are still the better choice for CyberArk, Delinea, Vault and Azure: they sign in as Lighthouse itself with no module to keep up to date, and their errors say exactly what the product refused.
On an Outpost
The Outpost reads with its own account and its own secrets, so set up the product for it too:
- Windows authentication or OS user: allow the Outpost's service account as well.
- Client certificate: the certificate goes in the Outpost computer's
LocalMachine\My. - A password, token, secret id or client secret: set it on the Outpost under the same name,
password-manager-<name>unless the dialog gives another, with Settings, Outposts, Secrets orlh-outpost secret set.
Try a reference checks the server's access only; run the Outpost's job once to check its own.
When something is wrong
| You see | What to do |
|---|---|
… is in a password manager, and Password managers is off |
Turn it on under Settings, Features. |
There is no password manager called … |
Add it, or fix the first part of the reference. |
… refused Lighthouse … (HTTP 403: APPAP306E …) |
CyberArk: the OS user, certificate or address is not allowed for the application, or it has no access to the safe. |
… has nothing at … (HTTP 404: APPAP004E …) |
CyberArk: no account with that safe and object name. |
… refused Lighthouse … (HTTP 403: permission denied) |
Vault: the policy does not allow read on that path (KV 2 paths have /data/ after the mount). |
… needs the stored secret 'password-manager-…' |
Type it in the password manager's dialog, or set it with lh secret set (on an Outpost, lh-outpost secret set). |
… answered … with a redirect |
The address is wrong (for example, http to https, or a sign-in page); Lighthouse never follows redirects. |
What is not done yet
- Writing back to a password manager (for example, keeping a PFX password or a new key there) and rotating passwords from Lighthouse.
- Built-in readers for AWS Secrets Manager, BeyondTrust Password Safe, CyberArk Conjur and Google Secret Manager (SecretManagement covers those with an extension).
- A Try that runs on an Outpost.