mirror of
https://github.com/hashicorp/vault.git
synced 2025-08-16 19:47:02 +02:00
* conversion stage 1 * correct image paths * add sidebar title to frontmatter * docs/concepts and docs/internals * configuration docs and multi-level nav corrections * commands docs, index file corrections, small item nav correction * secrets converted * auth * add enterprise and agent docs * add extra dividers * secret section, wip * correct sidebar nav title in front matter for apu section, start working on api items * auth and backend, a couple directory structure fixes * remove old docs * intro side nav converted * reset sidebar styles, add hashi-global-styles * basic styling for nav sidebar * folder collapse functionality * patch up border length on last list item * wip restructure for content component * taking middleman hacking to the extreme, but its working * small css fix * add new mega nav * fix a small mistake from the rebase * fix a content resolution issue with middleman * title a couple missing docs pages * update deps, remove temporary markup * community page * footer to layout, community page css adjustments * wip downloads page * deps updated, downloads page ready * fix community page * homepage progress * add components, adjust spacing * docs and api landing pages * a bunch of fixes, add docs and api landing pages * update deps, add deploy scripts * add readme note * update deploy command * overview page, index title * Update doc fields Note this still requires the link fields to be populated -- this is solely related to copy on the description fields * Update api_basic_categories.yml Updated API category descriptions. Like the document descriptions you'll still need to update the link headers to the proper target pages. * Add bottom hero, adjust CSS, responsive friendly * Add mega nav title * homepage adjustments, asset boosts * small fixes * docs page styling fixes * meganav title * some category link corrections * Update API categories page updated to reflect the second level headings for api categories * Update docs_detailed_categories.yml Updated to represent the existing docs structure * Update docs_detailed_categories.yml * docs page data fix, extra operator page remove * api data fix * fix makefile * update deps, add product subnav to docs and api landing pages * Rearrange non-hands-on guides to _docs_ Since there is no place for these on learn.hashicorp, we'll put them under _docs_. * WIP Redirects for guides to docs * content and component updates * font weight hotfix, redirects * fix guides and intro sidenavs * fix some redirects * small style tweaks * Redirects to learn and internally to docs * Remove redirect to `/vault` * Remove `.html` from destination on redirects * fix incorrect index redirect * final touchups * address feedback from michell for makefile and product downloads
166 lines
7.4 KiB
Markdown
166 lines
7.4 KiB
Markdown
---
|
|
layout: "docs"
|
|
page_title: "Vault Agent Auto-Auth"
|
|
sidebar_title: "Auto-Auth"
|
|
sidebar_current: "docs-agent-autoauth"
|
|
description: |-
|
|
Vault Agent's Auto-Auth functionality allows easy and automatic
|
|
authentication to Vault in a variety of environments.
|
|
---
|
|
|
|
# Vault Agent Auto-Auth
|
|
|
|
The Auto-Auth functionality of Vault Agent allows for easy authentication in a
|
|
wide variety of environments.
|
|
|
|
## Functionality
|
|
|
|
Auto-Auth consists of two parts: a Method, which is the authentication method
|
|
that should be used in the current environment; and one or more Sinks, which
|
|
are locations where the agent should write a token any time the current token
|
|
value has changed.
|
|
|
|
When the agent is started with Auto-Auth enabled, it will attempt to acquire a
|
|
Vault token using the configured Method. On failure, it will back off for a
|
|
short while (including some randomness to help prevent thundering herd
|
|
scenarios) and retry. On success, unless the auth method is configured to wrap
|
|
the tokens, it will keep the resulting token renewed until renewal is no longer
|
|
allowed or fails, at which point it will attempt to reauthenticate.
|
|
|
|
Every time an authentication is successful, the token is written to the
|
|
configured Sinks, subject to their configuration.
|
|
|
|
## Advanced Functionality
|
|
|
|
Sinks support some advanced features, including the ability for the written
|
|
values to be encrypted or
|
|
[response-wrapped](/docs/concepts/response-wrapping.html).
|
|
|
|
Both mechanisms can be used concurrently; in this case, the value will be
|
|
response-wrapped, then encrypted.
|
|
|
|
### Response-Wrapping Tokens
|
|
|
|
There are two ways that tokens can be response-wrapped by the agent:
|
|
|
|
1. By the auth method. This allows the end client to introspect the
|
|
`creation_path` of the token, helping prevent Man-In-The-Middle (MITM)
|
|
attacks. However, because the agent cannot then unwrap the token and rewrap
|
|
it without modifying the `creation_path`, the agent is not able to renew the
|
|
token; it is up to the end client to renew the token. The agent stays
|
|
daemonized in this mode since some auth methods allow for reauthentication
|
|
on certain events.
|
|
|
|
2. By any of the token sinks. Because more than one sink can be configured, the
|
|
token must be wrapped after it is fetched, rather than wrapped by Vault as
|
|
it's being returned. As a result, the `creation_path` will always be
|
|
`sys/wrapping/wrap`, and validation of this field cannot be used as
|
|
protection against MITM attacks. However, this mode allows the agent to keep
|
|
the token renewed for the end client and automatically reauthenticate when
|
|
it expires.
|
|
|
|
### Encrypting Tokens
|
|
|
|
~> This is experimental; if input/output formats change we will make every
|
|
effort to provide backwards compatibility.
|
|
|
|
Tokens can be encrypted, using a Diffie-Hellman exchange to generate an
|
|
ephemeral key. In this mechanism, the client receiving the token writes a
|
|
generated public key to a file. The sink responsible for writing the token to
|
|
that client looks for this public key and uses it to compute a shared secret
|
|
key, which is then used to encrypt the token via AES-GCM. The nonce, encrypted
|
|
payload, and the sink's public key are then written to the output file, where
|
|
the client can compute the shared secret and decrypt the token value.
|
|
|
|
~> NOTE: This is not a protection against MITM attacks! The purpose of this
|
|
feature is for forward-secrecy and coverage against bare token values being
|
|
persisted. A MITM that can write to the sink's output and/or client public-key
|
|
input files could attack this exchange.
|
|
|
|
To help mitigate MITM attacks, additional authenticated data (AAD) can be
|
|
provided to the agent. This data is written as part of the AES-GCM tag and must
|
|
match on both the agent and the client. This of course means that protecting
|
|
this AAD becomes important, but it provides another layer for an attacker to
|
|
have to overcome. For instance, if the attacker has access to the file system
|
|
where the token is being written, but not to read agent configuration or read
|
|
environment variables, this AAD can be generated and passed to the agent and
|
|
the client in ways that would be difficult for the attacker to find.
|
|
|
|
When using AAD, it is always a good idea for this to be as fresh as possible;
|
|
generate a value and pass it to your client and agent on startup. Additionally,
|
|
agent uses a Trust On First Use model; after it finds a generated public key,
|
|
it will reuse that public key instead of looking for new values that have been
|
|
written.
|
|
|
|
If writing a client that uses this feature, it will likely be helpful to look
|
|
at the
|
|
[dhutil](https://github.com/hashicorp/vault/blob/master/helper/dhutil/dhutil.go)
|
|
library. This shows the expected format of the public key input and envelope
|
|
output formats.
|
|
|
|
## Configuration
|
|
|
|
The top level `auto_auth` block has two configuration entries:
|
|
|
|
- `method` `(object: required)` - Configuration for the method
|
|
|
|
- `sinks` `(array of objects: required)` - Configuration for the sinks
|
|
|
|
### Configuration (Method)
|
|
|
|
These are common configuration values that live within the `method` block:
|
|
|
|
- `type` `(string: required)` - The type of the method to use, e.g. `aws`,
|
|
`gcp`, `azure`, etc. *Note*: when using HCL this can be used as the key for
|
|
the block, e.g. `method "aws" {...}`.
|
|
|
|
- `mount_path` `(string: optional)` - The mount path of the method. If not
|
|
specified, defaults to a value of `auth/<method type>`.
|
|
|
|
- `wrap_ttl` `(string or integer: optional)` - If specified, the written token
|
|
will be response-wrapped by the agent. This is more secure than wrapping by
|
|
sinks, but does not allow the agent to keep the token renewed or
|
|
automatically reauthenticate when it expires. Rather than a simple string,
|
|
the written value will be a JSON-encoded
|
|
[SecretWrapInfo](https://godoc.org/github.com/hashicorp/vault/api#SecretWrapInfo)
|
|
structure. Values can be an integer number of seconds or a stringish value
|
|
like `5m`.
|
|
|
|
- `config` `(object: required)` - Configuration of the method itself. See the
|
|
sidebar for information about each method.
|
|
|
|
### Configuration (Sinks)
|
|
|
|
These configuration values are common to all Sinks:
|
|
|
|
- `type` `(string: required)` - The type of the method to use, e.g. `file`.
|
|
*Note*: when using HCL this can be used as the key for the block, e.g. `sink
|
|
"file" {...}`.
|
|
|
|
- `wrap_ttl` `(string or integer: optional)` - If specified, the written token
|
|
will be response-wrapped by the sink. This is less secure than wrapping by
|
|
the method, but allows the agent to keep the token renewed and automatically
|
|
reauthenticate when it expires. Rather than a simple string, the written
|
|
value will be a JSON-encoded
|
|
[SecretWrapInfo](https://godoc.org/github.com/hashicorp/vault/api#SecretWrapInfo)
|
|
structure. Values can be an integer number of seconds or a stringish value
|
|
like `5m`.
|
|
|
|
- `dh_type` `(string: optional)` - If specified, the type of Diffie-Hellman exchange to
|
|
perform, meaning, which ciphers and/or curves. Currently only `curve25519` is
|
|
supported.
|
|
|
|
- `dh_path` `(string: required if dh_type is set)` - The path from which the
|
|
agent should read the client's initial parameters (e.g. curve25519 public
|
|
key).
|
|
|
|
- `aad` `(string: optional)` - If specified, additional authenticated data to
|
|
use with the AES-GCM encryption of the token. Can be any string, including
|
|
serialized data.
|
|
|
|
- `aad_env_var` `(string: optional)` - If specified, AAD will be read from the
|
|
given environment variable rather than a value in the configuration file.
|
|
|
|
- `config` `(object: required)` - Configuration of the sink itself. See the
|
|
sidebar for information about each sink.
|