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
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 (the metadata sub-path is also required)
path "my-kv2-engine/*" {
capabilities = ["list"]
}
Userpass auth method users — one pair of rules per userpass mount
path "auth/my-userpass/*" {
capabilities = ["read", "list"]
}
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.
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 |