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

Ограничение доступа к API и хранилищам во время ликвидации последствий инцидента

При работе с любым программным обеспечением могут возникнуть чрезвычайные ситуации или непредвиденные действия, и StarVault не является исключением.

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

1. Задача

Операторам и специалистам по реагированию требуются функции и возможности, которые эффективно поддерживают резервные механизмы восстановления доступа, используемые при реагировании на инциденты.

При возникновении таких инцидентов, как утечка учетных данных, вторжение или атаки типа "отказ в обслуживании" (DOS), своевременное устранение последствий имеет огромное значение для поддержки операционных целей бизнеса.

2. Решение

Узнайте и используйте эти две важные функции StarVault, которые призваны помочь операторам эффективно реагировать на инциденты.

  • Печать: При обычной работе StarVault работает в незапечатанном состоянии. Однако оператор с достаточными привилегиями может в любой момент запечатать работающий StarVault. При опечатывании сервер StarVault выбрасывает из памяти ключ для разблокировки данных и поэтому физически не может отвечать на все запросы, за исключением проверок состояния и снятия печати.

3. Предварительные условия

Для выполнения всех шагов, описанных в этом практическом сценарии, вам потребуется:

  • StarVault двоичный файл, установленный в вашем системном пути.

  • jq используется для вывода JSON в красивом формате.

3.1. Требования к политике

В рамках данного руководства для работы с StarVault можно использовать root токен. Однако рекомендуется использовать root токены только для первоначальной настройки или в чрезвычайных ситуациях. Лучше всего использовать токены с соответствующим набором политик в зависимости от вашей роли в организации. Если вы не запускаете StarVault локально в режиме разработки (-dev), рекомендуется пройти аутентификацию в 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 запечатывается, это затрагивает всех пользователей, и они не могут его использовать.

em 3 1

Вы будете использовать терминальные сессии для работы с одним сервером 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

---

----

Seal Type

shamir

Initialized

true

Sealed

false

Total Shares

1

Threshold

1

Version

1.3.1

Build Date

2025-03-14T20:50:17Z

Storage Type

raft

Cluster Name

learn-starvault

Cluster ID

fb4c6314-f2df-2cbc-aa21-9e794f44003a

HA Enabled

true

HA Cluster

n/a

HA Mode

standby

Active Node Address

<none>

Raft Committed Index

55

Raft Applied Index

55

Экспортируйте начальное значение 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.

Для простоты в этом сценарии вы будете использовать root токен. Однако в реальных производственных средах root токены следует тщательно охранять и использовать только в строго контролируемых целях. Для получения более подробной информации ознакомьтесь с документацией по корневым токенам.

$ starvault token lookup | grep policies

Успешный вывод должен содержать следующее.

policies [root]

Вы готовы к первому сценарию.

5.5. Запечатывание StarVault

StarVault, работающий в незапечатанном состоянии, использует главный ключ шифрования. Он нужен для расшифровки ключа шифрования, хранящегося в хранилище StarVault, который сам используется для шифрования и расшифровки секретов в хранилище. В этом примере StarVault запечатывается с помощью CLI из терминальной сессии; главный ключ шифрования удаляется из памяти, и дальнейшее шифрование или расшифровка из хранилища невозможны до тех пор, пока StarVault снова не будет запечатан.

em 3 2

Если произошел такой инцидент, как вторжение или утечка учетных данных, запечатывание 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

---

----

Seal Type

shamir

Initialized

true

Sealed

true

Total Shares

1

Threshold

1

Unseal Progress

0/1

Unseal Nonce

n/a

Version

1.3.1

Build Date

2025-03-14T20:50:17Z

Storage Type

inmem_transactional_ha

HA Enabled

true

Вывод должен показать, что значение 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.


  1. Нажмите Status и выберите Unsealed в меню.

    em 3 3
  2. Кликните на Seal

    em 3 4
  3. Подтвердите намерение запечатать StarVault, нажав кнопку Seal в диалоговом окне подтверждения.

    em 3 5

Хранилище запечатано. Status - индикатор состояния, который раньше был зеленым, теперь стал красным.

em 3 6

Вы можете снова разблокировать 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.3.1",
  "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


  1. В окне Unseal введите значение ключа разблокировки в текстовое поле Unseal Key Portion.

    em 3 7
  2. Нажмите Unseal

  3. С StarVault снимается блокировка и он предлагает войти в систему

    em 3 8

Вы можете перейти на терминал, с которого был запущен сервер 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

7. Резюме

Вы узнали о важной функции реагирования на инциденты, доступной в StarVault.