Ограничение доступа к API и хранилищам во время ликвидации последствий инцидента
При работе с любым программным обеспечением могут возникнуть чрезвычайные ситуации или непредвиденные действия, и StarVault не является исключением.
В статье показано, как использовать критически важные функции StarVault с вашими процессами и процедурами для быстрого реагирования на инциденты.
1. Задача
Операторам и специалистам по реагированию требуются функции и возможности, которые эффективно поддерживают резервные механизмы восстановления доступа, используемые при реагировании на инциденты.
При возникновении таких инцидентов, как утечка учетных данных, вторжение или атаки типа "отказ в обслуживании" (DOS), своевременное устранение последствий имеет огромное значение для поддержки операционных целей бизнеса.
2. Решение
Узнайте и используйте эти две важные функции StarVault, которые призваны помочь операторам эффективно реагировать на инциденты.
-
Печать: При обычной работе StarVault работает в незапечатанном состоянии. Однако оператор с достаточными привилегиями может в любой момент запечатать работающий StarVault. При опечатывании сервер StarVault выбрасывает из памяти ключ для разблокировки данных и поэтому физически не может отвечать на все запросы, за исключением проверок состояния и снятия печати.
3. Предварительные условия
Для выполнения всех шагов, описанных в этом практическом сценарии, вам потребуется:
-
StarVault двоичный файл, установленный в вашем системном пути.
-
jq используется для вывода JSON в красивом формате.
3.1. Требования к политике
|
В рамках данного руководства для работы с StarVault можно использовать |
Для выполнения всех задач, продемонстрированных в этом руководстве, ваша политика должна включать следующие разрешения:
Если вы подключаетесь к серверу StarVault, не находящемуся в режиме разработки, ваш токен должен иметь политику со следующими разрешениями:
# Seal StarVault
path "sys/seal" {
capabilities = [ "create", "update", "sudo" ]
}
# Unseal StarVault
path "sys/unseal" {
capabilities = [ "create", "update", "sudo" ]
}
Если вы не знакомы с политиками, пройдите учебное пособие по политикам.
4. Роли
В сквозном сценарии, описанном в этом руководстве, участвуют две персоны:
-
operatorс привилегированными возможностями для запечатывания и разпечатывания StarVault, а также блокировки и разблокировки конечных точек API. -
driverиспользует метод аутентификации по имени пользователя и паролю, включенный в пространство имен драйверов, для аутентификации в StarVault.
5. Введение в сценарий
Как показано слева, когда StarVault запечатывается, это затрагивает всех пользователей, и они не могут его использовать.
Вы будете использовать терминальные сессии для работы с одним сервером StarVault с Integrated Storage (Raft) и пройдете ряд практических сценариев, чтобы узнать, как запечатывать и снимать печать с StarVault с помощью StarVault CLI, HTTP API или веб-интерфейса.
По окончании обучения вы также можете очистить среду сценария с помощью предоставленных примеров команд.
5.1. Создание сценарной среды
Создайте временный каталог для хранения файлов, созданных для этого сценария, и присвойте путь к нему переменной окружения LEARN_VAULT.
$ mkdir -p /tmp/learn-starvault/data && export LEARN_STARVAULT=/tmp/learn-starvault
5.2. Создание конфигурации сервера StarVault
Создайте минимальную конфигурацию для одного сервера StarVault, использующего хранилище Raft.
$ cat > $LEARN_STARVAULT/starvault-server.hcl << EOF
api_addr = "http://127.0.0.1:8200"
cluster_addr = "http://127.0.0.1:8201"
cluster_name = "learn-starvault"
default_lease_ttl = "10h"
disable_mlock = true
max_lease_ttl = "10h"
ui = true
listener "tcp" {
address = "127.0.0.1:8200"
tls_disable = "true"
}
backend "raft" {
path = "/tmp/learn-starvault/data"
node_id = "learn-starvault-1"
}
EOF
5.3. Запустите один сервер StarVault
Откройте сеанс терминала и запустите сервер StarVault, используя конфигурацию, которую вы только что создали.
$ starvault server -config $LEARN_STARVAULT/starvault-server.hcl
Сервер запускается неинициализированным и запечатанным.
5.4. Инициализация, снятие печати и аутентификация
В другом терминальном сеансе экспортируйте переменную среды STARVAULT_ADDR для адресации сервера StarVault и экспортируйте переменную среды LEARN_VAULT для определения каталога сценария.
$ export STARVAULT_ADDR=http://127.0.0.1:8200 LEARN_STARVAULT=/tmp/learn-starvault
Для простоты в этом руководстве инициализируйте StarVault с 1 ключевым ресурсом и ключевым порогом 1 и запишите результаты в файл .starvault-init в каталоге проекта.
$ starvault operator init \
-key-shares=1 \
-key-threshold=1 \
| head -n3 \
| cat > $LEARN_STARVAULT/.starvault-init
В выводе ничего не будет при успешном выполнении команды.
Экспортируйте значение ключа разблокировки в переменную окружения UNSEAL_KEY.
$ export UNSEAL_KEY=$(grep 'Unseal Key 1' $LEARN_STARVAULT/.starvault-init | awk '{print $NF}')
Снимите печать с StarVault, используя значение Unseal Key 1 из файла .starvault-init.
$ starvault operator unseal $UNSEAL_KEY
Успешный выход из распечатывания StarVault должен напоминать этот пример:
| Key | Value |
|---|---|
--- |
---- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Экспортируйте начальное значение root токена в переменную окружения ROOT_TOKEN.
$ export ROOT_TOKEN=$(grep 'Initial Root Token' $LEARN_STARVAULT/.starvault-init | awk '{print $NF}')
войдите в систему с помощью starvault login, передав значение Initial Root Token из файла .starvault-init.
$ starvault login -no-print $ROOT_TOKEN
Эта команда не должна выводить никаких результатов в случае успеха. Если вы хотите подтвердить, что вход был успешным, попробуйте выполнить поиск токена и убедитесь, что ваши политики токенов содержат root.
|
Для простоты в этом сценарии вы будете использовать |
$ starvault token lookup | grep policies
Успешный вывод должен содержать следующее.
policies |
[root] |
|---|---|
Вы готовы к первому сценарию.
5.5. Запечатывание StarVault
StarVault, работающий в незапечатанном состоянии, использует главный ключ шифрования. Он нужен для расшифровки ключа шифрования, хранящегося в хранилище StarVault, который сам используется для шифрования и расшифровки секретов в хранилище. В этом примере StarVault запечатывается с помощью CLI из терминальной сессии; главный ключ шифрования удаляется из памяти, и дальнейшее шифрование или расшифровка из хранилища невозможны до тех пор, пока StarVault снова не будет запечатан.
Если произошел такой инцидент, как вторжение или утечка учетных данных, запечатывание StarVault в ответ - это самый тяжелый инструмент, который вы можете использовать. Ключ, использовавшийся для расшифровки данных, будет немедленно удален из памяти, и StarVault больше не сможет расшифровать ничего в своем хранилище, пока снова не будет снята печать.
|
Запечатанный StarVault фактически больше не доступен для стандартного использования. Об этом следует помнить, особенно при использовании корпоративной репликации, поскольку запечатанный кластер больше не будет участвовать в репликации. Запечатанный первичный кластер не позволит всем вторичным кластерам реплицироваться с ним, а запечатанный вторичный кластер будет рассинхронизирован с первичным. |
Оператор, использующий токен с достаточными возможностями, как описано в разделе Требования к политике, может запечатать StarVault с помощью CLI starvault, HTTP API /sys/seal или с помощью веб-интерфейса.
5.5.1. CLI команда
(Пользователь: operator)
Запечатайте ваш StarVault сервер.
$ starvault operator seal
Success! StarVault is sealed.
Вы можете проверить статус StarVault для подтверждения.
$ starvault status
Key |
Value |
|---|---|
--- |
---- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Вывод должен показать, что значение Sealed равно true.
Вы также можете перейти на терминал, с которого был запущен сервер StarVault, чтобы посмотреть на оперативное логирование. Конец лога должен быть похож на этот пример.
2025-05-20T04:21:00.396-0400 [INFO] core.cluster-listener: rpc listeners successfully shut down
2025-05-20T04:21:00.396-0400 [INFO] core: cluster listeners successfully shut down
2025-05-20T04:21:00.396-0400 [INFO] core: starvault is sealed
Обратите внимание на последнюю строку, в которой конкретно указано ядро: starvault is sealed; это сигнал из лога для вас как оператора, что StarVault теперь запечатан.
Если вы попытаетесь войти в StarVault сейчас, вы обнаружите ошибку, подобную той, что показана в этом примере:
$ starvault login -no-print $ROOT_TOKEN
Error authenticating: error looking up token: Error making API request.
URL: GET http://127.0.0.1:8200/v1/auth/token/lookup-self
Code: 503. Errors:
* StarVault is sealed
5.5.2. Вызов API с использование cURL
(Пользователь: operator)
Запечатайте ваш StarVault сервер.
$ curl \
--header "X-Vault-Token: $ROOT_TOKEN" \
--request PUT \
$STARVAULT_ADDR/v1/sys/seal
Вы можете проверить статус StarVault для подтверждения.
$ curl --silent $STARVAULT_ADDR/v1/sys/seal-status | jq
Вы также можете перейти на терминал, с которого был запущен сервер StarVault, чтобы посмотреть на оперативный лог. Конец лога должен быть похож на этот пример.
2025-05-20T04:23:31.966-0400 [INFO] core.cluster-listener: rpc listeners successfully shut down
2025-05-20T04:23:31.966-0400 [INFO] core: cluster listeners successfully shut down
2025-05-20T04:23:31.967-0400 [INFO] core: starvault is sealed
Обратите внимание на последнюю строку, в которой конкретно указано ядро: starvault is sealed; это сигнал из лога для вас как оператора, что StarVault теперь запечатан.
5.5.3. Веб-интерфейс
(Пользователь: operator)
Откройте браузер и перейдите в пользовательский интерфейс StarVault по адресу http://127.0.0.1:8200.
Войдите в систему со значением токена root и запечатайте свой сервер StarVault.
-
Нажмите Status и выберите Unsealed в меню.
-
Кликните на Seal
-
Подтвердите намерение запечатать StarVault, нажав кнопку Seal в диалоговом окне подтверждения.
Хранилище запечатано. Status - индикатор состояния, который раньше был зеленым, теперь стал красным.
Вы можете снова разблокировать StarVault, указав ключ разблокировки в текстовом поле Unseal Key Portion и нажав Unseal.
Вы можете перейти на терминал, с которого был запущен сервер StarVault, чтобы посмотреть оперативный лог. Конец лога должен быть похож на этот пример.
2025-05-20T05:30:45.121-0400 [INFO] core.cluster-listener: rpc listeners successfully shut down
2025-05-20T05:30:45.121-0400 [INFO] core: cluster listeners successfully shut down
2025-05-20T05:30:45.121-0400 [INFO] core: starvault is sealed
Обратите внимание на последнюю строку, где конкретно указано ядро: хранилище запечатано; это сигнал из лога для вас, как оператора, что хранилище теперь запечатано.
Если StarVault запечатан, оператор должен разблокировать его, чтобы восстановить нормальную работу.
|
В примерах этого руководства используется печать на основе Shamir’s Secret Sharing с ключом для снятия печати, но в обычных производственных установках используется автоматическая печать на основе облака. Помните, что если сервер StarVault, использующий автоматическую разблокировку, запечатан, он автоматически разблокируется при перезапуске. Будьте осторожны при перезапуске таких серверов. |
Используйте значение разблокирующего ключа, записанное ранее, чтобы снять печать с StarVault в рамках подготовки к следующему сценарию.
5.5.4. CLI команда
(Пользователь: operator)
Разблокируйте StarVault.
$ starvault operator unseal $UNSEAL_KEY
Перейдите в терминал, с которого вы запустили сервер StarVault, и посмотрите на вывод лога. Конец лога должен быть похож на этот пример.
2025-05-20T05:32:25.008-0400 [INFO] core: vault is unsealed
2025-05-20T05:32:25.039-0400 [INFO] core: post-unseal setup starting
2025-05-20T05:32:25.048-0400 [INFO] core: post-unseal setup complete
Обратите внимание на ядро линии: core: vault is unsealed.
Теперь хранилище не запечатано и готово к нормальной работе.
5.5.5. Вызов API с помощью cURL
(Пользователь: operator)
Разблокируйте StarVault.
$ curl \
--data "{\"key\": \"$UNSEAL_KEY\"}" \
--header "X-Vault-Token: root" \
--request PUT \
--silent \
$STARVAULT_ADDR/v1/sys/unseal \
| jq
Вывод команды должен быть похож на этот пример.
{
"type": "shamir",
"initialized": true,
"sealed": false,
"t": 1,
"n": 1,
"progress": 0,
"nonce": "",
"version": "1.1.0",
"build_date": "2025-03-14T20:50:17Z",
"migration": false,
"cluster_name": "learn-starvault",
"cluster_id": "fb4c6314-f2df-2cbc-aa21-9e794f44003a",
"recovery_seal": false,
"storage_type": "raft"
}
Обратите внимание, что значение sealed равно false.
Перейдите на терминал, с которого вы запустили сервер StarVault, и посмотрите на лог. Конец лога должен быть похож на этот пример.
2025-05-20T05:39:35.379-0400 [INFO] core: vault is unsealed
2025-05-20T05:39:35.412-0400 [INFO] core: post-unseal setup starting
2025-05-20T05:39:35.420-0400 [INFO] core: post-unseal setup complete
Обратите внимание на ядро линии: core: vault is unsealed.
Теперь хранилище не запечатано и готово к нормальной работе.
5.5.6. Веб-интерфейс
(Пользователь: operator)
Снимите блокировку с StarVault
-
В окне Unseal введите значение ключа разблокировки в текстовое поле Unseal Key Portion.
-
Нажмите Unseal
-
С StarVault снимается блокировка и он предлагает войти в систему
Вы можете перейти на терминал, с которого был запущен сервер StarVault, и посмотреть на оперативный лог.
Конец логирования должен быть похож на этот пример.
2025-05-20T05:43:49.698-0400 [INFO] core: vault is unsealed
2025-05-20T05:43:49.726-0400 [INFO] core: post-unseal setup starting
2025-05-20T05:43:49.733-0400 [INFO] core: post-unseal setup complete
Обратите внимание на ядро линии: core: vault is unsealed.
Теперь хранилище не запечатано и готово к нормальной работе.
6. Очистка
Если вы хотите очистить свое окружение после завершения обучения, выполните действия, описанные в этом разделе.
Снимите настройки переменных окружения.
$ unset ROOT_TOKEN UNSEAL_KEY STARVAULT_ADDR LEARN_STARVAULT
Вы можете остановить сервер StarVault, нажав Ctrl+C, когда сервер запущен. Или выполните следующую команду.
$ pgrep -f starvault | xargs kill
Удалите каталог окружения сценария.
$ rm -rf /tmp/learn-starvault