HashiCorp Vault
Visualize Hashicorp Vault users and secret engines, map Vault users to employees, and monitor changes through queries and alerts.
- Installation
- Authorization
- Data Model
- Types
- Release Notes
Installation
This integration ingests HashiCorp Vault accounts, secret engines, secrets, auth backends, users, and OIDC identity entities. It supports both standalone (on-premise) and HashiCorp Vault Cloud (HCP). Three authentication methods are available: a static Vault token, OIDC via Azure Entra ID, or AppRole (Role ID + Secret ID).
Prerequisites
The Vault token or service principal you configure must have ACL policies granting the capabilities listed below. Add these rules to the policy attached to the token or Vault role.
Token self-lookup (required for all deployments)
path "auth/token/lookup-self" {
capabilities = ["read"]
}
Mount discovery (required for all deployments)
path "sys/internal/ui/mounts" {
capabilities = ["read"]
}
Secret engines — one rule per engine you want to ingest (KV v1, KV v2, and Cubbyhole)
# KV v1 example
path "my-kv-engine/*" {
capabilities = ["list"]
}
# KV v2 example: secrets are listed and their metadata read under the metadata/ sub-path
path "my-kv2-engine/metadata/*" {
capabilities = ["list", "read"]
}
# Cubbyhole (already granted by Vault's built-in default policy)
path "cubbyhole/*" {
capabilities = ["list"]
}
JupiterOne walks every folder under each engine, and any folder the token cannot list is skipped along with the secrets under it, so the rule should cover the whole engine. Without read on a KV v2 engine's metadata/* path, secrets are still ingested but without their version, timestamps or custom metadata.
Userpass auth method users — one pair of rules per userpass mount
path "auth/my-userpass/users" {
capabilities = ["list"]
}
path "auth/my-userpass/users/*" {
capabilities = ["read"]
}
OIDC identity entities (required when using the OIDC auth section, or the AppRole section on a cluster that has a JWT/OIDC auth method mounted)
path "identity/entity/id" {
capabilities = ["list"]
}
path "identity/entity/id/*" {
capabilities = ["read"]
}
For more information on HashiCorp Vault ACL policies, see the Vault policies documentation.
Configuration in HashiCorp Vault
Choose the authentication method that fits your deployment.
Option A: API Token
- Create or identify a Vault token whose policy includes the capabilities listed above.
- If you use Vault Enterprise or HCP Vault, note the namespace for your cluster (for example,
adminoradmin/team-a). The namespace is optional for standalone Vault. - Note the hostname of your Vault cluster, including the
https://scheme (for example,https://vault.example.com:8200).
For more information on Vault tokens, see the Vault tokens guide.
Option B: OIDC via Azure Entra ID
This method obtains a short-lived Vault token by exchanging an Azure Entra ID client-credentials JWT for a Vault login token via a Vault JWT/OIDC auth method.
- In Azure Entra ID, create an app registration for the JupiterOne integration. Note the Tenant ID, Client ID, and create a Client Secret.
- In HashiCorp Vault, configure a JWT/OIDC auth method (for example, mounted at
jwtoroidc). Create a role with:role_type = "jwt"bound_issuerset tohttps://sts.windows.net/<your-tenant-id>/bound_audiencesset to the Entra Client ID (or the custom audience you specify in Vault Audience)- The policy grants listed in the prerequisites above
- Note the auth mount path (for example,
jwt). If left blank, it defaults tooidc.
Option C: AppRole (Role ID + Secret ID)
This method exchanges a RoleID and SecretID for a short-lived Vault token at the AppRole login endpoint on each run, so no long-lived token needs to be provisioned for JupiterOne.
- In HashiCorp Vault, enable the AppRole auth method if it is not already enabled, and note the mount path without the
auth/prefix (for example,approle, notauth/approle). If left blank in JupiterOne, it defaults toapprole. On Vault Enterprise or HCP Vault, enable it in the same namespace you configure in JupiterOne: the login is sent to that namespace. - Create a role whose
token_policiesgrant the capabilities listed in the prerequisites above. The integration logs in again whenever the token nears expiry, so anytoken_ttlworks; a very short TTL only means more logins. - Leave the role's
token_num_usesat0(unlimited, the default). JupiterOne rejects use-limited tokens, because a token that runs out of uses partway through a sync would silently cut ingestion short. - Read the role's RoleID and generate a SecretID for it.
- Note the hostname of your Vault cluster, including the
https://scheme. The SecretID is a bearer credential, so this section requireshttps://.
For more information on this auth method, see the Vault AppRole documentation.
Configuration in JupiterOne
Navigate to the Integrations tab in JupiterOne and select HashiCorp Vault. Click New Instance and select an authentication section.
API Token
Creating an instance requires:
- HashiCorp Vault Hostname — The full URL of your Vault cluster, including the
https://scheme (for example,https://vault.example.com:8200). - HashiCorp Vault Namespace — The Vault namespace header value. Required for Vault Enterprise and HCP Vault clusters; leave blank for standalone Vault.
- HashiCorp Vault Token — A static Vault token whose attached policy grants the capabilities listed in the prerequisites.
OIDC (Azure Entra ID)
Creating an instance requires:
- HashiCorp Vault Hostname — The full URL of your Vault cluster, including the
https://scheme. - HashiCorp Vault Namespace — The Vault namespace header value. Required for Vault Enterprise and HCP Vault; leave blank for standalone Vault.
- Entra Tenant ID — The Azure Entra tenant ID (Directory ID) for your app registration.
- Entra Client ID — The application (client) ID of the Entra app registration.
- Entra Client Secret — A client secret value for the Entra app registration.
- Vault JWT/OIDC Role — The name of the Vault JWT/OIDC role to log in as.
- Vault JWT/OIDC Mount Path (optional) — The auth mount path for the JWT/OIDC method (for example,
jwtoroidc). Defaults tooidcwhen left blank. - Vault Audience (optional) — The audience value the Vault role expects in the JWT
audclaim. Falls back to the Entra Client ID when left blank.
AppRole (Role ID + Secret ID)
Creating an instance requires:
- HashiCorp Vault Hostname — The full URL of your Vault cluster, including the
https://scheme. - HashiCorp Vault Namespace — The Vault namespace header value. Required for Vault Enterprise and HCP Vault; leave blank for standalone Vault. The AppRole login is also sent to this namespace, so the AppRole auth method must be enabled in it.
- Vault AppRole Role ID — The RoleID of the Vault AppRole to log in as.
- Vault AppRole Secret ID — A SecretID issued for that AppRole. Rotate it in Vault and update it here as your SecretID TTL requires.
- Vault AppRole Mount Path (optional) — The auth mount path for the AppRole method, without the
auth/prefix (for example,approle). Defaults toapprolewhen left blank.
Click Create once all required fields are provided.
Data Volume Configuration
These optional settings control which secret metadata is ingested and whether secret values are read to fingerprint embedded certificates. They apply to every authentication method.
Data Filtering Options
| Field | Description | Default | Options |
|---|---|---|---|
| Custom Metadata Keys | A comma-separated list of KV v2 custom metadata keys to ingest as customMetadata.<key> properties on secret entities. Append :boolean, :number, or :date to a key to convert its value (keys without a suffix stay strings). Dates must be ISO 8601 (for example, 2027-10-07 or 2027-10-07T12:00:00Z) and are read as UTC unless they carry an offset; to also accept another layout, add it in parentheses, such as DD-MM-YYYY, DD/MM/YYYY, DD.MM.YYYY, MM-DD-YYYY, or MM/DD/YYYY. Values that do not match are omitted. For example: expires_at:date(DD-MM-YYYY),has_expiry:boolean,owner,type. | None (no custom metadata ingested) | Any custom metadata key names |
| Expiry Metadata Key | A custom metadata key whose value is also ingested as the secret's standard expiration property (for example, expires_at). The value is parsed using the date format you declared for that key in Custom Metadata Keys, or ISO 8601 if the key is not listed there. | None (no expiration set) | A single custom metadata key name |
Adding a type to a key that is already ingested changes that property's type, so update any queries or rules that compare it as a string.
Advanced Configuration
| Field | Description | Default |
|---|---|---|
| Hash Certificates | When enabled, JupiterOne reads each KV and Cubbyhole secret value to detect embedded PEM X.509 certificates and records their SHA-256 fingerprints on the secret entity. This requires the Vault token to also have read on the secret data path: path "my-kv2-engine/data/*" { capabilities = ["read"] } for KV v2, or read added to the my-kv-engine/* rule for KV v1. This is a broader grant than the rest of the integration needs, so leave the option off unless you use it. Reading secret values also increases integration run time. | Disabled |
Next steps
After creating the instance, it will begin ingesting data on the polling interval you selected. Continue to the Instance management guide to learn more about working with integration instances.
Permissions
IAM permissions that must be granted to the integration principal for data ingestion.
Show Permissions (10)
# Optional — only required when the hashCertificates option is enabled path "{engine_name}/data/*" { capabilities = ["read"] }path "auth/token/lookup-self" { capabilities = ["read"] }path "auth/{userpass_mount}/users" { capabilities = ["list"] }path "auth/{userpass_mount}/users/*" { capabilities = ["read"] }path "identity/entity/id" { capabilities = ["list"] }path "identity/entity/id/*" { capabilities = ["read"] }path "sys/internal/ui/mounts" { capabilities = ["read"] }path "{cubbyhole_name}/*" { capabilities = ["list"] }path "{engine_name}/*" { capabilities = ["list"] }path "{engine_name}/metadata/*" { capabilities = ["list", "read"] }
Endpoints
API endpoints that the integration makes requests to.
Show Endpoints (11)
{hostname}/v1/auth/token/lookup-self{hostname}/v1/auth/{userpass_mount}/users{hostname}/v1/auth/{userpass_mount}/users/{username}{hostname}/v1/identity/entity/id{hostname}/v1/identity/entity/id/{id}{hostname}/v1/sys/internal/ui/mounts{hostname}/v1/{cubbyhole_name}{hostname}/v1/{engine_name}{hostname}/v1/{engine_name}/data/*{hostname}/v1/{engine_name}/metadata{hostname}/v1/{engine_name}/metadata/*
Documentation Links
Links to provider documentation relevant to setup and configuration.
Show Documentation Links (9)
- https://developer.hashicorp.com/vault/api-docs/auth/token#lookup-a-token-self
- https://developer.hashicorp.com/vault/api-docs/auth/userpass
- https://developer.hashicorp.com/vault/api-docs/secret/cubbyhole
- https://developer.hashicorp.com/vault/api-docs/secret/identity/entity
- https://developer.hashicorp.com/vault/api-docs/secret/kv/kv-v1
- https://developer.hashicorp.com/vault/api-docs/secret/kv/kv-v2
- https://developer.hashicorp.com/vault/api-docs/system/internal-ui-mounts
- https://developer.hashicorp.com/vault/api-docs/system/mounts
- https://developer.hashicorp.com/vault/docs/concepts/policies
Entities
The following entities are created:
| Resources | Entity _type | Entity _class |
|---|---|---|
| Account | hashicorp_vault_account | Account |
| Authentication Backend | hashicorp_vault_auth_backend | Service |
| Secret | hashicorp_vault_secret | Secret, NHI |
| Secret Engine | hashicorp_vault_engine | Service |
| User | hashicorp_vault_user | User |
Relationships
The following relationships are created:
Source Entity _type | Relationship _class | Target Entity _type |
|---|---|---|
hashicorp_vault_account | HAS | hashicorp_vault_user |
hashicorp_vault_account | HAS | hashicorp_vault_engine |
hashicorp_vault_account | HAS | hashicorp_vault_auth_backend |
hashicorp_vault_auth_backend | HAS | hashicorp_vault_user |
hashicorp_vault_engine | HAS | hashicorp_vault_secret |
Mapped Relationships
The following mapped relationships are created:
Source Entity _type | Relationship _class | Target Entity _type | Direction |
|---|---|---|---|
hashicorp_vault_user | IS | User | FORWARD |
Hashicorp Vault Secret
hashicorp_vault_secret inherits from Secret, NHI
| Property | Type | Description | Specifications |
|---|---|---|---|
certificateSha256Fingerprints | array of strings | SHA-256 fingerprints (of the DER encoding, lowercase hex) of each PEM certificate found in the secret value. | |
currentVersion | number | Current version number of the KV v2 secret. | |
deleteVersionAfter | string | Duration after which KV v2 secret versions are automatically deleted (e.g. "3h25m19s"; "0s" means never). | |
isCasRequired | boolean | Whether Check-And-Set is required for writes to this KV v2 secret. | |
isCertificate | boolean | Whether the secret value contains one or more PEM X.509 certificates. Only populated when the hashCertificates option is enabled. | |
maxVersions | number | Maximum number of versions retained for the KV v2 secret (0 means the mount default). | |
pathname * | string | Full path of the secret within its engine, including any nested folders (e.g. app/aiassistant/secrets/openai/OpenAiClientOptions). | |
source * | string | The engine type the secret belongs to: one of kv1, kv2, or cubbyhole. |
Hashicorp Vault User
hashicorp_vault_user inherits from User
| Property | Type | Description | Specifications |
|---|---|---|---|
policies | array of strings |
Release Notes
- 2026-10-01 — Added configuration options to type custom metadata keys and map a key to the secret expiration date, enabling structured metadata fields including dates in custom formats.
- 2026-09-29 — Added AppRole authentication support, allowing the integration to authenticate to HashiCorp Vault using role IDs and secret IDs.
- 2026-09-28 — Added a configuration option to hash certificate values found in secrets, enabling cross-entity comparison of certificates stored in Vault.
- 2026-09-23 — HashiCorp Vault KV version 2 secrets are now fully ingested by recursively crawling all paths within each mount, capturing secret metadata including custom metadata fields.
- 2026-07-07 — Added Azure Entra ID OIDC authentication support, allowing the integration to authenticate using Azure service principal credentials.
- 2026-05-05 — HashiCorp Vault secrets are now classified as Non-Human Identity, improving visibility into non-human access and credential risk.