Vault не работает: диагностика и устранение основных сбоев

Когда Vault перестаёт отвечать, первое, что стоит проверить, — статус самого сервера командой vault status: если она возвращает ошибку соединения или показывает Sealed: true, причина уже наполовину локализована. Именно запечатанное состояние хранилища и сбой подключения к API — две самые частые причины, по которым администраторы считают, что Vault «не работает», хотя сам процесс при этом может быть жив.

Проблема с запуском или доступом к HashiCorp Vault почти всегда оставляет следы в логах сервиса и в выводе диагностических команд. Ниже разобраны типичные сценарии: сервер не стартует, хранилище запечатано после перезагрузки, клиент не может подключиться, TLS-сертификат отклонён, токен просрочен. Для каждого случая приведены безопасные проверки, которые не требуют вмешательства в данные.

Проверка состояния сервера Vault

Начните с базовой диагностики. Выполните на машине, где развёрнут сервер:

vault status

Команда покажет, инициализировано ли хранилище, запечатано ли оно и какая версия запущена. Если в ответ приходит ошибка вида Error checking seal status или отказ в соединении, значит, либо процесс Vault не запущен, либо клиент обращается не по тому адресу.

Проверьте, слушает ли сервер нужный порт и переменную окружения VAULT_ADDR. Частая ситуация: сервер работает на https://, а клиент настроен на http:// (или наоборот), из-за чего любая команда завершается ошибкой. Сверьте адрес с секцией listener в конфигурационном файле сервера.

  • 🔍 Убедитесь, что процесс Vault запущен: systemctl status vault или аналог для вашей системы.
  • 🌐 Сверьте VAULT_ADDR с параметром address в блоке listener конфигурации.
  • 📄 Посмотрите журнал сервиса — в нём почти всегда есть строка с конкретной причиной остановки.
  • 🔁 Попробуйте выполнить vault status с флагом -address, явно указав адрес сервера.
📊 Что именно не работает в вашем Vault?
Сервер не запускается
Хранилище запечатано (sealed)
Клиент не подключается к API
Ошибки TLS/сертификата

Хранилище запечатано: почему это происходит

Vault при каждом старте находится в состоянии sealed — это штатное поведение, а не поломка. Данные хранилища зашифрованы, и пока не выполнена процедура unseal, сервер не обслуживает запросы к секретам. Если после перезагрузки сервера Vault «не работает», скорее всего, его просто никто не распечатал.

Для распечатывания нужны ключи unseal, которые были выданы при инициализации. Команда выглядит так:

vault operator unseal

При стандартной схеме Shamir команду потребуется выполнить несколько раз с разными ключами — количество зависит от порога, заданного при инициализации. Если используется auto-unseal через облачный KMS или HSM, а распечатывание не происходит автоматически, проверьте доступность внешнего сервиса ключей и права доступа к нему — сбой именно там блокирует весь запуск.

⚠️ Внимание: ключи unseal и root-токен нельзя хранить на том же сервере, где работает Vault. Если ключи утеряны, восстановить доступ к данным без них невозможно — это принципиальное свойство архитектуры, а не ограничение конкретной версии.

Сервер не стартует: типичные причины

Если процесс Vault падает сразу после запуска, причина обычно записана в журнале службы. Откройте его командой journalctl -u vault (для systemd) или в файле лога, если он задан в конфигурации.

Наиболее распространённые источники проблемы:

  • ⚙️ Ошибка синтаксиса в конфигурационном файле — лишняя скобка, неверный отступ или опечатка в имени параметра. Проверить файл заранее можно командой vault server -config=... в тестовом режиме либо валидацией HCL.
  • 📁 Недоступность бэкенда хранения: если используется файловое хранилище, проверьте права на каталог; если Consul или база данных — доступность соответствующего сервиса.
  • 🔐 Проблемы с TLS: сервер не стартует, если пути к сертификату или ключу в блоке listener указаны неверно или файлы недоступны для чтения.
  • 🚪 Порт уже занят другим процессом — проверьте, не слушает ли адрес другое приложение.

Меняйте конфигурацию по одному параметру за раз и перезапускайте сервис после каждого изменения — так проще понять, какая правка вызвала сбой.

☑️ Чек-лист перед перезапуском Vault

Выполнено: 0 / 5

Клиент не подключается к API

Отдельный класс проблем — сервер работает и распечатан, но команды с рабочей машины не проходят. Здесь виновником чаще всего оказывается сеть или аутентификация, а не сам Vault.

Проверьте доступность API простым HTTP-запросом к эндпоинту здоровья, например через curl к /v1/sys/health. Если соединение отклоняется — смотрите файрвол, группы безопасности и адрес прослушивания: Vault, слушающий только 127.0.0.1, недоступен с других машин, и это корректное поведение.

