IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

Установка и настройка Hashicorp Vault

Установка и настройка HashiCorp Vault на Ubuntu включает несколько шагов, от установки самого Vault до его инициализации и настройки. Вот пошаговое руководство по установке и настройке Vault на Ubuntu.

Шаг 1: Установка Vault

  1. Установите зависимости: Обновите список пакетов и установите необходимые зависимости:
     
  2. Добавьте репозиторий HashiCorp: Добавьте официальный репозиторий HashiCorp для Ubuntu:
     
  3. Установите Vault: После добавления репозитория установите Vault:
     
  4. Проверьте установку: Убедитесь, что Vault установлен, проверив его версию:
     

Шаг 2: Настройка Vault

Vault может работать в различных режимах. Для базовой настройки мы будем запускать Vault в «dev» режиме или в режиме «standalone» для продакшн-среды.

2.1. Настройка для разработки (Development Mode)

В dev-режиме все хранится в памяти, и Vault работает в одноузловом режиме. Это удобно для тестирования и разработки.

Запустите Vault в dev-режиме:

После запуска вы получите root-токен доступа. Dev-сервер использует следующие параметры:

  • Хранение всех данных в памяти.
  • Веб-интерфейс по умолчанию доступен по адресу: http://127.0.0.1:8200.
  • Не требуется инициализация или unsealing.

2.2. Настройка Vault в продакшн-среде

Для продакшн-настроек Vault можно использовать хранилище, например, на базе файловой системы или консенсусные хранилища типа Consul.

  1. Создайте конфигурационный файл:

Создайте файл конфигурации Vault, например /etc/vault/config.hcl:

Пример базовой конфигурации с файловым хранилищем:

  • storage — определяет, как и где Vault хранит данные. В данном примере используется файловая система.
  • listener — указывает параметры прослушивания HTTP-трафика. TLS может быть отключен для тестирования, но в продакшн рекомендуется настроить TLS.
  • ui — включает веб-интерфейс Vault.
  1. Запустите Vault как сервис:

Создайте Systemd-юнит для управления Vault как сервисом:

Добавьте следующее содержимое:

Теперь перезагрузите systemd, чтобы обнаружить новый сервис:

Запустите и активируйте сервис Vault:

Шаг 3: Инициализация Vault

Для продакшн-настройки Vault необходимо инициализировать и «разблокировать» (unseal) его после каждой перезагрузки.

  1. Инициализация: Запустите инициализацию Vault:
    • После выполнения команды вы получите ключи разблокировки (unseal keys) и root-токен. Обязательно сохраните эти ключи в безопасном месте!
  2. Разблокировка (Unseal): Vault требует три из пяти ключей разблокировки (по умолчанию) для «разблокировки» сервера:
     

Шаг 4: Использование Vault

  1. Аутентификация с root-токеном: Используйте root-токен для аутентификации в Vault:
     
  2. Создание секретов: Добавьте секрет в Vault:
     
  3. Получение секретов: Получите секрет:
     

Шаг 5: Настройка TLS

Рекомендуется настроить TLS для безопасности в продакшн-среде. Для этого необходимо:

  1. Получить сертификат и приватный ключ.
  2. Обновить конфигурацию Vault, чтобы включить TLS, указав пути к сертификатам.

Пример конфигурации с TLS:

После этого перезапустите сервис Vault.

Теперь Vault настроен и готов к использованию. Вы можете управлять секретами, токенами доступа и использовать другие возможности, такие как аутентификация через различные бекенды, динамическое управление секретами и политики.

Возможные проблемы и их решения

Ошибка: Get «https://127.0.0.1:8200/v1/sys/seal-status»: tls: failed to verify certificate: x509: cannot validate certificate for 127.0.0.1 because it doesn’t contain any IP SANs

Эта ошибка возникает из-за того, что TLS-сертификат, который используется для соединения с HashiCorp Vault, не содержит IP-адрес (127.0.0.1) в поле Subject Alternative Name (SAN). Это обязательное требование для современных проверок сертификатов, и если IP-адрес отсутствует в SAN, то соединение через IP-адрес будет отвергнуто.

Необходимл создать корректный TLS-сертификат с IP SAN

Для правильной настройки нужно использовать сертификат, в котором IP-адрес 127.0.0.1 указан в поле SAN. Вот пример того, как можно сгенерировать такой сертификат с помощью OpenSSL.

  1. Создай файл конфигурации OpenSSL openssl.cnf с таким содержимым:
     
  2. Затем сгенерируй приватный ключ и самоподписанный сертификат:
     
  3. После этого ты сможешь указать Vault использовать эти сертификаты, обновив конфигурацию Vault:
     

После этого перезапусти Vault с новыми сертификатами.

Ошибка:

WARNING! VAULT_ADDR and -address unset. Defaulting to https://127.0.0.1:8200. Get «https://127.0.0.1:8200/v1/sys/seal-status»: tls: failed to verify certificate: x509: certificate signed by unknown authority

