Миграция секретов из Vault в StarVault
В данном разделе описаны методы миграции секретов при переходе с HashiCorp Vault на StarVault.
1. Методы миграции
1.1. StarVault Shuttle
StarVault Shuttle — это утилита, упрощающая процесс миграции секретов между различными инстансами Vault. Миграцию можно выполнять как через командную строку (CLI), так и через веб-интерфейс. Утилита позволяет экспортировать секреты из исходного Vault и импортировать их в StarVault, обеспечивая целостность данных. Встроенные механизмы обработки ошибок и логирования повышают надежность миграции, а поддержка HTTPS гарантирует безопасную передачу данных.
1.1.1. Онлайн и офлайн миграция
StarVault Shuttle поддерживает как онлайн, так и офлайн миграцию данных:
-
Онлайн миграция происходит в реальном времени в рамках одного сетевого контура.
-
Оффлайн миграция предусматривает сериализацию и шифрование данных с помощью алгоритма AES-256. Отсутствие привязки к Storage Backend позволяет разворачивать различные конфигурации StarVault независимо от конфигурации исходного Vault.
1.1.2. Предварительные условия
-
Docker. Утилита поставляется в контейнеризированном виде, поэтому необходимо наличие установленного Docker.
-
Минимальная версия Vault: 1.4.7. Утилита поддерживает работу с Vault начиная с этой версии и выше. Убедитесь, что как исходный Vault, так и целевой StarVault соответствуют этой версии или новее.
-
Доступ к Vault. Контейнер с утилитой должен быть запущен в одном сетевом контуре с исходным Vault и целевым StarVault.
-
Сетевое окружение. Порты для доступа к Vault (по умолчанию 8200) должны быть открыты, и контейнер должен иметь возможность подключаться к инстансам Vault.
1.1.3. Использование
1.1.3.1. Запуск
Утилита доступна в виде образа контейнера (для получения аутентификационных данных обратитесь в службу поддержки StarVault). Чтобы загрузить последнюю версию утилиты, выполните следующую команду:
docker pull hub.nova-platform.io/starvault/starvault-shuttle:latest
Для запуска утилиты используйте следующую команду:
docker run -d --name starvault-shuttle -p 5000:5000 hub.nova-platform.io/starvault/starvault-shuttle:latest
1.1.3.2. Миграция через CLI
Чтобы начать взаимодействие через CLI, войдите внутрь запущенного контейнера:
docker exec -it starvault-shuttle /bin/sh
После входа используйте команду shuttle-cli, чтобы запустить процесс миграции в интерактивном режиме:
shuttle-cli
После запуска утилита предложит ввести необходимые данные для миграции:
-
Исходный Vault - URL, unseal keys и токен
-
Целевой Vault - URL, unseal keys и токен
-
Тип миграции - онлайн или офлайн. В случае офлайн-миграции утилита уточнит, проводите ли вы экспорт или импорт секретов.
-
Путь миграции - Утилита запросит, хотите ли вы перенести все секреты или только секреты с определенного пути. Вы можете ввести путь в формате secret/data/my-app или выбрать миграцию всех секретов.
Пример диалога при запуске shuttle-cli:
Welcome to Shuttle CLI.
Enter the source Vault URL: https://source-vault.example.com:8200
Enter the source Vault unseal keys: XXXXXXXXX,XXXXXXXXX,XXXXXXXXX
Enter the source Vault token: XXXXXXXXXXXX
Are you using online migration? (y/n): y
Enter the target Vault URL: https://source-vault.example.com:8200
Enter the target Vault unseal keys: XXXXXXXXX,XXXXXXXXX,XXXXXXXXX
Enter the target Vault token: XXXXXXXXXXXX
Establishing connection...
Source Vault connected successfully.
Destination Vault connected successfully.
Would you like to migrate all secrets? (y/n): n
Please specify the path to migrate (e.g., secret/data/path): secret/data/path
Migration in progress...
Migration completed successfully.
Total secrets migrated: 42.
Для выхода из контейнера используйте команду exit.
1.1.3.3. Миграция через веб-интерфейс
Для удобства пользователей утилита предоставляет веб-интерфейс, позволяющий выполнять миграцию секретов через веб-браузер.
После запуска контейнера веб-интерфейс будет доступен по адресу http://localhost:5000
Шаг 1: Подключение
При входе в веб-интерфейс вам будет предложено указать параметры подключения к исходному Vault и целевому StarVault:
-
Исходный Vault - URL, unseal keys и токен
-
Целевой StarVault - URL, unseal keys и токен
После указания параметров нажмите кнопку "Connect", утилита выполнит подключение к Vault и выведет список секретов, доступных для переноса.
Шаг 2: Выбор секретов
Далее необходимо выбрать секреты для миграции. Утилита выводит секреты в формате дерева в поле Secret Engines. При выборе родительского элемента в список на миграцию также будут включены все его дочерние элементы.
Если вы выбрали что-то лишнее, то по нажатию на элемент в поле Selected Secrets он будет исключен из списка.
Шаг 3: Запуск миграции
После выбора всех нужных секретов нажмите кнопку "Online Migration". StarVault Shuttle выполнит миграцию и сообщит о результатах в всплывающем окне.
|
В случае офлайн-миграции вам необходимо указать параметры подключения только для одного из инстансов Vault. Для экспорта секретов укажите параметры только для Source Vault, для импорта — параметры для Destination Vault. В первом случае при нажатии на кнопку "Connect" будет выведен список секретов для экспорта. При этом вы можете защитить экспортируемый файл паролем. |
1.1.4. Решение проблем
Если во время работы утилиты возникают ошибки или миграция секретов не происходит должным образом, воспользуйтесь следующими советами для устранения неполадок.
1.1.4.1. Проверка логов
Работа утилиты глубоко логируется, эти логи могут помочь в анализе причин сбоев. Логи сохраняются в контейнере по пути /shuttle/logs. Если вам требуется направить логи в службу поддержки для дальнейшего анализа, вы можете выгрузить файл логов следующим образом:
docker cp starvault-shuttle:/shuttle/logs /path/to/local/directory
Также можно просмотреть логи контейнера с помощью команды:
docker logs starvault-shuttle
1.1.4.2. Проблемы с подключением к Vault
Если контейнер не может подключиться к исходному Vault или целевому StarVault, убедитесь, что:
-
Указаны корректные значения для подключения.
-
Инстансы Vault доступны из контейнера (контейнер должен находиться в одном сетевом контуре с инстансами Vault).
-
Открыты необходимые порты (по умолчанию 8200) для взаимодействия с Vault.
Если все указано верно, попробуйте выполнить команду ping из контейнера:
docker exec -it starvault-shuttle ping source-vault.example.com
Если инстансы недоступны, проверьте настройки сети.
1.1.4.3. Ошибки аутентификации
Если миграция прерывается с ошибкой аутентификации:
-
Убедитесь, что указанные токены не истекли.
-
Проверьте, что токены имеют достаточные привилегии для чтения и записи секретов.
-
Попробуйте сгенерировать новые токены доступа через Vault и передать их утилите.
1.1.4.4. Проблемы с лицензией
Если утилита сообщает об ошибке, связанной с лицензией:
-
Убедитесь, что переменная
LICENSE_KEYпередана корректно и содержит действительный лицензионный ключ. -
Проверьте, не истек ли срок действия лицензии.
-
Если лицензия все еще действительна, обратитесь в поддержку для получения нового лицензионного ключа.
1.2. Миграция средствами Vault
1.2.2. Integrated Storage Backend (Raft)
1.2.2.1. Снапшоты
Сохраните снапшот исходного хранилища:
vault login
vault operator raft snapshot save data.snap
Восстановите снапшот на StarVault:
vault login
vault operator raft snapshot restore --force data.snap
Так как набор ключей у StarVault после инициализации другой, используйте флаг --force. После этого распечатывание хранилища и аутентификация будут происходить по unseal key и root token из исходного Vault.
Аналогичную операцию можно выполнить через веб-интерфейс: Monitoring → Raft Storage → Snapshots → Download/Restore. При восстановлении из снапшота необходимо отметить Force Restore.
1.2.3. External Storage Backend
Этот раздел обобщает остальные внешние хранилища, поскольку принцип для них одинаков - подключение новых нод StarVault к существующему хранилищу. Если необходимо использовать новое внешнее хранилище, миграцию данных необходимо осуществлять средствами самого хранилища. Рассмотрим перенос данных для Vault + PostgreSQL.
1.2.3.1. Подключение к существующей базе данных
В конфигурации StarVault определите хранилище, идентичное исходному Vault. После этого оба Vault будут взаимодействовать с одной базой данных.
storage "postgresql" {
connection_url = "postgres://user:pass@123.123.123.123:5432/vault"
}
1.2.3.2. Миграция средствами PostgreSQL
В качестве примера используются два инстанса Vault + PostgreSQL со следующими конфигурациями:
Исходный Vault
storage "postgresql" {
connection_url = "postgres://user:pass@172.20.1.10:5432/vault"
}
StarVault
storage "postgresql" {
connection_url = "postgres://user:pass@172.20.1.11:5432/vault"
}
Перенесите данные с помощью pg_dump. Сначала создайте резервную копию исходной базы данных:
su - postgres
pg_dump -Fc vault > /tmp/data.dump
Далее восстановите резервную копию на базе данных StarVault:
su - postgres
pg_restore --if-exists -d vault /tmp/data.dump