Установка StarVault
1. Базовая установка StarVault
В этом разделе рассматривается установка с хранилищем типа file. Данный вариант настоятельно не рекомендуется использовать в продуктивной среде, поскольку он не поддерживает высокую доступность. Для развертывания StarVault в продуктивной среде воспользуйтесь инструкциями в разделе Установка в режиме высокой доступности (HA). |
1.1. Установка в операционной системе
-
На сервер установлена поддерживаемая операционная система (RedOS, Astra Linux, AlmaLinux);
-
На сервер скопирован пакет с дистрибутивом StarVault.
-
Добавьте разрешающее правило на сетевом экране для TCP-порта 8200, например для firewalld:
firewall-cmd --add-port=8200/tcp --permanent firewall-cmd --reload
В примере используется порт 8200, но вы можете использовать любой другой порт. Конфигурационный файл после установки расположен по пути /etc/vault.d/vault.hcl.
-
Перейдите в каталог, в котором расположен пакет для установки.
-
Выполните установку:
-
Для rpm-based систем:
dnf install vault-1.0.0-1.x86_64.rpm
-
Для deb-based систем:
dpkg -i vault_1.0.0-1_amd64.deb
-
-
После установки пакета автоматически будет сгенерирован самоподписанный сертификат в директории /opt/vault/tls/. Если вы планируете использовать сертификат выданный вашим Центром сертификации, то произведите замену сертификата и перезапустите службу:
systemctl restart vault
-
Выполните инициализацию:
Инициализация - это процесс настройки StarVault. Она происходит только один раз, когда сервер запускается с новым бэкендом, который никогда ранее не использовался с StarVault. -
В браузере перейдите по адресу https://SERVER-IP:8200, где SERVER-IP - адрес сервера, на котором развертывается StarVault.
-
В поле Key shares введите количество долей ключа на которое будет разделён ключ распечатки
-
В поле Key threshold введите количество долей, которого будет достаточно для расшифровывания корневого ключа
-
Нажмите Initialize для инициализации StarVault.
-
-
После того, как инициализация будет выполнена, на экране будут выведены все части ключа и корневой токен. Сохраните эти данные и нажмите Continue to Unseal для перехода к распечатыванию хранилища.
Части ключа и начальный корневой токен крайне важны. Это единственный раз, когда все эти данные известны StarVault, а также единственный раз, когда они должны быть так близко друг к другу. Для быстрого сохранения вы можете загрузить токен и доли ключа в формате json, нажав Download keys. -
Поочередно введите доли ключа распечатки в поле Unseal Key Portion в необходимом количестве. После ввода каждой доли нажимайте Unseal
-
После ввода необходимого количества долей, хранилище будет распечатано, на что указывает статус:
-
На экране логина убедитесь, что выбран метод аутентификации Token и введите корневой токен, полученный после инициализации. Нажмите Sign In для входа.
-
При успешном входе вы увидите Secrets Engines.
1.2. Установка в среде выполнения контейнеров
-
Установлена среда выполнения контейнеров, например, docker или podman.
-
Установлен, в зависимости от среды исполнения, Docker Compose или Podman Compose.
Обычно для Docker compose-оболочка устанавливается вместе со средой выполнения.
Для podman в rh-based дистрибутивах выполните следующее:
-
Установите репозиторий epel:
dnf install -y epel-release
-
Установите podman-compose:
dnf install -y podman-compose
-
-
Добавьте разрешающее правило на сетевом экране для TCP-порта 8200, например для firewalld:
firewall-cmd --add-port=8200/tcp --permanent firewall-cmd --reload
В примере используется порт 8200, но вы можете использовать любой другой порт. Конфигурационный файл после установки расположен по пути /etc/vault.d/vault.hcl. -
Создайте каталог для хранения данных и конфигурации:
mkdir -p /opt/starvault/{data,tls}
-
Создайте самодписанный сертификат или пропустите текущий этап если будет использоваться сертификат выданный вашим Центром сертификации:
openssl req -nodes -x509 -sha256 -newkey rsa:4096 \ -keyout /opt/starvault/tls/starvault.key \ -out /opt/starvault/tls/starvault.crt \ -days 356 \ -subj "/C=RU/O=Orionsoft/CN=starvault" \ -extensions san \ -config <( \ echo '[req]'; \ echo 'distinguished_name=req'; \ echo '[san]'; \ echo 'subjectAltName=DNS:localhost,DNS:starvault,IP:127.0.0.1')
StarVault может быть запущен без использования SSL. Если вам не требуется шифрование, то пропустите текущий этап. -
Подготовьте конфигурационной файл /opt/starvault/config.hcl:
cat << EOF > /opt/starvault/config.hcl ui = true storage "file" { path = "/opt/starvault/data" } listener "tcp" { address = "0.0.0.0:8200" tls_cert_file = "/opt/starvault/tls/starvault.crt" tls_key_file = "/opt/starvault/tls/starvault.key" } EOF
Для запуска StarVault без SSL замените параметры в конфигурационной файле
tls_cert_file
иtls_key_file
наtls_disable = "true"
. -
Создайте Compose манифест:
cat << EOF > /opt/starvault/compose.yml services: starvault: image: hub.nova-platform.io/starvault/starvault:v1.0.0 volumes: - /opt/starvault/data:/opt/starvault/data - /opt/starvault/tls:/opt/starvault/tls - /opt/starvault/config.hcl:/opt/starvault/config.hcl ports: - 8200:8200 - 8201:8201 cap_add: - IPC_LOCK entrypoint: vault server -config /opt/starvault/config.hcl EOF
Для запуска с помощью podman в режиме rootless нужно явно задать права на доступ к прокинутым томам для пользователя, от имени которого будет запускаться контейнер (в примере ниже используется admin):
-
Смените владельца каталога для starvault:
chown admin:admin -R /opt/starvault
-
Добавьте параметры доступа к списку подключаемых томов в compose.yml:
- /opt/starvault/data:/opt/starvault/data:z - /opt/starvault/tls:/opt/starvault/tls:z - /opt/starvault/config.hcl:/opt/starvault/config.hcl:z
-
-
Поднимите контейнер:
-
Для docker:
docker compose --file /opt/starvault/compose.yml up
-
Для podman:
podman compose --file /opt/starvault/compose.yml up
-
-
Выполните инициализацию:
Инициализация - это процесс настройки StarVault. Она происходит только один раз, когда сервер запускается с новым бэкендом, который никогда ранее не использовался с StarVault. -
В браузере перейдите по адресу https://SERVER-IP:8200, где SERVER-IP - адрес сервера, на котором развертывается StarVault.
-
В поле Key shares введите количество долей ключа на которое будет разделён ключ распечатки
-
В поле Key threshold введите количество долей, которого будет достаточно для расшифровывания корневого ключа
-
Нажмите Initialize для инициализации StarVault.
-
-
После того, как инициализация будет выполнена, на экране будут выведены все части ключа и корневой токен. Сохраните эти данные и нажмите Continue to Unseal для перехода к распечатыванию хранилища.
Части ключа и начальный корневой токен крайне важны. Это единственный раз, когда все эти данные известны StarVault, а также единственный раз, когда они должны быть так близко друг к другу. Для быстрого сохранения вы можете загрузить токен и доли ключа в формате json, нажав Download keys. -
Поочередно введите доли ключа распечатки в поле Unseal Key Portion в необходимом количестве. После ввода каждой доли нажимайте Unseal
-
После ввода необходимого количества долей, хранилище будет распечатано, на что указывает статус:
-
На экране логина убедитесь, что выбран метод аутентификации Token и введите корневой токен, полученный после инициализации. Нажмите Sign In для входа.
-
При успешном входе вы увидите Secrets Engines.
2. Установка в режиме высокой доступности (HA)
StarVault поддерживает мультисерверный режим для обеспечения высокой доступности. Этот режим защищает от сбоев благодаря работе нескольких серверов StarVault. Режим высокой доступности включается автоматически при использовании хранилища данных, которое его поддерживает.
Вы можете определить, поддерживает ли хранилище данных режим высокой доступности ("HA"), запустив сервер и увидев, выводится ли рядом с информацией о хранилище данных сообщение "(HA available)". Если это так, то StarVault будет автоматически использовать режим HA. Эта информация также доступна на странице Конфигурация.
Чтобы достичь высокой доступности, один из узлов StarVault получает блокировку в системе хранения данных. Этот узел затем принимает роль активного узла, в то время как остальные узлы переходят в режим ожидания. Если резервные узлы получают запросы, они будут перенаправлять их или переадресовывать клиентов в соответствии с настройками и текущим состоянием кластера.
2.1. Использование бэкенда хранилища Raft
Развертывание StarVault в режиме высокой доступности с интегрированным хранилищем Raft требует не менее трёх серверов StarVault. В ином случае не набирается кворум и распечатывание хранилища невозможно. |
-
На сервер установлена поддерживаемая операционная система (RedOS, Astra Linux, AlmaLinux);
-
На сервер скопирован пакет с дистрибутивом StarVault.
-
Наличие сертификатов для каждого узла в кластере Raft, а также сертификата корневого центра сертификации.
2.1.1. Предварительная подготовка инфраструктуры
В данном сценарии будет описан процесс построения кластера Starvault, состоящий из следующих компонентов:
-
3 узлов Starvault: 1 активный, 2 резервных.
Данная архитектура не является рекомендованной для применения в продуктивной среде и предназначена для демонстрации и тестирования. Рекомендуемая архитектура описана в разделе Интегрированное хранилище Raft устройства Startvault. |
Данная инструкция предполагает взаимодействие между серверами с использованием FQDN. Для этого необходимо настроить DNS-сервер с соответствующими A-записями. В целях демонстрации далее будут использоваться следующие сопоставления FQDN и IP-адресов узлов:
ID узла | FQDN | IP-адрес |
---|---|---|
raft-node-1 |
raft-node-1.vlab.local |
10.252.11.10 |
raft-node-2 |
raft-node-2.vlab.local |
10.252.11.11 |
raft-node-3 |
raft-node-3.vlab.local |
10.252.11.12 |
2.1.2. Подготовка необходимых сертификатов
Для настройки TLS необходимо наличие набора сертификатов и ключей, расположенных в каталоге /opt/vault/tls:
-
Сертификат корневого центра сертификации, подписавшего сертификат StarVault TLS. В данном сценарии он будет иметь имя starvault-ca.pem.
-
Сертификаты узлов Raft. В данном сценарии в кластер будет добавлено три узла, для которых будут созданы следующие сертификаты:
-
node-1-cert.pem
-
node-2-cert.pem
-
node-3-cert.pem
-
-
Закрытые ключи сертификатов узлов:
-
node-1-key.pem
-
node-2-key.pem
-
node-3-key.pem
-
В этом сценарии создадим корневой сертификат, а также набор самоподписанных сертификатов для каждого узла.
Хотя самоподписанные сертификаты можно использовать для экспериментов с развертыванием и запуском StarVault, мы настоятельно рекомендуем заменить их сертификатами, созданными и подписанными соответствующим центром сертификации. |
-
На первом узле перейдите в каталог /opt/vault/tls/ (если каталог не существует - создайте его):
mkdir -p /opt/vault/tls cd /opt/vault/tls/
-
Сгенерируйте ключ для корневого сертификата:
openssl genrsa 2048 > starvault-ca-key.pem
-
Выпустите корневой сертификат:
openssl req -new -x509 -nodes -days 3650 -key starvault-ca-key.pem -out starvault-ca.pem Country Name (2 letter code) [XX]:RU State or Province Name (full name) []: Locality Name (eg, city) [Default City]:Moscow Organization Name (eg, company) [Default Company Ltd]:Orionsoft Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server hostname) []:vlab.local
Атрибуты сертификата указаны для примера. -
Создайте конфигурационные файлы, содержащие subjectAltName (SAN), для выпуска сертификатов узлов. Например, для узла raft-node-1 файл будет выглядеть следующим образом:
cat << EOF > node-1.cnf [v3_ca] subjectAltName = @alt_names [alt_names] DNS.1 = raft-node-1.vlab.local (1) IP.1 = 10.252.11.10 (2) IP.2 = 127.0.0.1 EOF
1 FQDN соответствующего узла 2 IP-адрес соответствующего узла SAN должен содержать корректный FQDN и IP-адрес соответствующего узла.
Конфигурационный файл должен быть создан для каждого узла, который планируется добавить в кластер.
-
Для каждого узла сформируйте файл запроса:
openssl req -newkey rsa:2048 -nodes -keyout node-1-key.pem -out node-1-csr.pem -subj "/CN=raft-node-1.vlab.local" openssl req -newkey rsa:2048 -nodes -keyout node-2-key.pem -out node-2-csr.pem -subj "/CN=raft-node-2.vlab.local" openssl req -newkey rsa:2048 -nodes -keyout node-3-key.pem -out node-3-csr.pem -subj "/CN=raft-node-3.vlab.local"
-
Выпустите сертификаты на основании запросов:
openssl x509 -req -set_serial 01 -days 3650 -in node-1-csr.pem -out node-1-cert.pem -CA starvault-ca.pem -CAkey starvault-ca-key.pem -extensions v3_ca -extfile ./node-1.cnf openssl x509 -req -set_serial 01 -days 3650 -in node-2-csr.pem -out node-2-cert.pem -CA starvault-ca.pem -CAkey starvault-ca-key.pem -extensions v3_ca -extfile ./node-2.cnf openssl x509 -req -set_serial 01 -days 3650 -in node-3-csr.pem -out node-3-cert.pem -CA starvault-ca.pem -CAkey starvault-ca-key.pem -extensions v3_ca -extfile ./node-3.cnf
-
После выпуска сертификатов можно поступить двумя способами, в зависимости от того, каким образом планируется присоединять узлы к кластеру:
-
Для автоматического подключения узлов скопируйте на каждый узел:
-
Файл сертификата этого узла.
-
Файл ключа этого узла.
-
Файл корневого сертификата.
Например:
scp ./node-2-key.pem ./node-2-cert.pem ./starvault-ca.pem raft-node-2.vlab.local:/opt/vault/tls scp ./node-3-key.pem ./node-3-cert.pem ./starvault-ca.pem raft-node-3.vlab.local:/opt/vault/tls
Если каталог /opt/vault/tls на целевых узлах отсутствует - создайте его.
-
-
Для ручного подключения узлов скопируйте сертификаты и ключи узлов, а также корневой сертификат на устройство, с которого будете подключаться к WEB-UI StarVault для добавления узлов.
-
2.1.3. Развертывание кластера с Raft
Способ 1. С автоматическим добавлением узлов в кластер
-
Подключитесь к первому серверу, на котором будет выполняться инициализация кластера StarVault.
-
Добавьте разрешающие правила на сетевом экране для TCP-портов 8200 и 8201, например для firewalld:
firewall-cmd --add-port=8200/tcp --permanent firewall-cmd --add-port=8201/tcp --permanent firewall-cmd --reload
В примере используются порты 8200 и 8201, но вы можете использовать любые другие порты, указав их в конфигурационном файле /etc/vault.d/vault.hcl
-
Создайте файл /etc/vault.d/vault.hcl для настройки использования raft (если каталог /etc/vault.d/ не существует, создайте его) со следующей содержимым:
Замените значения соответствующих параметров на свои.
ui = true cluster_addr = "https://10.252.11.10:8201" (1) api_addr = "https://10.252.11.10:8200" (2) disable_mlock = true (3) listener "tcp" { address = "0.0.0.0:8200" tls_ca_cert_file = "/opt/vault/tls/starvault-ca.pem" (4) tls_cert_file = "/opt/vault/tls/node-1-cert.pem" (5) tls_key_file = "/opt/vault/tls/node-1-key.pem" (6) } storage "raft" { (7) path = "/opt/vault/data" (8) node_id = "raft-node-1" (9) retry_join { leader_tls_servername = "raft-node-1.vlab.local" (10) leader_api_addr = "https://10.252.11.10:8200" (11) leader_ca_cert_file = "/opt/vault/tls/starvault-ca.pem" leader_client_cert_file = "/opt/vault/tls/node-1-cert.pem" leader_client_key_file = "/opt/vault/tls/node-1-key.pem" } retry_join { leader_tls_servername = "raft-node-2.vlab.local" (10) leader_api_addr = "https://10.252.11.11:8200" (11) leader_ca_cert_file = "/opt/vault/tls/starvault-ca.pem" leader_client_cert_file = "/opt/vault/tls/node-1-cert.pem" leader_client_key_file = "/opt/vault/tls/node-1-key.pem" } retry_join { leader_tls_servername = "raft-node-3.vlab.local" (10) leader_api_addr = "https://10.252.11.12:8200" (11) leader_ca_cert_file = "/opt/vault/tls/starvault-ca.pem" leader_client_cert_file = "/opt/vault/tls/node-1-cert.pem" leader_client_key_file = "/opt/vault/tls/node-1-key.pem" } }
1 Указывает адрес и порт, который необходимо анонсировать другим узлам в кластере для пересылки запросов. Является обязательным параметром для интегрированного хранилища. 2 Указывает адрес и порт, который необходимо анонсировать другим узлам в кластере для перенаправления клиентов. 3 Запрещает серверу выполнять системный вызов mlock
.mlock
предотвращает переключение памяти на диск. Настоятельно рекомендуется отключатьmlock
при использовании интегрированного хранилища.4 Корневой сертификат 5 Сертификат первого узла 6 Ключ первого узла 7 Указывает использовать в качестве бэкенда хранилища Raft. 8 Указывает путь к каталогу, где будут храниться данные 9 Определяет уникальное имя данного узла 10 Имя сервера, которое должно совпадать с тем, что прописано в сертификате данного сервера. 11 IP-адрес соответствующего сервера Обратите внимание, что в блоках
retry_join
в качестве ключа и сертификата клиента необходимо указывать файлы текущего узла (т.е. node-1-cert.pem и node-1-key.pem) -
Перейдите в каталог, в котором расположен пакет для установки.
-
Выполните установку StarVault на первом узле:
-
Для rpm-based систем:
dnf install vault-1.0.0-1.x86_64.rpm
-
Для deb-based систем:
dpkg -i vault_1.0.0-1_amd64.deb
-
-
Убедитесь, что сервис vault активен:
systemctl status vault ● vault.service - "Starvault - A tool for managing secrets" Loaded: loaded (/usr/lib/systemd/system/vault.service; enabled; preset: disabled) Active: active (running) since Tue 2024-05-07 08:57:59 EDT; 14min ago
Если сервис vault не запущен из-за ошибки, узнайте причину с помощью следующей команды:
journalctl -xeu vault.service
-
При наличии ошибки:
Error initializing storage of type raft: failed to create fsm: failed to open bolt file: open /opt/vault/data/vault.db: no such file or directory
Вручную создайте каталог /opt/vault/data и выдайте корректные права на /opt/vault
mkdir /opt/vault/data chown vault:vault /opt/vault -R
Запустите сервис:
systemctl start vault
-
При наличии ошибки:
Error initializing storage of type raft: failed to create fsm: failed to open bolt file: open /opt/vault/data/vault.db: permission denied
Выдайте корректные права на /opt/vault
chown vault:vault /opt/vault -R
Запустите сервис:
systemctl start vault
-
-
Повторите описанные шаги для остальных серверов.
В файле /etc/vault.d/vault.hcl необходимо ввести корректные для соответствующего сервера значения параметров. Например, для raft-node-2 в этой инструкции файл будет иметь следующее содержимое:
ui = true cluster_addr = "https://10.252.11.11:8201" (1) api_addr = "https://10.252.11.11:8200" (1) disable_mlock = true listener "tcp" { address = "0.0.0.0:8200" tls_ca_cert_file = "/opt/vault/tls/starvault-ca.pem" tls_cert_file = "/opt/vault/tls/node-2-cert.pem" (1) tls_key_file = "/opt/vault/tls/node-2-key.pem" (1) } storage "raft" { path = "/opt/vault/data" node_id = "raft-node-2" (1) retry_join { leader_tls_servername = "raft-node-1.vlab.local" leader_api_addr = "https://10.252.11.10:8200" leader_ca_cert_file = "/opt/vault/tls/starvault-ca.pem" leader_client_cert_file = "/opt/vault/tls/node-2-cert.pem" (1) leader_client_key_file = "/opt/vault/tls/node-2-key.pem" (1) } retry_join { leader_tls_servername = "raft-node-2.vlab.local" leader_api_addr = "https://10.252.11.11:8200" leader_ca_cert_file = "/opt/vault/tls/starvault-ca.pem" leader_client_cert_file = "/opt/vault/tls/node-2-cert.pem" (1) leader_client_key_file = "/opt/vault/tls/node-2-key.pem" (1) } retry_join { leader_tls_servername = "raft-node-3.vlab.local" leader_api_addr = "https://10.252.11.12:8200" leader_ca_cert_file = "/opt/vault/tls/starvault-ca.pem" leader_client_cert_file = "/opt/vault/tls/node-2-cert.pem" (1) leader_client_key_file = "/opt/vault/tls/node-2-key.pem" (1) } }
1 Значения изменены на актуальные для raft-node-2. -
Выполните инициализацию:
Инициализация - это процесс настройки StarVault. Она происходит только один раз, когда сервер запускается с новым бэкендом, который никогда ранее не использовался с StarVault.
-
В браузере перейдите по адресу любого из серверов на порт 8200. Например, https://raft-node-1.vlab.local:8200.
-
Выберите Create a new Raft cluster и нажмите Next.
-
В поле Key shares введите количество долей ключа на которое будет разделён ключ распечатки
-
В поле Key threshold введите количество долей, которого будет достаточно для расшифровывания корневого ключа
-
Нажмите Initialize для инициализации StarVault.
-
-
После того, как инициализация будет выполнена, на экране будут выведены все части ключа и корневой токен. Сохраните эти данные и нажмите Continue to Unseal для перехода к распечатыванию хранилища.
Части ключа и начальный корневой токен крайне важны. Это единственный раз, когда все эти данные известны StarVault, а также единственный раз, когда они должны быть так близко друг к другу. Для быстрого сохранения вы можете загрузить токен и доли ключа в формате json, нажав Download keys. -
Поочередно введите доли ключа распечатки в поле Unseal Key Portion в необходимом количестве. После ввода каждой доли нажимайте Unseal
-
После ввода необходимого количества долей, хранилище будет распечатано, на что указывает статус:
-
На экране логина убедитесь, что выбран метод аутентификации Token и введите корневой токен, полученный после инициализации. Нажмите Sign In для входа.
-
При успешном входе вы увидите Secrets Engines.
На данном этапе инициализирован и распечатан кластер Raft, но он не является высокодоступным. Для обеспечения высокой доступности StarVault необходимо подключить к кластеру оставшиеся узлы. Для этого:
-
В браузере перейдите по адресу сервера, который необходимо подключить в кластер, на порт 8200. Например, https://raft-node-2.vlab.local:8200.
-
Введите необходимое количество долей ключа распечатки
-
На экране логина убедитесь, что выбран метод аутентификации Token и введите корневой токен, полученный после инициализации. Нажмите Sign In для входа.
По окончании добавления серверов, в веб-интерфейсе проверьте список узлов в кластере:
-
Перейдите в
. -
Убедитесь, что в списке присутствуют все необходимые узлы.
Также убедитесь в корректном статусе режима HA:
-
Подключитесь к любому узлу по SSH.
-
Отключите проверку сертификата:
export VAULT_SKIP_VERIFY="true"
Отмены проверки сертификата можно избежать, добавив корневой сертификат в список доверенных.
-
Проверьте статус:
vault status Key Value --- ----- Seal Type shamir Initialized true Sealed false Total Shares 6 Threshold 4 Version 1.14.8 Build Date 2024-03-26T14:34:36Z Storage Type raft (1) Cluster Name vault-cluster-a3fcc270 Cluster ID f682968d-5e6c-9ad4-8303-5aecb259ca0b HA Enabled true (2) HA Cluster https://10.252.11.10:8201 HA Mode active (3) Active Node Address https://10.252.11.10:8200 Raft Committed Index 40 Raft Applied Index 40
1 Используемый тип бэкенда хранилища (в примере Raft) 2 Статус режима HA. True, значит режим включен. 3 Статус текущего узла в HA-кластере. Active
указывает на то, что данный узел является лидером,Standby
- узел является резервным.
Способ 2. С ручным добавлением узлов в кластер
-
Подключитесь к первому серверу, на котором будет выполняться инициализация кластера StarVault.
-
Добавьте разрешающие правила на сетевом экране для TCP-портов 8200 и 8201, например для firewalld:
firewall-cmd --add-port=8200/tcp --permanent firewall-cmd --add-port=8201/tcp --permanent firewall-cmd --reload
В примере используются порты 8200 и 8201, но вы можете использовать любые другие порты, указав их в конфигурационном файле /etc/vault.d/vault.hcl
-
Создайте файл /etc/vault.d/vault.hcl для настройки использования raft (если каталог /etc/vault.d/ не существует, создайте его) со следующей содержимым:
Замените значения соответствующих параметров на свои.
ui = true cluster_addr = "https://10.252.11.10:8201" (1) api_addr = "https://10.252.11.10:8200" (2) disable_mlock = true (3) listener "tcp" { address = "0.0.0.0:8200" tls_ca_cert_file = "/opt/vault/tls/starvault-ca.pem" (4) tls_cert_file = "/opt/vault/tls/node-1-cert.pem" (5) tls_key_file = "/opt/vault/tls/node-1-key.pem" (6) } storage "raft" { (7) path = "/opt/vault/data" (8) node_id = "raft-node-1" (9) }
1 Указывает адрес и порт, который необходимо анонсировать другим узлам в кластере для пересылки запросов. Является обязательным параметром для интегрированного хранилища. 2 Указывает адрес и порт, который необходимо анонсировать другим узлам в кластере для перенаправления клиентов. 3 Запрещает серверу выполнять системный вызов mlock
.mlock
предотвращает переключение памяти на диск. Настоятельно рекомендуется отключатьmlock
при использовании интегрированного хранилища.4 Корневой сертификат. 5 Сертификат первого узла. 6 Ключ первого узла. 7 Указывает использовать в качестве бэкенда хранилища Raft. 8 Указывает путь к каталогу, где будут храниться данные. 9 Определяет уникальное имя данного узла. -
Перейдите в каталог, в котором расположен пакет для установки.
-
Выполните установку StarVault на первом узле:
-
Для rpm-based систем:
dnf install vault-1.0.0-1.x86_64.rpm
-
Для deb-based систем:
dpkg -i vault_1.0.0-1_amd64.deb
-
-
Убедитесь, что сервис vault активен:
systemctl status vault ● vault.service - "Starvault - A tool for managing secrets" Loaded: loaded (/usr/lib/systemd/system/vault.service; enabled; preset: disabled) Active: active (running) since Tue 2024-05-07 08:57:59 EDT; 14min ago
Если сервис vault не запущен из-за ошибки, узнайте причину с помощью следующей команды:
journalctl -xeu vault.service
-
При наличии ошибки:
Error initializing storage of type raft: failed to create fsm: failed to open bolt file: open /opt/vault/data/vault.db: no such file or directory
Вручную создайте каталог /opt/vault/data и выдайте корректные права на /opt/vault
mkdir /opt/vault/data chown vault:vault /opt/vault -R
Запустите сервис:
systemctl start vault
-
При наличии ошибки:
Error initializing storage of type raft: failed to create fsm: failed to open bolt file: open /opt/vault/data/vault.db: permission denied
Выдайте корректные права на /opt/vault
chown vault:vault /opt/vault -R
Запустите сервис:
systemctl start vault
-
-
Повторите описанные шаги для остальных серверов.
В файле /etc/vault.d/vault.hcl необходимо ввести корректные для соответствующего сервера значения параметров. Например, для raft-node-2 в этой инструкции файл будет иметь следующее содержимое:
ui = true cluster_addr = "https://10.252.11.11:8201" (1) api_addr = "https://10.252.11.11:8200" (1) disable_mlock = true listener "tcp" { address = "0.0.0.0:8200" tls_ca_cert_file = "/opt/vault/tls/starvault-ca.pem" tls_cert_file = "/opt/vault/tls/node-2-cert.pem" (1) tls_key_file = "/opt/vault/tls/node-2-key.pem" (1) } storage "raft" { path = "/opt/vault/data" node_id = "raft-node-2" (1) }
1 Значения изменены на актуальные для raft-node-2. -
Выполните инициализацию:
Инициализация - это процесс настройки StarVault. Она происходит только один раз, когда сервер запускается с новым бэкендом, который никогда ранее не использовался с StarVault.
-
В браузере перейдите по адресу первого сервера на порт 8200. Например, https://raft-node-1.vlab.local:8200.
-
Выберите Create a new Raft cluster и нажмите Next.
-
В поле Key shares введите количество долей ключа на которое будет разделён ключ распечатки
-
В поле Key threshold введите количество долей, которого будет достаточно для расшифровывания корневого ключа
-
Нажмите Initialize для инициализации StarVault.
-
-
После того, как инициализация будет выполнена, на экране будут выведены все части ключа и корневой токен. Сохраните эти данные и нажмите Continue to Unseal для перехода к распечатыванию хранилища.
Части ключа и начальный корневой токен крайне важны. Это единственный раз, когда все эти данные известны StarVault, а также единственный раз, когда они должны быть так близко друг к другу. Для быстрого сохранения вы можете загрузить токен и доли ключа в формате json, нажав Download keys. -
Поочередно введите доли ключа распечатки в поле Unseal Key Portion в необходимом количестве. После ввода каждой доли нажимайте Unseal
-
После ввода необходимого количества долей, хранилище будет распечатано, на что указывает статус:
-
На экране логина убедитесь, что выбран метод аутентификации Token и введите корневой токен, полученный после инициализации. Нажмите Sign In для входа.
-
При успешном входе вы увидите Secrets Engines.
-
Присоедините остальные узлы к кластеру:
-
В браузере перейдите по адресу сервера, который необходимо подключить в кластер, на порт 8200. Например, https://raft-node-2.vlab.local:8200.
-
Выберите Join an exiting Raft cluster и нажмите Next.
-
Введите ip-адрес или FQDN для подключению к лидеру (это первый узел, на котором выполнялась инициализация кластера), загрузите корневой сертификат, а также сертификат и ключ лидера (первого узла).
-
Нажмите Join
-
Введите необходимое количество долей ключа распечатки
-
На экране логина убедитесь, что выбран метод аутентификации Token и введите корневой токен, полученный после инициализации. Нажмите Sign In для входа.
-
По окончании добавления серверов, в веб-интерфейсе проверьте список узлов в кластере:
-
Перейдите в
. -
Убедитесь, что в списке присутствуют все необходимые узлы.
Также убедитесь в корректном статусе режима HA:
-
Подключитесь к любому узлу по SSH.
-
Отключите проверку сертификата:
export VAULT_SKIP_VERIFY="true"
Отмены проверки сертификата можно избежать, добавив корневой сертификат в список доверенных.
-
Проверьте статус:
vault status Key Value --- ----- Seal Type shamir Initialized true Sealed false Total Shares 6 Threshold 4 Version 1.14.8 Build Date 2024-03-26T14:34:36Z Storage Type raft (1) Cluster Name vault-cluster-a3fcc270 Cluster ID f682968d-5e6c-9ad4-8303-5aecb259ca0b HA Enabled true (2) HA Cluster https://10.252.11.10:8201 HA Mode active (3) Active Node Address https://10.252.11.10:8200 Raft Committed Index 40 Raft Applied Index 40
1 Используемый тип бэкенда хранилища (в примере Raft) 2 Статус режима HA. True, значит режим включен. 3 Статус текущего узла в HA-кластере. Active
указывает на то, что данный узел является лидером,Standby
- узел является резервным.