Vault можно установить по инструкции с сайта, но из-за санкций не всегда можно установить таким образом. Так же не всегда нужно устанавливать сервер, достаточно только агент. Ниже рассмотрим способ установки клиента в ручном режиме и настройки сервера
Установка
Установим необходимые зависимости
$ sudo apt update && sudo apt install -y jq wget unzipПо релизам в github получаем последнюю версию Vault
$ VERSION=$(curl -s "https://api.github.com/repos/hashicorp/vault/releases/latest" | jq -r '.tag_name' | sed 's/^v//')
$ echo $VERSION
1.21.4Определяем вспомогательные переменные для формирования ссылки на скачивание Vault
$ ARCH=amd64
$ OS=linuxСоздаем ссылку для скачивания Vault
$ URL="https://releases.hashicorp.com/vault/${VERSION}/vault_${VERSION}_${OS}_${ARCH}.zip"Так как доступ из Беларуси и России заблокирован, то можно воспользоваться зеркалом
$ URL="https://hashicorp-releases.yandexcloud.net/vault/${VERSION}/vault_${VERSION}_${OS}_${ARCH}.zip"Скачиваем архив с бинарником
$ wget "$URL"Распаковываем архив
$ unzip "vault_${VERSION}_${OS}_${ARCH}.zip"И переносим разархивированный файл в /usr/local/bin/
$ chmod +x vault
$ sudo mv vault /usr/local/bin/Проверяем работу
$ vault --version
Vault v1.21.4 (ffe7023c481dc1ea2d8550bbaca8d85f8e611e0b), built 2026-03-04T17:40:05ZНастройка автодополнения
Для того, чтобы подставлялось автодополнение при вводе команд по нажатию на Tab, необходимо для текущего пользователя настроить автодополнение
vault -autocomplete-installДанная команда в файл ~/.bashrc добавляет строку
complete -C /usr/local/bin/vault vault
Чтобы начало работать автодополнение, необходимо или перезайти в консоль или разово выполнить команду
$ complete -C /usr/local/bin/vault vaultНастройка сервера
Добавляем системного пользователя vault
$ sudo useradd -s /sbin/nologin --system vaultСоздаем необходимые директории и назначаем права доступа
$ sudo mkdir -p /etc/vault.d
$ sudo chown -R vault:vault /etc/vault.d
$ sudo chmod u=rwx,g=,o= /etc/vault.d
$ sudo mkdir -p /opt/vault/data
$ sudo mkdir -p /opt/vault/ssl
$ sudo chown -R vault:vault /opt/vault
$ sudo chmod u=rwx,g=,o= /opt/vaultСоздаем кофигурационный файл
$ sudo nano /etc/vault.d/vault.hclИ записываем следующие данные
# Copyright IBM Corp. 2016, 2025
# SPDX-License-Identifier: BUSL-1.1
# Full configuration options can be found at https://developer.hashicorp.com/vault/docs/configuration
ui = true
#mlock = true
#disable_mlock = true
storage "file" {
path = "/opt/vault/data"
}
#storage "consul" {
# address = "127.0.0.1:8500"
# path = "vault"
#}
# HTTP listener
listener "tcp" {
address = "127.0.0.1:8200"
tls_disable = 1
}
# HTTPS listener
# listener "tcp" {
# address = "0.0.0.0:8200"
# tls_cert_file = "/opt/vault/tls/tls.crt"
# tls_key_file = "/opt/vault/tls/tls.key"
# }
# Enterprise license_path
# This will be required for enterprise as of v1.8
#license_path = "/etc/vault.d/vault.hclic"
# Example AWS KMS auto unseal
#seal "awskms" {
# region = "us-east-1"
# kms_key_id = "REPLACE-ME"
#}
# Example HSM auto unseal
#seal "pkcs11" {
# lib = "/usr/vault/lib/libCryptoki2_64.so"
# slot = "0"
# pin = "AAAA-BBBB-CCCC-DDDD"
# key_label = "vault-hsm-key"
# hmac_key_label = "vault-hsm-hmac-key"
#}
В файл с переменными окружения добавляем адрес, к которому будет обращаться vault
$ sudo nano /etc/vault.d/vault.envИ добавляем переменную VAULT_ADDR
VAULT_ADDR=http://127.0.0.1:8200Так же добавляем эту переменную в файл ~/.bashrc текущего пользователя или глобально в /etc/environment. После чего необходимо перезайти в консоль или выполнить разово для работы с командами vault из консоли
$ export VAULT_ADDR=http://127.0.0.1:8200Создаем конфигурацию для запуска сервиса
$ sudo systemctl edit --full --force vault.serviceИ добавляем конфигурацию
[Unit]
Description="HashiCorp Vault - A tool for managing secrets"
Documentation=https://developer.hashicorp.com/vault/docs
Requires=network-online.target
After=network-online.target
ConditionFileNotEmpty=/etc/vault.d/vault.hcl
StartLimitIntervalSec=60
StartLimitBurst=3
[Service]
Type=notify
EnvironmentFile=/etc/vault.d/vault.env
User=vault
Group=vault
ProtectSystem=full
ProtectHome=read-only
PrivateTmp=yes
PrivateDevices=yes
SecureBits=keep-caps
AmbientCapabilities=CAP_IPC_LOCK
CapabilityBoundingSet=CAP_SYSLOG CAP_IPC_LOCK
NoNewPrivileges=yes
ExecStart=/usr/local/bin/vault server -config=/etc/vault.d/vault.hcl
ExecReload=/bin/kill --signal HUP $MAINPID
KillMode=process
KillSignal=SIGINT
Restart=on-failure
RestartSec=5
TimeoutStopSec=30
LimitNOFILE=65536
LimitMEMLOCK=infinity
LimitCORE=0
[Install]
WantedBy=multi-user.target
Перечитываем конфигурацию и запускаем сервис
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now vault.serviceРучная инициализация Vault
Для работы vault необходимо сгенерировать ключ доступа и ключи для разблокировки
$ vault operator init | sudo tee /etc/vault.d/init.tokenUnseal Key 1: JG3AtwWXM6Q9YLgpRmmFeaA1faj6bDMZpiEH/uaGgQ5K
Unseal Key 2: YxIgNTgg1B/sPdAO3DMozG3OseKCA5GgAGP4S4Vn6FMd
Unseal Key 3: BnNYnhIHQD6LQLMaHSTRK2dgDd7L8Ru6itLhn401Q9Ac
Unseal Key 4: Ypm6DPTLKggSl/tfrqOo20TFjMdzqrTzr/OtCH6WgIl0
Unseal Key 5: QtSeGeTdFBq99ngvlvPQQozOoPDjBj9wOcTnDp8ZTknt
Initial Root Token: hvs.2zfZHMvWg02moslgM1pJxe9O
Vault initialized with 5 key shares and a key threshold of 3. Please securely
distribute the key shares printed above. When the Vault is re-sealed,
restarted, or stopped, you must supply at least 3 of these keys to unseal it
before it can start servicing requests.
Vault does not store the generated root key. Without at least 3 keys to
reconstruct the root key, Vault will remain permanently sealed!
It is possible to generate new unseal keys, provided you have a quorum of
existing unseal keys shares. See "vault operator rekey" for more information.По-умолчанию, vault создает 5 ключей и для разблокировки необходимо ввести любых три из них. Ключи вводятся или в веб-интерфейсе, или с помощью команд в консоли после каждого запуска Vault
$ vault operator unseal BnNYnhIHQD6LQLMaHSTRK2dgDd7L8Ru6itLhn401Q9Ac
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed true
Total Shares 5
Threshold 3
Unseal Progress 1/3
Unseal Nonce 335ac2b9-5f54-838d-d929-01afc7a7ad2a
Version 1.21.4
Build Date 2026-03-04T17:40:05Z
Storage Type file
HA Enabled false
$ vault operator unseal QtSeGeTdFBq99ngvlvPQQozOoPDjBj9wOcTnDp8ZTknt
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed true
Total Shares 5
Threshold 3
Unseal Progress 2/3
Unseal Nonce 335ac2b9-5f54-838d-d929-01afc7a7ad2a
Version 1.21.4
Build Date 2026-03-04T17:40:05Z
Storage Type file
HA Enabled false
$ vault operator unseal JG3AtwWXM6Q9YLgpRmmFeaA1faj6bDMZpiEH/uaGgQ5K
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 5
Threshold 3
Version 1.21.4
Build Date 2026-03-04T17:40:05Z
Storage Type file
Cluster Name vault-cluster-4c4223dd
Cluster ID f2132b33-0927-d0d3-7292-f45234a82529
HA Enabled false
После того как разблокировали Vault он готов к работе
Автоматическая инициализация Vault
После каждого запуска vault необходимо вводить ключи для разблокировки, что неудобно, если сервис перезапустился, например, после обновления или перезагрузке машины. Данный процесс можно автоматизировать, для этого создайте скрипт
$ sudo nano /opt/vault/unseal.shСо следующим содержанием
#!/bin/bash
set -eu
UNSEAL=$1
# Первоначальная инициализация vault
if [ ! -f "$UNSEAL" ]; then
vault operator init > "$UNSEAL.tmp"
mv "$UNSEAL.tmp" "$UNSEAL"
chown vault:vault "$UNSEAL"
chmod u=rw,g=,o= "$UNSEAL"
fi
while IFS=: read -r KEY
do
vault operator unseal "$KEY"
# Получаем все ключи useal, перемешиваем и берем первых три
done <<< "$(grep -P 'Unseal Key \d:' "$UNSEAL" | awk '{ print $NF }' | sort -R | head -3)"
$ sudo chmod +x /opt/vault/unseal.shДобавим запуск этого скрипта после старта основного сервиса, для чего отредактируем сервис
sudo systemctl edit vault.serviceПри этом файл настройки открывается в режиме дополнения, т.е. исходная, ранее добавленная конфигурация остается без изменения, а только добавляется необходимые строки. В открывшемся редакторе добавляем строки
[Service]
ExecStartPost=/opt/vault/unseal.sh /etc/vault.d/init.tokenДалее перечитываем конфигурацию и перезапускаем сервис
$ sudo systemctl daemon-reload
$ sudo systemctl restart vault.serviceАутентификация по токену
Для работы через командную оболочку необходимо провести первоначальную аутентификацию по токену, который был создан при инициализации (см. «Initial Root Token» выше)
$ vault login token=hvs.2zfZHMvWg02moslgM1pJxe9OНастройка nginx
Управлять vault через браузер с локальной машины можно по адресу http://127.0.0.1:8200 (см. настройки выше /etc/vault.d/vault.hcl). Чтобы обеспечить доступ с других машин, нужно поменять в настройках с 127.0.0.1 на 0.0.0.0. Но при этом трафик будет не зашифрован. Можно включить в настройках подключение по https. Для этого необходимо сгенерировать самоподписные сертификаты, что вызывает недоверие у браузеров и утилит (например, получение паролей для приложения), которые обращаются к vault с других машин
Чтобы было удобно обращаться к vault лучше всего настроить виртуальный хост nginx. Минимальная настройка может выглядеть следующим образом
server {
server_name vault.example.com;
listen 80;
listen [::]:80;
access_log /var/log/nginx/vault.example.com-access.log;
error_log /var/log/nginx/vault.example.com-error.log;
location / {
proxy_pass http://127.0.0.1:8200;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}