Краткий 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:
Что бы удалить эти данные доступа — выполняем 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.