Если соединение устанавливается, но команды возвращают permission denied, дело в токене: он мог истечь, быть отозван или не иметь нужных политик. Выполните vault token lookup, чтобы увидеть срок действия и привязанные политики текущего токена. При необходимости пройдите аутентификацию заново через используемый auth-метод.

Ошибки TLS и сертификатов

Сообщения вида x509: certificate signed by unknown authority или certificate has expired означают, что клиент не доверяет сертификату сервера. Возможные причины: самоподписанный сертификат не добавлен в доверенные, сертификат просрочен, либо имя хоста в адресе не совпадает с именем в сертификате.

Что можно сделать безопасно:

  1. Проверьте срок действия сертификата, указанного в конфигурации сервера.
  2. Убедитесь, что клиенту доступен корневой CA: путь к нему можно передать через переменную окружения VAULT_CACERT.
  3. Сверьте имя хоста в VAULT_ADDR с полем Subject Alternative Name сертификата.

Флаг -tls-skip-verify подходит только для временной диагностики. Постоянная работа с отключённой проверкой сертификата снимает защиту от подмены сервера, поэтому в продуктивной среде так делать не следует.

⚠️ Внимание: при перевыпуске сертификатов для Vault обновите их на всех репликах кластера и перезапустите сервисы по очереди. Одновременная остановка всех узлов приведёт к полной недоступности хранилища и необходимости заново выполнять unseal.

Сравнение типичных симптомов и причин

Таблица ниже помогает быстро сопоставить наблюдаемый симптом с наиболее вероятной причиной и первым шагом диагностики.

СимптомВероятная причинаПервая проверка
vault status показывает Sealed: trueХранилище не распечатано после рестартаВыполнить vault operator unseal
Connection refused при любом запросеПроцесс остановлен или слушает другой адресСтатус службы и секция listener
Ошибка x509 при подключенииКлиент не доверяет сертификату сервераПроверить VAULT_CACERT и срок сертификата
Permission denied на все операцииТокен истёк или отозванvault token lookup, повторный логин
Сервис падает сразу после стартаОшибка конфигурации или недоступен бэкенд храненияЖурнал службы, валидация конфига
Что делать, если утеряны ключи unseal

Без порогового количества ключей unseal расшифровать хранилище невозможно — это заложено в модель безопасности Vault. Если ключи утеряны, но есть актуальный снапшот бэкенда и работающая копия кластера, можно развернуть новый кластер и восстановить данные из резервной копии с последующей реинициализацией. На будущее: распределите ключи между несколькими ответственными лицами или настройте auto-unseal через доверенный KMS.

Когда стандартные проверки не помогают

Если сервер запущен, распечатан, TLS в порядке, а часть функций всё равно не работает — смотрите глубже: включённые auth-методы и секреты-движки (vault auth list, vault secrets list), политики доступа и журналы аудита, если они настроены. Ошибка может крыться в конкретном плагине или в интеграции, например в недоступности внешней базы данных для динамических секретов.

Перед любыми необратимыми действиями — переинициализацией, сменой бэкенда хранения, отзывом токенов — убедитесь, что у вас есть резервная копия данных и понимание последствий. Для кластерных развёртываний сверяйтесь с официальной документацией HashiCorp Vault под вашу версию: поведение команд и параметров может отличаться между релизами.

Часто задаваемые вопросы

Почему Vault после перезагрузки сервера снова запечатан?

Это штатное поведение: при каждом старте Vault требует процедуры unseal. Чтобы не выполнять её вручную, можно настроить auto-unseal через облачный KMS, HSM или доверенный сервис — если ваша конфигурация это поддерживает.

Команда vault status выдаёт ошибку соединения, хотя сервис запущен. Что проверить?

Сверьте переменную VAULT_ADDR с адресом и схемой (http/https) из секции listener конфигурации. Также убедитесь, что сервер слушает не только loopback-интерфейс, если вы подключаетесь с другой машины.

Можно ли восстановить доступ, если потеряны все ключи unseal?

Нет, без порогового набора ключей расшифровать данные невозможно — это принципиальное свойство модели безопасности. Выход — развёртывание нового кластера и восстановление из резервных копий, если они есть.

Безопасно ли использовать -tls-skip-verify для постоянной работы?

Нет. Этот флаг отключает проверку подлинности сервера и годится только для временной диагностики. Для постоянной работы настройте доверие к CA через VAULT_CACERT или системное хранилище сертификатов.

Vault отвечает permission denied, хотя раньше всё работало. В чём дело?

Чаще всего истёк срок действия токена или изменились политики. Выполните vault token lookup для проверки состояния токена и пройдите аутентификацию заново через ваш auth-метод.