Vault: установка и базовые операции

Автор: | 01/02/2016

vault_logoКраткий HowTo по установке и использованию Vault от  Hashicorp.

Установка выполняется на Ubuntu 14.

Загрузить архив с Vault можно тут>>>.

Полная документация доступна тут>>>.

Установка Vault

$ cd /tmp/ && wget https://releases.hashicorp.com/vault/0.4.1/vault_0.4.1_linux_amd64.zip
$ unzip vault_0.4.1_linux_amd64.zip
Archive:  vault_0.4.1_linux_amd64.zip
  inflating: vault
$ ls -l vault
-rwxr-xr-x 1 vagrant vagrant 31659744 Jan 13 22:32 vault

Копируем исполняемый файл в подходящую директорию, например – /usr/local/bin:

$ sudo cp vault /usr/local/bin/

Проверяем:

$ vault -h
usage: vault [-version] [-help] <command> [args]

Common commands:
    delete           Delete operation on secrets in Vault
    path-help        Look up the help for a path
...

Запускаем Vault в developer-mode:

$ vault server -dev
==> WARNING: Dev mode is enabled!
...
The only step you need to take is to set the following
environment variables:

    export VAULT_ADDR='http://127.0.0.1:8200'

The unseal key and root token are reproduced below in case you
want to seal/unseal the Vault or play with authentication.

Unseal Key: 7d2d82ccc9ea5955fb491f5bc6f9194c51b0be9df20a58c24fc4c197c2f0086c
Root Token: 7a385b9e-16e1-5bc9-a73e-4fedf7170aab

==> Vault server configuration:

         Log Level: info
             Mlock: supported: true, enabled: false
           Backend: inmem
        Listener 1: tcp (addr: "127.0.0.1:8200", tls: "disabled")
           Version: Vault v0.4.1

==> Vault server started! Log data will stream in below:

2016/01/28 11:26:14 [INFO] core: security barrier initialized (shares: 1, threshold 1)
...

Открываем второй терминал, подключаемся к машине с Vault:

$ cd VMs/Vagrant/vault/
$ vagrant ssh
...
Last login: Thu Jan 28 11:20:03 2016 from 10.0.2.2
11:28:26 [vagrant@vagrant-ubuntu-trusty-64 ~] $

Проверяем доступ:

$ telnet 127.0.0.1 8200
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

Добавляем переменную VAULT_ADDR, которая указывает на хост с запущенным Vault:

$ export VAULT_ADDR='http://127.0.0.1:8200'

Для подключения и авторизации потребуются ключи доступа из лога запуска vault server -dev:

...
Unseal Key: 7d2d82ccc9ea5955fb491f5bc6f9194c51b0be9df20a58c24fc4c197c2f0086c
Root Token: 7a385b9e-16e1-5bc9-a73e-4fedf7170aab
...

Проверяем:

$ vault status
Sealed: false
Key Shares: 1
Key Threshold: 1
Unseal Progress: 0

High-Availability Enabled: false

Добавляем первые данные в хранилище:

$ vault write secret/hello value=world
Success! Data written to: secret/hello

Считываем их:

$ vault read secret/hello
Key           	Value
lease_duration	2592000
value         	world

Можно получить вывод в JSON формате:

$ vault read -format=json secret/hello
{
	"lease_id": "",
	"lease_duration": 2592000,
	"renewable": false,
	"data": {
		"value": "world"
	},
	"warnings": null
}

Удаляем данные:

$ vault delete secret/hello
Success! Deleted 'secret/hello'

Проверяем:

$ vault read secret/hello
No value found at secret/hello

Vault backend

Больше информации – тут>>> и тут>>>.

Vault может работать с несколькими бекендами, для каждого из которых имеется своя точка монтирования.

В примере выше – это был префикс secret/.

Добавляем новое хранилище:

$ vault mount generic
Successfully mounted 'generic' at 'generic'!

Проверяем точки монтирования:

$ vault mounts
Path        Type       Default TTL  Max TTL  Description
cubbyhole/  cubbyhole  n/a          n/a      per-token private secret storage
generic/    generic    system       system
secret/     generic    system       system   generic secret storage
sys/        system     n/a          n/a      system endpoints used for control, policy and debugging

Добавляем туда данные:

$ vault write generic/hello value=world
Success! Data written to: generic/hello

Что бы отмонтировать хранилище – выполняем:

$ vault unmount generic
Successfully unmounted 'generic'!

Получить помощь по монтированию бекендов:

$ vault mount --help
Usage: vault mount [options] type

  Mount a logical backend.

  This command mounts a logical backend for storing and/or generating
  secrets.

General Options:

  -address=addr           The address of the Vault server.
                          Overrides the VAULT_ADDR environment variable if set.
...

Динамические бекенды

Кратко рассмотрим работу с динамическими бекендами на примере AWS.

Полная версия документа – тут>>>.

Для работы с ним – нам потребуется зарегистрированный аккаунт AWS.

Создаем бекенд:

$ vault mount aws
Successfully mounted 'aws' at 'aws'!

Настраиваем подключение к AWS-аккаунту:

$ vault write aws/config/root access_key=AK***CQ secret_key=nS***j+
Success! Data written to: aws/config/root

Получение AWS_ACCESS_KEY и AWS_SECRET_KEY описано в посте Amazon web service: установка EC2 CLI tools.

Имейте ввиду, что прочитать эти данные нельзя:

$ vault read aws/config/root
Error reading aws/config/root: Error making API request.

URL: GET http://127.0.0.1:8200/v1/aws/config/root
Code: 500. Errors:

* unsupported operation

Добавим политику доступа IAM, которая позволяет пользователю выполнять любые операции с EC2-инстансами AWS аккаунта.

Создаем JSON-файл с таким содержимым:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "SiDMeiers",
      "Effect": "Allow",
      "Action": [
        "ec2:*"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

Примечание: пользуясь случаем – хочу передать привет полезному сервису JSONLint.

Описание элементов политик IAM можно почитать тут>>>.

Сохраняем данные в Vault:

$ vault write aws/roles/deploy [email protected]
Success! Data written to: aws/roles/deploy

И считываем их:

$ vault read aws/creds/deploy
Key            	Value
lease_id       	aws/creds/deploy/843476a9-8a0f-46c7-f281-76537026a66d
lease_duration 	3600
lease_renewable	true
access_key     	AK***3Q
secret_key     	l+***6T

Проверяем пользователей в консоли IAM:

Screen Shot 2016-01-29 at 13.18.15

Что бы удалить эти данные доступа – выполняем revoke, указав lease_id:

$ vault revoke aws/creds/deploy/843476a9-8a0f-46c7-f281-76537026a66d
Key revoked with ID 'aws/creds/deploy/843476a9-8a0f-46c7-f281-76537026a66d'.

На этом быстрое знакомство с Vault от Hashicorp закончено.

Дальше будет описана установка Consul и связка Vault + Consul.

Почитать – http://linoxide.com.