open-vault/website/source/docs/secrets/consul/index.html.md

104 lines
3.1 KiB
Markdown
Raw Normal View History

2015-04-11 03:26:01 +00:00
---
layout: "docs"
page_title: "Secret Backend: Consul"
sidebar_current: "docs-secrets-consul"
description: |-
The Consul secret backend for Vault generates tokens for Consul dynamically.
---
# Consul Secret Backend
Name: `consul`
The Consul secret backend for Vault generates
2016-01-14 18:42:47 +00:00
[Consul](https://www.consul.io)
2015-04-11 03:26:01 +00:00
API tokens dynamically based on Consul ACL policies.
This page will show a quick start for this backend. For detailed documentation
on every path, use `vault path-help` after mounting the backend.
2015-04-11 03:26:01 +00:00
## Quick Start
2015-04-28 18:11:42 +00:00
The first step to using the consul backend is to mount it.
2015-04-27 03:17:55 +00:00
Unlike the `generic` backend, the `consul` backend is not mounted by default.
```
$ vault mount consul
Successfully mounted 'consul' at 'consul'!
```
[Acquire a management token from
2016-01-14 18:42:47 +00:00
Consul](https://www.consul.io/docs/agent/http/acl.html#acl_create), using the
`acl_master_token` from your Consul configuration file or any other management
token:
```shell
$ curl \
-H "X-Consul-Token: secret" \
-X PUT \
-d '{"Name": "sample", "Type": "management"}' \
http://127.0.0.1:8500/v1/acl/create
```
```javascript
{
"ID": "adf4238a-882b-9ddc-4a9d-5b6758e4159e"
}
```
2015-04-27 03:17:55 +00:00
Next, we must configure Vault to know how to contact Consul.
This is done by writing the access information:
```
$ vault write consul/config/access \
address=127.0.0.1:8500 \
token=adf4238a-882b-9ddc-4a9d-5b6758e4159e
2015-04-27 03:17:55 +00:00
Success! Data written to: consul/config/access
```
In this case, we've configured Vault to connect to Consul
on the default port with the loopback address. We've also provided
an ACL token to use with the `token` parameter. Vault must have a management
type token so that it can create and revoke ACL tokens.
The next step is to configure a role. A role is a logical name that maps
2016-03-09 14:50:23 +00:00
to a role used to generate those credentials. For example, lets create
2015-04-27 03:17:55 +00:00
a "readonly" role:
```
POLICY='key "" { policy = "read" }'
$ echo $POLICY | base64 | vault write consul/roles/readonly policy=-
Success! Data written to: consul/roles/readonly
2015-04-27 03:17:55 +00:00
```
The backend expects the policy to be base64 encoded, so we need to encode it
properly before writing. The policy language is [documented by
2016-01-14 18:42:47 +00:00
Consul](https://www.consul.io/docs/internals/acl.html), but we've defined a
read-only policy.
2015-04-27 03:17:55 +00:00
To generate a new set Consul ACL token, we simply read from that role:
```
$ vault read consul/creds/readonly
2015-04-27 03:17:55 +00:00
Key Value
lease_id consul/creds/readonly/c7a3bd77-e9af-cfc4-9cba-377f0ef10e6c
2015-04-27 03:17:55 +00:00
lease_duration 3600
token 973a31ea-1ec4-c2de-0f63-623f477c2510
```
Here we can see that Vault has generated a new Consul ACL token for us.
We can test this token out, and verify that it is read-only:
```
$ curl 127.0.0.1:8500/v1/kv/foo?token=973a31ea-1ec4-c2de-0f63-623f477c25100
[{"CreateIndex":12,"ModifyIndex":53,"LockIndex":4,"Key":"foo","Flags":3304740253564472344,"Value":"YmF6"}]
$ curl -X PUT -d 'test' 127.0.0.1:8500/v1/kv/foo?token=973a31ea-1ec4-c2de-0f63-623f477c2510
Permission denied
```
2015-04-27 18:08:47 +00:00
## API
2015-04-27 05:02:32 +00:00
The Consul secret backend has a full HTTP API. Please see the
2017-03-17 18:06:03 +00:00
[Consul secret backend API](/api/secret/consul/index.html) for more
details.