2018-07-25 02:02:27 +00:00
|
|
|
---
|
|
|
|
layout: "docs"
|
|
|
|
page_title: "Vault Agent Auto-Auth"
|
New Docs Website (#5535)
* 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
2018-10-19 15:40:11 +00:00
|
|
|
sidebar_title: "Auto-Auth"
|
2018-07-25 02:02:27 +00:00
|
|
|
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
|
|
|
|
|
2018-09-11 19:05:44 +00:00
|
|
|
~> This is experimental; if input/output formats change we will make every
|
|
|
|
effort to provide backwards compatibility.
|
|
|
|
|
2018-07-25 02:02:27 +00:00
|
|
|
Tokens can be encrypted, using a Diffie-Hellman exchange to generate an
|
|
|
|
ephemeral key. In this mechanism, the client receiving the token writes a
|
2018-08-01 20:52:11 +00:00
|
|
|
generated public key to a file. The sink responsible for writing the token to
|
2018-07-25 02:02:27 +00:00
|
|
|
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
|
2018-09-11 19:05:44 +00:00
|
|
|
persisted. A MITM that can write to the sink's output and/or client public-key
|
|
|
|
input files could attack this exchange.
|
2018-07-25 02:02:27 +00:00
|
|
|
|
|
|
|
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.
|