2015-04-10 06:31:26 +00:00
|
|
|
---
|
2020-01-18 00:18:09 +00:00
|
|
|
layout: docs
|
|
|
|
page_title: Secrets Engines
|
|
|
|
description: Secrets engines are mountable engines that store or generate secrets in Vault.
|
2015-04-10 06:31:26 +00:00
|
|
|
---
|
|
|
|
|
2017-09-20 20:05:00 +00:00
|
|
|
# Secrets Engines
|
2015-04-10 06:31:26 +00:00
|
|
|
|
2017-09-20 20:05:00 +00:00
|
|
|
Secrets engines are components which store, generate, or encrypt data. Secrets
|
|
|
|
engines are incredibly flexible, so it is easiest to think about them in terms
|
2021-02-23 15:17:44 +00:00
|
|
|
of their function. Secrets engines are provided some set of data, they take some
|
2017-09-20 20:05:00 +00:00
|
|
|
action on that data, and they return a result.
|
2015-04-10 06:31:26 +00:00
|
|
|
|
2017-09-20 20:05:00 +00:00
|
|
|
Some secrets engines simply store and read data - like encrypted
|
|
|
|
Redis/Memcached. Other secrets engines connect to other services and generate
|
|
|
|
dynamic credentials on demand. Other secrets engines provide encryption as a
|
|
|
|
service, totp generation, certificates, and much more.
|
2015-04-10 06:31:26 +00:00
|
|
|
|
2017-09-20 20:05:00 +00:00
|
|
|
Secrets engines are enabled at a "path" in Vault. When a request comes to Vault,
|
|
|
|
the router automatically routes anything with the route prefix to the secrets
|
|
|
|
engine. In this way, each secrets engine defines its own paths and properties.
|
|
|
|
To the user, secrets engines behave similar to a virtual filesystem, supporting
|
|
|
|
operations like read, write, and delete.
|
2015-04-10 06:31:26 +00:00
|
|
|
|
2017-09-20 20:05:00 +00:00
|
|
|
## Secrets Engines Lifecycle
|
2015-04-10 06:31:26 +00:00
|
|
|
|
2017-09-20 20:05:00 +00:00
|
|
|
Most secrets engines can be enabled, disabled, tuned, and moved via the CLI or
|
|
|
|
API. Previous versions of Vault called these "mounts", but that term was
|
|
|
|
overloaded.
|
2015-04-10 06:31:26 +00:00
|
|
|
|
2017-09-20 20:05:00 +00:00
|
|
|
- **Enable** - This enables a secrets engine at a given path. With few
|
|
|
|
exceptions, secrets engines can be enabled at multiple paths. Each secrets
|
|
|
|
engine is isolated to its path. By default, they are enabled at their "type"
|
|
|
|
(e.g. "aws" enables at "aws/").
|
2015-04-10 06:31:26 +00:00
|
|
|
|
2017-09-20 20:05:00 +00:00
|
|
|
- **Disable** - This disables an existing secrets engine. When a secrets engine
|
|
|
|
is disabled, all of its secrets are revoked (if they support it), and all of
|
|
|
|
the data stored for that engine in the physical storage layer is deleted.
|
2015-04-10 06:31:26 +00:00
|
|
|
|
2017-09-20 20:05:00 +00:00
|
|
|
- **Move** - This moves the path for an existing secrets engine. This process
|
|
|
|
revokes all secrets, since secret leases are tied to the path they were
|
|
|
|
created at. The configuration data stored for the engine persists through the
|
|
|
|
move.
|
2015-04-10 06:31:26 +00:00
|
|
|
|
2017-09-20 20:05:00 +00:00
|
|
|
- **Tune** - This tunes global configuration for the secrets engine such as the
|
|
|
|
TTLs.
|
2015-04-10 06:31:26 +00:00
|
|
|
|
2017-09-20 20:05:00 +00:00
|
|
|
Once a secrets engine is enabled, you can interact with it directly at its path
|
|
|
|
according to its own API. Use `vault path-help` to determine the paths it
|
|
|
|
responds to.
|
2015-04-10 06:31:26 +00:00
|
|
|
|
2017-11-06 20:29:09 +00:00
|
|
|
Note that mount points cannot conflict with each other in Vault. There are
|
|
|
|
two broad implications of this fact. The first is that you cannot have
|
|
|
|
a mount which is prefixed with an existing mount. The second is that you
|
|
|
|
cannot create a mount point that is named as a prefix of an existing mount.
|
|
|
|
As an example, the mounts `foo/bar` and `foo/baz` can peacefully coexist
|
|
|
|
with each other whereas `foo` and `foo/baz` cannot
|
2018-01-03 19:02:31 +00:00
|
|
|
|
2015-04-10 06:31:26 +00:00
|
|
|
## Barrier View
|
|
|
|
|
2017-09-20 20:05:00 +00:00
|
|
|
Secrets engines receive a _barrier view_ to the configured Vault physical
|
|
|
|
storage. This is a lot like a [chroot](https://en.wikipedia.org/wiki/Chroot).
|
2015-04-10 06:31:26 +00:00
|
|
|
|
2017-09-20 20:05:00 +00:00
|
|
|
When a secrets engine is enabled, a random UUID is generated. This becomes the
|
|
|
|
data root for that engine. Whenever that engine writes to the physical storage
|
|
|
|
layer, it is prefixed with that UUID folder. Since the Vault storage layer
|
2020-06-08 15:17:26 +00:00
|
|
|
doesn't support relative access (such as `../`), this makes it impossible for an
|
2017-09-20 20:05:00 +00:00
|
|
|
enabled secrets engine to access other data.
|
2015-04-10 06:31:26 +00:00
|
|
|
|
2017-09-20 20:05:00 +00:00
|
|
|
This is an important security feature in Vault - even a malicious engine
|
|
|
|
cannot access the data from any other engine.
|