mirror of
https://github.com/optim-enterprises-bv/vault.git
synced 2025-11-20 11:55:11 +00:00
committed by
Jeff Mitchell
parent
c1d69f8d79
commit
32c94e1a8c
@@ -9,11 +9,8 @@ description: |-
|
|||||||
|
|
||||||
# Vault Enterprise
|
# Vault Enterprise
|
||||||
|
|
||||||
Vault Enterprise includes a number of features that may be useful in
|
Vault Enterprise includes a number of features that may be useful in specific
|
||||||
specific workflows. These include:
|
workflows. Please use the sidebar navigation on the left to choose a specific
|
||||||
|
topic.
|
||||||
- [Replication](/docs/vault-enterprise/replication)
|
|
||||||
- [Secure Introduction Client](/docs/vault-enterprise/vsi)
|
|
||||||
- [HSM Key Wrapping and Auto-Unsealing](/docs/vault-enterprise/hsm)
|
|
||||||
|
|
||||||
These features are part of [Vault Enterprise](https://www.hashicorp.com/vault.html?utm_source=oss&utm_medium=docs&utm_campaign=vault&_ga=1.201793489.1956619674.1489356624).
|
These features are part of [Vault Enterprise](https://www.hashicorp.com/vault.html?utm_source=oss&utm_medium=docs&utm_campaign=vault&_ga=1.201793489.1956619674.1489356624).
|
||||||
|
|||||||
@@ -1,138 +0,0 @@
|
|||||||
---
|
|
||||||
layout: "docs"
|
|
||||||
page_title: "Vault Secure Introduction Client Configuration"
|
|
||||||
sidebar_current: "docs-vault-enterprise-vsi-configuration"
|
|
||||||
description: |-
|
|
||||||
Configuration details for Vault Secure Introduction Client.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Vault Secure Introduction Client Configuration
|
|
||||||
|
|
||||||
The Vault Secure Introduction client has a flexible configuration system that
|
|
||||||
allows combining settings from CLI flags, environment variables, and a
|
|
||||||
configuration file, in that order of preference.
|
|
||||||
|
|
||||||
Generally speaking, values with a source at a higher order of preference
|
|
||||||
override those from a source with a lower order of preference. The main
|
|
||||||
difference is in specification of servers, which is detailed further in this
|
|
||||||
document.
|
|
||||||
|
|
||||||
The available directives from the configuration file, as well as their
|
|
||||||
environment variable and CLI flag counterparts, follow.
|
|
||||||
|
|
||||||
## The Configuration File
|
|
||||||
|
|
||||||
The configuration file is in [HCL](https://github.com/hashicorp/hcl) format and
|
|
||||||
contains top-level directives as well as directive blocks. An example:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
environment "aws" {
|
|
||||||
}
|
|
||||||
|
|
||||||
vault {
|
|
||||||
address = "https://vault.service.consul:8200"
|
|
||||||
mount_path = "auth/aws"
|
|
||||||
}
|
|
||||||
|
|
||||||
serve "file" {
|
|
||||||
path = "/ramdisk/vault-token"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
The configuration file can be specified either with the `config` CLI flag
|
|
||||||
or by simply providing the path to the configuration file as the command's
|
|
||||||
argument.
|
|
||||||
|
|
||||||
All directives take string arguments unless explicitly specified otherwise.
|
|
||||||
|
|
||||||
## Top-Level Directives
|
|
||||||
|
|
||||||
* `environment`: A block with information about the environment under which the
|
|
||||||
client is running. If not specified, the client will attempt to
|
|
||||||
automatically discover its environment. The type may also be specified by
|
|
||||||
the `VAULT_SI_ENVIRONMENT` environment variable and the `environment` CLI
|
|
||||||
flag. Additional configuration key/value pairs can be passed in via the
|
|
||||||
`envconfig` CLI flag, which can be specified multiple times.
|
|
||||||
* `nonce_path`: If the client should save and load its nonce, the path where
|
|
||||||
the nonce should be stored. May also be specified by the
|
|
||||||
`VAULT_SI_NONCE_PATH` environment variable and the `nonce-path` CLI flag.
|
|
||||||
_This is a security-sensitive directive._
|
|
||||||
* `vault`: A block with Vault server information, detailed below.
|
|
||||||
* `serve`: One or more blocks containing serving information, detailed below.
|
|
||||||
|
|
||||||
## Environment Block Directives
|
|
||||||
|
|
||||||
In the configuration file, the type is specified as the block's key, with
|
|
||||||
optional additional string values specified inside:
|
|
||||||
|
|
||||||
```hcl
|
|
||||||
environment "aws" {
|
|
||||||
role = "prod"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
The behavior with respect to these additional string values is
|
|
||||||
environment-specific. Currently, all environments simply round-trip any given
|
|
||||||
values to the Vault login endpoint. In the example above using the AWS
|
|
||||||
environment, the final set of values given to the login endpoint would be a
|
|
||||||
`pkcs7` key coming from the environment, as well as a `role` key with value
|
|
||||||
`prod` coming from the extra environment configuration.
|
|
||||||
|
|
||||||
## Vault Block Directives
|
|
||||||
|
|
||||||
* `address`: The address of the vault server, including scheme. May also be
|
|
||||||
specified by the `VAULT_ADDR` environment variable and the `address` CLI
|
|
||||||
flag.
|
|
||||||
* `mount_path`: The mount path of the authentication backend in Vault. If not
|
|
||||||
set, defaults to a value specific to the running environment (e.g. for AWS,
|
|
||||||
it will default to `auth/aws`. May also be specified by the
|
|
||||||
`VAULT_SI_MOUNT_PATH` environment variable and the `mount-path` CLI flag.
|
|
||||||
* `tls_skip_verify`: A boolean indicating whether to skip verification of the
|
|
||||||
certificate provided by the Vault server. May also be specified by the
|
|
||||||
`VAULT_SKIP_VERIFY` environment variable or the `tls-skip-verify` CLI flag.
|
|
||||||
_This is a security-sensitive directive._
|
|
||||||
* `ca_cert`: A file containing a PEM-encoded X.509 CA certificate to use in
|
|
||||||
the validation chain of the Vault server's TLS certificate. May also be
|
|
||||||
specified by the `VAULT_CACERT` environment variable or the `ca-cert` CLI
|
|
||||||
flag.
|
|
||||||
* `ca_path`: A directory containing PEM-encoded X.509 CA certificates to use
|
|
||||||
in the validation chain of the Vault server's TLS certificate. May also be
|
|
||||||
specified by the `VAULT_CAPATH` environment variable or the `ca-path` CLI
|
|
||||||
flag.
|
|
||||||
|
|
||||||
## Serve Block Directives
|
|
||||||
|
|
||||||
In the configuration file, serve blocks can be one of two types:
|
|
||||||
|
|
||||||
* Named serve blocks specify a name (`serve "myserver" {...`). The type of server
|
|
||||||
must be specified by the `type` directive within the block.
|
|
||||||
* Anonymous serve blocks, rather than specify a name, specify the type of
|
|
||||||
server (`serve "file" {...`).
|
|
||||||
|
|
||||||
On the CLI, serve blocks are specified in one of two formats:
|
|
||||||
|
|
||||||
* `<type>:<key>=<value>`: specifies a key/value configuration directive for an
|
|
||||||
anonymous server with the given type.
|
|
||||||
* `<type>:<name>:<key>=<value>`: specifies a key/value configuration directive
|
|
||||||
for a named server with the given type.
|
|
||||||
|
|
||||||
The merging rules for CLI and configuration are as follows:
|
|
||||||
|
|
||||||
* Each anonymous serve block in the configuration file stands alone, using
|
|
||||||
only the directives contained in the block.
|
|
||||||
* Each type of anonymous server specified in CLI flags CLI stands alone, with
|
|
||||||
the key/value configuration directives merged per-type. As a result, there
|
|
||||||
can only be one anonymous server per type specified in CLI flags. These are
|
|
||||||
not merged with any anonymous server specified in the configuration file.
|
|
||||||
* Key/value configuration directives for named serve blocks are merged between
|
|
||||||
the CLI and configuration file.
|
|
||||||
|
|
||||||
### File Type Serve Block Directives
|
|
||||||
|
|
||||||
* `path`: The path to a file on disk where the token should be written. To
|
|
||||||
avoid any possible issues during writing, the token will first be written to
|
|
||||||
a temporary file in the same directory, then atomically renamed to the given
|
|
||||||
path. The token will always be written with permissions `0640`; directory
|
|
||||||
permissions for this location should ensure access only to appropriate
|
|
||||||
readers.
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
---
|
|
||||||
layout: "docs"
|
|
||||||
page_title: "About the Vault Secure Introduction Client"
|
|
||||||
sidebar_current: "docs-vault-enterprise-vsi"
|
|
||||||
description: |-
|
|
||||||
Vault Secure Introduction Client provides a turnkey way to securely introduce Vault tokens and features to applications running in various environments.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# About the Vault Secure Introduction Client
|
|
||||||
|
|
||||||
The Vault Secure Introduction Client is a feature of [Vault
|
|
||||||
Enterprise](https://www.hashicorp.com/vault.html) that provides a turnkey way
|
|
||||||
to securely introduce Vault tokens and features to applications running in
|
|
||||||
various environments. Currently, AWS EC2 instances are supported in conjunction
|
|
||||||
with Vault's AWS authentication backend. The client stays running until
|
|
||||||
terminated and will monitor the lifetime of retrieved Vault tokens, renewing
|
|
||||||
and reauthenticating as necessary.
|
|
||||||
|
|
||||||
Configuration is simple and can generally be performed purely using CLI flags.
|
|
||||||
Please see the [Configuration](/docs/vault-enterprise/vsi/configuration.html) page for details
|
|
||||||
on client configuration.
|
|
||||||
|
|
||||||
The [Security](/docs/vault-enterprise/vsi/security.html) page contains information and
|
|
||||||
suggestions to help deploy the client in a secure fashion. It assumes
|
|
||||||
familiarity with the AWS Authentication Backend.
|
|
||||||
@@ -1,113 +0,0 @@
|
|||||||
---
|
|
||||||
layout: "docs"
|
|
||||||
page_title: "Vault Secure Introduction Client Security"
|
|
||||||
sidebar_current: "docs-vault-enterprise-vsi-security"
|
|
||||||
description: |-
|
|
||||||
Guidelines for secure usage of Vault Secure Introduction Client.
|
|
||||||
---
|
|
||||||
|
|
||||||
# Vault Secure Introduction Client Security
|
|
||||||
|
|
||||||
This page discusses the various security-sensitive aspects of the Vault Secure
|
|
||||||
Introduction Client along with advice for secure usage.
|
|
||||||
|
|
||||||
## General Advice
|
|
||||||
|
|
||||||
### Use A Dedicated User
|
|
||||||
|
|
||||||
We recommend that the VSI client be run by a dedicated user that does not run
|
|
||||||
other services. This reduces the chance that an attack on another service can
|
|
||||||
lead to accessing sensitive information (for instance, if the ability of the
|
|
||||||
client to store its nonce is used). This also ensures that tokens written with
|
|
||||||
the `file` serving type are not accessible to processes run by other users.
|
|
||||||
|
|
||||||
### Write Tokens To Ephemeral Storage With A Dedicated Group
|
|
||||||
|
|
||||||
When using the `file` serving type to write tokens to paths on the filesystem,
|
|
||||||
the directories containing those paths should only be accessible to a group or
|
|
||||||
groups of services that require access to the Vault token. The tokens are
|
|
||||||
always written with permissions `0640`.
|
|
||||||
|
|
||||||
In addition, this should be a location that does not persist across reboots,
|
|
||||||
such as a ramdisk. After a reboot, the client will fetch a new token, so there
|
|
||||||
is no need to store the old one.
|
|
||||||
|
|
||||||
### Firewall Instance Metadata
|
|
||||||
|
|
||||||
If possible (based on operating system and/or distribution), use features of
|
|
||||||
the OS firewall to restrict access to the instance metadata (specifically the
|
|
||||||
signed `pkcs7` document) from the `http://169.254.169.254` endpoint to only the
|
|
||||||
users/groups that need it.
|
|
||||||
|
|
||||||
## Nonces
|
|
||||||
|
|
||||||
The AWS Authentication Backend operates on a Trust On First Use (TOFU)
|
|
||||||
principle, using nonces generated by a backend client to identify repeat
|
|
||||||
authentication requests by the same client.
|
|
||||||
|
|
||||||
A nice benefit of this approach is that if a bad actor is able to acquire
|
|
||||||
machine instance metadata and authenticate before the VSI client, the errors
|
|
||||||
from the VSI client logs indicating a client nonce mismatch can be used to
|
|
||||||
trigger an alarm.
|
|
||||||
|
|
||||||
The drawback is that reboot survivability is impacted. However, combinations of
|
|
||||||
options on the AWS Authentication Backend and the VSI client provide flexible
|
|
||||||
methods for managing this problem, allowing the security policy of nearly any
|
|
||||||
organization to be accommodated.
|
|
||||||
|
|
||||||
Following are the various strategies of nonce management.
|
|
||||||
|
|
||||||
### Immutable Instances
|
|
||||||
|
|
||||||
If your EC2 instances are running in Auto Scaling Groups (ASGs), one strategy
|
|
||||||
is to enable the `disallow_reauthentication` option on a configured AMI in the
|
|
||||||
AWS Authentication Backend (or an associated Role Tag). This allows only a
|
|
||||||
single token to be granted to any particular instance ID (unless cleared via
|
|
||||||
the `whitelist/identity` endpoint in the backend), regardless of nonce. As a
|
|
||||||
result, rather than reboot an instance running in an ASG, the instance can
|
|
||||||
simply be terminated; when the ASG brings up a new instance, the instance ID
|
|
||||||
will be different and the new instance will be allowed to authenticate.
|
|
||||||
|
|
||||||
### Manual/Automated Whitelist Management
|
|
||||||
|
|
||||||
This approach relies on either manual or automated intervention, perhaps keyed
|
|
||||||
by reboot notifications or notifications from parsing the VSI client's error
|
|
||||||
log. In this approach, knowledge of the reboot of an instance provides
|
|
||||||
assurance to an operator that they can clear the instance and its nonce from
|
|
||||||
the backend's whitelist via the `whitelist/identity` endpoint, allowing the
|
|
||||||
client to use its new generated nonce to authenticate.
|
|
||||||
|
|
||||||
### Instance Migration
|
|
||||||
|
|
||||||
If your EC2 instances do not rely on ephemeral storage across reboots, one
|
|
||||||
approach is to stop/start the instance rather than reboot it, in conjunction
|
|
||||||
with enabling the `allow_instance_migration` option on a configured AMI in the
|
|
||||||
AWS Authentication Backend (or an associated Role Tag).
|
|
||||||
|
|
||||||
When an instance is stopped and started, this causes a new placement of the
|
|
||||||
instances in the AWS infrastructure; this results in an updated value of
|
|
||||||
`pendingTime` in the instance metadata document. When the
|
|
||||||
`allow_instance_migration` option is turned on, a client is allowed to
|
|
||||||
authenticate for the same instance ID with a new nonce if the value of
|
|
||||||
`pendingTime` is later than the previously seen value.
|
|
||||||
|
|
||||||
### Nonce Storage
|
|
||||||
|
|
||||||
A final option for managing reboot survivability is to use the client's option
|
|
||||||
to store its nonce on the instance's filesystem and read this nonce the next
|
|
||||||
time it starts up.
|
|
||||||
|
|
||||||
Although this option provides the best automated reboot survivability
|
|
||||||
guarantees, it does require storing the nonce in persistent storage. If using
|
|
||||||
this option, filesystem permissions should be used to ensure that only the user
|
|
||||||
running the client has access to the directory where the nonce will be stored
|
|
||||||
(the nonce will always be stored with permissions `0600`).
|
|
||||||
|
|
||||||
This is a very security-sensitive option; so long as the nonce and instance
|
|
||||||
remain valid, disclosure of the nonce on a machine can allow any user or
|
|
||||||
service with access to the instance metadata to authenticate as the machine and
|
|
||||||
gain access to all Vault policies associated with the machine. For this reason,
|
|
||||||
you should also ensure that if you are having the client store its nonce, you
|
|
||||||
do not duplicate this nonce across instances (for instance, by baking it into
|
|
||||||
an AMI), as this would allow any user or service that learns this nonce with
|
|
||||||
access to any machine's instance metadata to authenticate as that instance.
|
|
||||||
@@ -344,17 +344,6 @@
|
|||||||
<li <%= sidebar_current("docs-vault-enterprise-replication")%> >
|
<li <%= sidebar_current("docs-vault-enterprise-replication")%> >
|
||||||
<a href="/docs/vault-enterprise/replication/index.html">Replication</a>
|
<a href="/docs/vault-enterprise/replication/index.html">Replication</a>
|
||||||
</li>
|
</li>
|
||||||
<li <%= sidebar_current("docs-vault-enterprise-vsi")%> >
|
|
||||||
<a href="/docs/vault-enterprise/vsi/index.html">Secure Introduction</a>
|
|
||||||
<ul class="nav">
|
|
||||||
<li <%= sidebar_current("docs-vault-enterprise-vsi-configuration")%> >
|
|
||||||
<a href="/docs/vault-enterprise/vsi/configuration.html">Configuration</a>
|
|
||||||
</li>
|
|
||||||
<li <%= sidebar_current("docs-vault-enterprise-vsi-security")%> >
|
|
||||||
<a href="/docs/vault-enterprise/vsi/security.html">Security</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li <%= sidebar_current("docs-vault-enterprise-hsm")%> >
|
<li <%= sidebar_current("docs-vault-enterprise-hsm")%> >
|
||||||
<a href="/docs/vault-enterprise/hsm/index.html">HSM Support</a>
|
<a href="/docs/vault-enterprise/hsm/index.html">HSM Support</a>
|
||||||
<ul class="nav">
|
<ul class="nav">
|
||||||
|
|||||||
Reference in New Issue
Block a user