Контроль расходования ресурсов
StarVault — это система, управляемая API, поэтому все коммуникации между клиентами и StarVault осуществляются через StarVault API.
По мере увеличения количества клиентских приложений неавторизованные приложения могут снижать производительность StarVault. Проблема часто возникает из-за приложений, которые:
-
Генерирование неограниченного количества аренд и/или загрузка слишком большого объема данных в StarVault, что приводит к исчерпанию доступной памяти бэкенда хранилища
-
Потребление ошибочно большого количества пропускной способности, что приводит к внутреннему тротлингу кластера StarVault в целом
1. Решение
Установите квоты на ресурсы StarVault, чтобы защитить стабильность среды StarVault и сети, а также потребление ресурсов хранения от неконтролируемого поведения приложений и распределенных атак типа "отказ в обслуживании" (DDoS).
Операторы StarVault могут управлять тем, как приложения запрашивают ресурсы StarVault, а также хранилищем и сетевой инфраструктурой StarVault, задавая следующие параметры:
| Характеристика | Описание |
|---|---|
Квоты на ограничение скорости |
Ограничьте максимальное количество запросов в секунду (RPS) к системе или монтированию, чтобы защитить пропускную способность сети. |
Чтобы установить квоты на ограничение скорости и квоты на количество арендованных ресурсов, используйте конечную точку sys/quotas/<type>. Каждая квота ресурса имеет имя для идентификации правила квоты. Для управления отдельным правилом квоты конечной точкой становится sys/quotas/<type>/<name>.
<type> может быть:
-
rate-limit: квота предельной скорости
2. Необходимое условие
Для выполнения задач, описанных в этом руководстве, вам потребуется StarVault. Для установки StarVault обратитесь к руководству по установке StarVault. Убедитесь, что сервер StarVault инициализирован и распечатан.
3. Лабораторная установка
-
Откройте терминал и запустите dev-сервер StarVault с
rootв качестве корневого токена.starvault server -dev -dev-root-token-id rootПо умолчанию dev-сервер StarVault работает по адресу
127.0.0.1:8200. Сервер также инициализируется и распечатывается.Не запускайте dev-сервер StarVault в боевой среде. Этот подход используется здесь только для упрощения процесса распечатывания в качестве демонстрации.
-
Экспортируйте переменную окружения для
starvaultCLI, чтобы обратиться к серверу StarVault.export STARVAULT_ADDR=http://127.0.0.1:8200 -
Экспортируйте переменную окружения для
starvaultCLI, чтобы аутентифицироваться на сервере StarVault.export STARVAULT_TOKEN=root
Сервер StarVault готов.
4. Настройка квот ресурсов
Чтобы настроить квоту ресурсов, используйте конечную точку sys/quotas/config.
| Параметр | Тип | Описание |
|---|---|---|
|
boolean |
Включите или отключите ведение логов аудита, когда запросы отклоняются из-за нарушения квоты лимита скорости. По умолчанию ведение логов аудита отключено ( |
По умолчанию запросы, отклоненные из-за нарушения квоты ограничения скорости, не записываются в логи аудита. Поэтому, если хотите регистрировать отклоненные запросы для отслеживания, то установие параметру enable_rate_limit_audit_logging значение true. Запросы, отклоненные по причине достижения квоты на количество арендованных мест, всегда записываются в логах, и вам не нужно устанавливать какой-либо параметр.
|
Включение регистрации аудита ограничения скорости может повлиять на производительность StarVault, если объем отклоненных запросов велик. |
4.1. Комнды CLI
-
Включите устройство файлового аудита, которое выводит данные в файл
/var/log/starvault-audit.log(или в нужное вам место).starvault audit enable file file_path="/var/log/starvault-audit.log" -
Чтобы включить логирование аудита для квот на ограничение скорости, выполните следующую команду.
starvault write sys/quotas/config enable_rate_limit_audit_logging=true -
Прочитайте конфигурацию квоты для проверки.
starvault read sys/quotas/config Key Value --- ----- enable_rate_limit_audit_logging true enable_rate_limit_response_headers false rate_limit_exempt_paths []
4.2. Вызов API с помощью cURL
-
Включите устройство аудита файлов.
Сначала создайте полезную нагрузку HTTP-запроса, указав путь к логам аудита
/var/log/starvault-audit.log(или желаемое местоположение файла).tee audit-payload.json <<EOF { "type": "file", "options": { "file_path": "/var/log/starvault-audit.log" } } EOFИспользуйте конечную точку
sys/audit, чтобы включить журнал аудита файлов.curl --header "X-Vault-Token: $STARVAULT_TOKEN" \ --request POST \ --data @audit-payload.json \ $STARVAULT_ADDR/v1/sys/audit/fileУстановите целевой путь файла (
file_path) в нужное вам место. -
Создайте полезную нагрузку HTTP-запроса, чтобы включить логирование аудита квоты ограничения скорости.
tee payload.json <<EOF { "enable_rate_limit_audit_logging": true } EOF -
Вызовите конечную точку
sys/quotas/config.curl --header "X-Vault-Token: $STARVAULT_TOKEN" \ --request POST \ --data @payload.json \ $STARVAULT_ADDR/v1/sys/quotas/config -
Прочитайте конфигурацию квоты для проверки.
curl -s --header "X-Vault-Token: $STARVAULT_TOKEN" \ $STARVAULT_ADDR/v1/sys/quotas/config | jq -r ".data"Пример вывода:
{ "enable_rate_limit_audit_logging": true, "enable_rate_limit_response_headers": false, "rate_limit_exempt_paths": [] }
5. Квоты на ограничение скорости
Квоты на ограничение скорости предназначены для защиты StarVault от внешних распределенных атак типа "отказ в обслуживании" (DDoS) и являются основой модели безопасности StarVault.
5.1. Параметры
| Параметр | Тип | Описание |
|---|---|---|
|
string |
Имя правила для квоты |
|
string |
Целевой путь или пространство имен для применения правила квоты. Пустой путь настраивает глобальную квоту ограничения скорости |
|
float |
Скорость количества разрешенных запросов в секунду (RPS) |
|
string |
Роль входа в систему, к которой следует применить эту квоту. Когда этот параметр установлен, путь должен быть настроен на действительный метод аутентификации с концепцией ролей. |
|
second |
Продолжительность, в течение которой будет действовать ограничение скорости (по умолчанию 1 секунда). |
|
string |
Если установлено, то когда клиент достигает порога ограничения скорости, ему запрещается выполнять дальнейшие запросы до истечения |
|
Путь может быть полностью определенным и заканчиваться символом |
5.1.1. Комнды CLI
-
Создайте квоту с именем
global-rate, которая ограничивает входящую нагрузку до 1500 запросов в секунду.starvault write sys/quotas/rate-limit/global-rate rate=1500 -
Прочитайте правило
global-rate, чтобы проверить его конфигурацию.$ starvault read sys/quotas/rate-limit/global-rate Key Value --- ----- block_interval 0 inheritable true interval 1 name global-rate path n/a rate 1500 role n/a type rate-limitЕсли отсутствует
path, то правило квоты применяется к глобальному уровню, а не к конкретному монтированию. -
Создайте квоту ограничения скорости с именем
transit-limit, которая ограничивает доступ к механизму секретов Transit до 1000 запросов в минуту (60 секунд).Во-первых, включите механизм секретов Transit в
transit.$ starvault secrets enable transit Success! Enabled the pki secrets engine at: transit/Во-вторых, создайте квоту на ограничение скорости
transit-limit.starvault write sys/quotas/rate-limit/transit-limit \ path="transit" \ rate=1000 \ interval=60Вывод:
Success! Data written to: sys/quotas/rate-limit/transit-limit -
Прочитайте правило
transit-limit, чтобы проверить его конфигурацию.starvault read sys/quotas/rate-limit/transit-limit
Пример вывода:
Key Value
--- -----
block_interval 0
inheritable true
interval 60
name transit-limit
path transit/
rate 1000
role n/a
type rate-limit
Ограничение скорости установлено на 1000 запросов в 60 секунд.
5.1.1.1. Детализация пути
Вы можете задать путь (path) глубже, чем точка монтирования (в данном примере transit/).
-
Создайте квоту ограничения скорости с именем
transit-order, чтобы ограничить количество запросов на шифрование данных с использованием ключаordersдо 500 в секунду.Во-первых, включите создайте ключ шифрования с именем,
orders.$ starvault write -f transit/keys/orders Key Value --- ----- allow_plaintext_backup false auto_rotate_period 0s deletion_allowed false derived false exportable false imported_key false keys map[1:1695147293] latest_version 1 min_available_version 0 min_decryption_version 1 min_encryption_version 0 name orders supports_decryption true supports_derivation true supports_encryption true supports_signing false type aes256-gcm96Во-вторых, создайте квоту на ограничение скорости
transit-order.starvault write sys/quotas/rate-limit/transit-order \ path="transit/encrypt/orders" \ rate=500Вывод:
Success! Data written to: sys/quotas/rate-limit/transit-order -
Проверьте конфигурацию квоты ограничения скорости.
starvault read sys/quotas/rate-limit/transit-orderВывод:
Key Value --- ----- block_interval 0 inheritable true interval 1 name transit-order path transit/encrypt/orders rate 500 role n/a type rate-limit
5.1.2. Вызов API с помощью cURL
Создайте квоту с именем global-rate, которая ограничивает входящую нагрузку до 1500 запросов в секунду.
-
Вызовите конечную точку
sys/quotas/rate-limit.curl --header "X-Vault-Token: $STARVAULT_TOKEN" \ --request POST \ --data '{ "rate": 1500 }' \ $STARVAULT_ADDR/v1/sys/quotas/rate-limit/global-rate -
Прочитайте только что созданное правило квоты
global-rate.curl -s --header "X-Vault-Token: $STARVAULT_TOKEN" \ $STARVAULT_ADDR/v1/sys/quotas/rate-limit/global-rate | jq -r ".data"Вывод:
{ "block_interval": 0, "interval": 1, "name": "global-rate", "path": "", "rate": 1500, "role": "", "type": "rate-limit" }Если отсутствует
path, то правило квоты применяется к глобальному уровню, а не к конкретному монтированию. -
Создайте квоту ограничения скорости с именем
transit-limit, которая ограничивает доступ к механизму секретов Transit до 1000 запросов в минуту (60 секунд).Во-первых, включите механизм секретов Transit в
transit.curl --header "X-Vault-Token: $STARVAULT_TOKEN" \ --request POST \ --data '{"type":"transit"}' \ $STARVAULT_ADDR/v1/sys/mounts/transitВо-вторых, создайте квоту на ограничение скорости
transit-limit.curl --header "X-Vault-Token: $STARVAULT_TOKEN" \ --request POST \ --data '{"path": "transit", "rate": 1000, "interval": 60 }' \ $STARVAULT_ADDR/v1/sys/quotas/rate-limit/transit-limit -
Прочитайте правило
transit-limit, чтобы проверить его конфигурацию.curl -s --header "X-Vault-Token: $STARVAULT_TOKEN" \ $STARVAULT_ADDR/v1/sys/quotas/rate-limit/transit-limit | jq -r ".data"
Пример вывода:
{
"block_interval": 0,
"interval": 60,
"name": "transit-limit",
"path": "transit/",
"rate": 1000,
"role": "",
"type": "rate-limit"
}
Ограничение скорости установлено на 1000 запросов в 60 секунд.
5.1.2.1. Детализация пути
Вы можете задать путь (path) глубже, чем точка монтирования (в данном примере transit/).
-
Создайте квоту ограничения скорости с именем
transit-order, чтобы ограничить количество запросов на шифрование данных с использованием ключаordersдо 500 в секунду.Во-первых, включите создайте ключ шифрования с именем,
orders.curl --header "X-Vault-Token: $STARVAULT_TOKEN" \ --request POST \ $STARVAULT_ADDR/v1/transit/keys/ordersВо-вторых, создайте квоту на ограничение скорости
transit-order.curl --header "X-Vault-Token: $STARVAULT_TOKEN" \ --request POST \ --data '{ "path": "transit/encrypt/orders", "rate": 500 }' \ $STARVAULT_ADDR/v1/sys/quotas/rate-limit/transit-order -
Проверьте конфигурацию квоты ограничения скорости.
curl -s --header "X-Vault-Token: $STARVAULT_TOKEN" \ $STARVAULT_ADDR/v1/sys/quotas/rate-limit/transit-order | jq -r ".data"
Вывод:
{
"block_interval": 0,
"interval": 1,
"name": "transit-order",
"path": "transit/encrypt/orders",
"rate": 500,
"role": "",
"type": "rate-limit"
}
|
Следующий шаг |
6. Тест на понимание квот на ресурсы
После того, когда вы изучили основные команды, проверьте, как они себя ведут.
6.1. Тест на определение квоты на ограничение скорости
-
Включите механизм транзита секретов, если он не включен.
starvault secrets enable transit -
Удалите определение квоты, которое было создано ранее
starvault delete sys/quotas/rate-limit/transit-limit -
Создайте ключ шифрования "test".
starvault write -f transit/keys/test -
Для демонстрации создайте квоту ограничения скорости
test-transitтак, чтобы вы могли делать только 1 запрос в минуту.starvault write sys/quotas/rate-limit/rate-test \ path=transit \ rate=1 \ interval=1m -
Создайте скрипт
test-encryption.sh, который выполняет запрос на шифрование данных с помощью ключаtest.tee test-encryption.sh <<EOF echo "Request 1" starvault write transit/encrypt/test plaintext=$(base64 <<< "4111 1111 1111 1111") echo "\nRequest 2" starvault write transit/encrypt/test plaintext=$(base64 <<< "4222 2222 2222 2222") echo "\nRequest 3" starvault write transit/encrypt/test plaintext=$(base64 <<< "4333 3333 3333 3333") EOF -
Убедитесь, что сценарий является исполняемым.
chmod +x test-encryption.sh -
Запустите скрипт, чтобы посмотреть, как поведет себя правило квоты.
./test-encryption.shВывод:
Request 1 Key Value --- ----- ciphertext vault:v1:6zY2JVtuw3r11ST/JjMkmoNbbcCpQwGbJJ0BJfByk//GLQof8mcxAoerq5Y++BZK key_version 1 Request 2 Error writing data to transit/encrypt/test: Error making API request. URL: PUT http://127.0.0.1:8200/v1/transit/encrypt/test Code: 429. Errors: * request path "transit/encrypt/test": rate limit quota exceeded Request 3 Error writing data to transit/encrypt/test: Error making API request. URL: PUT http://127.0.0.1:8200/v1/transit/encrypt/test Code: 429. Errors: * request path "transit/encrypt/test": rate limit quota exceededВторой и третий запросы не прошли из-за лимита.
-
Ранее вы настроили квоты на ресурсы, чтобы включить ведение логов аудита запросов, отклоненных из-за нарушения правила квоты лимита скорости. Проверьте журнал аудита на наличие такой записи.
more /var/log/starvault-audit.log | jqЕсли путь к журналу аудита не является
/var/log/starvault-audit.log, обязательно установите правильный путь....snip... "request": { "id": "4170a181-6a18-589b-f026-a62ad08ae644", "operation": "update", "namespace": { "id": "root" }, "path": "transit/encrypt/test", "data": { "plaintext": "hmac-sha256:50978c7cb3f0f463491a26152353f485b579d1e8759ec7b7b7c28f3c5b9232cd" }, "remote_address": "127.0.0.1", "remote_port": 61028 }, "error": "request path \"transit/encrypt/test\": rate limit quota exceeded" }Вы должны найти сообщение об ошибке, указывающее на превышение квоты лимита скорости. Вы можете проследить логи аудита, чтобы узнать количество запросов, которые были отклонены из-за превышения квоты. Возможно, все работает как надо, а возможно, вы обнаружите подозрительные действия в отношении определенного пути.
-
Создайте еще одну квоту ограничения скорости, чтобы указать путь к
transit/encrypt/test, где разрешенная скорость равна 2 с интервалом в 1 минуту.starvault write sys/quotas/rate-limit/encryption-limit \ path="transit/encrypt/test" \ rate=2 \ interval=1m -
Запустите скрипт еще раз, чтобы посмотреть, как поведет себя правило квоты.
./test-encryption.shВывод:
Request 1 Key Value --- ----- ciphertext vault:v1:44sOnzePg8c0XaxzGeGzwJ94UZ1uuif8p0nGuze8utbvWVhqNHDiIwo8VZmPrcli key_version 1 Request 2 Key Value --- ----- ciphertext vault:v1:w9tyXqoXH6uXuOWUktVWP/yrzOOZDv+TrRbbRU5GZEVappASIRnh3+6KwkJkjWKE key_version 1 Request 3 Error writing data to transit/encrypt/test: Error making API request. URL: PUT http://127.0.0.1:8200/v1/transit/encrypt/test Code: 429. Errors: * request path "transit/encrypt/test": rate limit quota exceededНа этот раз не сработал только последний запрос. Если задан более подробный путь, правило квоты ограничения скорости имеет приоритет перед путем.
Если у вас есть другой ключ или вы пытаетесь расшифровать (
transit/decrypt/test), будет применена квота ограничения скоростиrate-test.
7. Очистка
Если вы хотите очистить среду после завершения обучения, выполните действия, описанные в этом разделе.
-
Сбросьте переменные окружения
STARVAULT_TOKENиSTARVAULT_ADDR.unset STARVAULT_TOKEN STARVAULT_ADDR -
Удалите файлы, созданные во время теста.
rm test-encryption.sh payload.json audit-payload.json -
Если вы запускаете StarVault локально в режиме
-dev, вы можете остановить dev-сервер StarVault, нажав Ctrl+C там, где запущен сервер. Или выполните следующую команду.pgrep -f starvault | xargs kill