Эта ошибка говорит о том, что Vault пытается установить защищенное HTTPS-соединение с самим собой по адресу https://127.0.0.1:8200, но сертификат, который используется для этого соединения, не был подписан доверенным центром сертификации (CA). В итоге TLS-соединение не может быть установлено, так как сертификат считается недоверенным.

Возможные решения:

1. Отключение проверки TLS (временно, для отладки)

Для быстрого тестирования можно отключить проверку сертификатов с помощью переменной окружения VAULT_SKIP_VERIFY. Этот вариант не рекомендуется для production-среды, так как он снижает безопасность, но может быть полезен для отладки.

Это заставит Vault игнорировать недоверенные сертификаты.

2. Установка переменной окружения VAULT_ADDR

Если проблема связана с неправильным адресом, ты можешь явно задать адрес Vault, установив переменную окружения VAULT_ADDR, указав http вместо https, чтобы избежать необходимости использования сертификата.

Теперь попробуй выполнить команду:

3. Использование самоподписанных сертификатов

Если ты настраиваешь Vault с самоподписанным сертификатом, тебе нужно добавить этот сертификат в доверенные на твоей системе. Следуй этим шагам:

  1. Убедись, что ты используешь корректные самоподписанные сертификаты (если не уверен, можно сгенерировать новые, как описано ранее).
  2. Добавь самоподписанный сертификат в доверенные корневые сертификаты на своей системе.

Для Linux:

4. Использование опции -tls-skip-verify

Если ты не хочешь отключать TLS полностью, но хочешь игнорировать проверку сертификата для одной команды, можно использовать флаг -tls-skip-verify:

Для отладки можно временно отключить проверку сертификатов с помощью переменной VAULT_SKIP_VERIFY или флага -tls-skip-verify. Однако в production рекомендуется либо использовать доверенный сертификат, либо добавить самоподписанный сертификат в список доверенных на своей системе.

Как автоматизировать открытие vault после перезапуска?

Автоматизация открытия HashiCorp Vault после перезапуска — это важная задача, особенно в production-среде, чтобы минимизировать необходимость ручного вмешательства. Vault по умолчанию запускается в «запечатанном» состоянии, и его нужно вручную «распечатать» (unseal) с помощью ключей.

Способы автоматизации открытия Vault

1. Использование Shamir Auto-Unseal (с помощью облачного KMS)

HashiCorp Vault поддерживает автоматическое «распечатывание» (auto-unseal) с использованием внешних служб управления ключами (KMS). Это самый безопасный и рекомендуемый способ для production-сред.

Поддерживаемые KMS:
  • AWS KMS (Amazon Web Services Key Management Service)
  • Azure Key Vault (Microsoft Azure)
  • Google Cloud KMS

Пример использования AWS KMS:

  1. Настройка AWS KMS:
    • Создай ключ в AWS KMS.
    • Получи его ARN (Amazon Resource Name).
  2. Конфигурация Vault: В конфигурационном файле vault.hcl, добавь следующие строки для включения AWS KMS:
    1. После перезапуска Vault будет автоматически использовать KMS для хранения и расшифровки ключей, и тебе больше не нужно вручную вводить ключи для распечатывания.
    Пример для других KMS:
    • Azure и Google Cloud KMS также можно настроить аналогично с использованием своих соответствующих конфигураций.

2. Использование S3 или консул как хранилище для auto-unseal

Для автоматизации открытия можно настроить Vault для использования консульского кластера или S3 для хранения ключей. Но этот метод уже сложнее в плане конфигурации и поддержания, так как требует дополнительно настраивать хранилище ключей.

3. Скрипты для автоматического распечатывания (менее безопасный вариант)

Если использование KMS не является возможным, можно написать автоматизированный скрипт, который будет использовать команды для распечатывания Vault.

Пример bash-скрипта для автоматического распечатывания:

Предположим, у тебя есть несколько «unseal keys», которые нужно ввести для распечатывания Vault. Эти ключи можно хранить в защищенном файле (например, зашифрованном с помощью gpg), и использовать их в автоматическом процессе.

  1. Создай файл с ключами: Создай файл с ключами (например, unseal-keys.txt), где каждая строка — это один из ключей распечатывания.

     

  2. Пример скрипта для автоматического распечатывания:

     

  3. Настройка службы systemd: Если Vault запускается через systemd, можно создать systemd unit для автоматического выполнения скрипта после перезапуска сервера.Создай файл сервиса для автоматического распечатывания Vault, например /etc/systemd/system/vault-unseal.service:

    Затем активируй и включи этот сервис:

     

  4. Для того чтобы служба vault-unseal.service стартовала после старта или перезапуска службы vault.service нужно в Unit файле vault.service прописать директиву Requires=vault-unseal.service в секции [Unit] :

Для автоматизации открытия Vault лучший и самый безопасный способ — это использование KMS (например, AWS KMS) для автоматического распечатывания. Если это невозможно, можно использовать скрипты или другие менее безопасные способы, такие как ручная загрузка ключей из файла.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *