Кэширование
StarVault Proxy Caching позволяет кэшировать на стороне клиента ответы, содержащие вновь созданные токены, и ответы, содержащие арендованные секреты, сгенерированные из этих вновь созданных токенов. Продление кэшированных токенов и аренд также управляется прокси.
1. Кэширование и обновления
Кэширование и обновления ответов управляются прокси-сервером только в этих конкретных сценариях:
-
Запросы на создание токенов выполняются через прокси-сервер. Это означает, что любые операции входа, выполняемые с использованием различных методов аутентификации и вызов конечных точек для создания токенов с использованием токен метода аутентификации через прокси-сервер, приведут к кэшированию ответа прокси-сервером. Ответы, содержащие новые токены, будут кэшироваться прокси-сервером только в том случае, если родительский токен уже управляется прокси-сервером или если новый токен является сиротским токеном.
-
Запросы на создание арендованных секретов выполняются через прокси-сервер с использованием токенов, которые уже управляются прокси-сервером. Это означает, что любые динамические учетные данные, выдаваемые с использованием токенов, управляемых прокси-сервером, будут кэшироваться, и их обновления будут учтены. == Постоянный кэш
StarVault Proxy может восстанавливать токены и договоры аренды из постоянного файла кэша, созданного предыдущим процессом StarVault Proxy.
Дополнительную информацию об этой функции см. на странице Постоянное кэширование StarVault Proxy.
2. Вытеснение кэша
Вытеснение записей кэша, относящихся к секретам, произойдет, когда прокси больше не сможет их обновлять. Это может произойти, когда секреты достигнут своего максимального TTL или если обновления приведут к ошибкам.
StarVault Proxy выполняет вытеснения кэша, отслеживая определенные типы запросов и коды ответов. Например, если запрос на отзыв токена сделан через прокси и если перенаправленный запрос на сервер StarVault успешен, то прокси вытесняет все записи кэша, связанные с отозванным токеном. Аналогично любая операция отзыва аренды также будет перехвачена прокси, и соответствующие записи кэша будут вытеснены.
Обратите внимание, что хотя прокси вытесняет записи кэша по истечении срока действия секрета и при перехвате запросов на отзыв, прокси все еще может быть полностью не осведомлен об отзывах, которые происходят через прямое взаимодействие клиента с сервером StarVault. Это может потенциально привести к устареванию записей кэша. Для управления устаревшими записями в кэше доступна конечная точка /proxy/v1/cache-clear (см. ниже), позволяющая вручную удалять записи кэша на основе некоторых критериев запроса, используемых для индексации записей кэша.
3. Запрос уникальности
Чтобы обнаружить повторные запросы и вернуть кэшированные ответы, прокси-сервер должен иметь способ уникальной идентификации запросов. Это вычисление в его нынешнем виде использует упрощенный подход (может измениться в будущем) сериализации и хеширования HTTP-запроса вместе со всеми заголовками и телом запроса. Это хэш-значение затем используется как индекс в кэше для проверки доступности ответа. Следствием этого подхода является то, что хэш-значение для любого запроса будет отличаться, если какие-либо данные в запросе изменены. Это имеет побочный эффект в виде ложных отрицательных результатов, если, скажем, изменен порядок параметров запроса. Пока запросы поступают без каких-либо изменений, поведение кэширования должно быть согласованным. Идентичные запросы с по-разному упорядоченными значениями запроса приведут к дублированию записей кэша. Предположение о том, что клиенты будут использовать согласованные механизмы для выполнения запросов, тем самым приводя к согласованным хэш-значениям на запрос, является идеей, на которой построена функциональность кэширования.
4. Управление обновлением
Токены и договоры аренды обновляются прокси-сервером с помощью секретного обновителя, который доступен через API Go сервера StarVault. Прокси-сервер выполняет все операции в памяти и ничего не сохраняет в хранилище. Это означает, что при отключении прокси-сервера все операции по обновлению немедленно прекращаются, и прокси-сервер не может возобновить обновления после этого. Обратите внимание, что отключение прокси-сервера не означает отзыва секретов, а означает лишь, что ответственность за обновление всех действительных неотозванных секретов больше не выполняется прокси-сервером StarVault.
5. API
5.1. Очистка кэша
Эта конечная точка очищает кэш на основе заданных критериев. Чтобы использовать этот API, необходимо заранее знать некоторую информацию о том, как прокси-сервер кэширует значения. Каждый ответ, кэшируемый в прокси-сервере, будет индексироваться по некоторым факторам в зависимости от типа запроса. Этими факторами могут быть токен, принадлежащий кэшированному ответу, token_accessor токена, принадлежащего кэшированному ответу, request_path, который привел к кэшированному ответу, аренда, прикрепленная к кэшированному ответу, namespace, к которому принадлежит кэшированный ответ, и еще несколько. Этот API раскрывает некоторые факторы, с помощью которых извлекаются и удаляются связанные записи кэша. Для слушателей без включенного кэширования этот API по-прежнему будет доступен, но ничего не будет делать (нет кэша для очистки) и вернет ответ 200.
| Метод | Путь | Вызывает |
|---|---|---|
|
|
|
Параметры
-
type(strings: required)— тип записей кэша для вытеснения. Допустимые значения:request_path,lease,token,token_accessorиall. Еслитипустановлен наall, очищается весь кэш. -
value(string: required)— точное значение или префикс значения для выбранногоtype. Этот параметр необязателен, еслиtypeустановлен наall. === Образец полезной нагрузки
{
"type": "token",
"value": "hvs.rlNjegSKykWcplOkwsjd8bP9"
}
6. Конфигурация (cache)
Наличие блока cache верхнего уровня в любом виде (включая пустой блок cache) включит кэш. Блок cache верхнего уровня имеет следующую запись конфигурации:
-
persist(object: optional)— конфигурация для постоянного кэша.
|
Когда блок |
7. Конфигурация (persist)
Это общие значения конфигурации, которые находятся в persist блоке:
-
type(string: required)— тип используемого постоянного кэша, напримерkubernetes.
-
path(string: required)— путь на диске, по которому должен быть создан или восстановлен файл постоянного кэша.
-
keep_after_import(bool: Optional)— если установлено значениеtrue, восстановленный файл кэша не удаляется. По умолчанию —false.
-
exit_on_err(bool: Optional)— если установлено значение true, если во время восстановления постоянного кэша возникнут какие-либо ошибки, StarVault Proxy завершит работу с ошибкой. По умолчанию —true.
-
service_account_token_file(string: Optional)— еслиtypeустановлено значениеkubernetes, настраивает путь на диске, по которому можно найти токен учетной записи службы Kubernetes. По умолчанию используется/var/run/secrets/kubernetes.io/serviceaccount/token. == Конфигурация (listener)
-
listener(array of objects: required)— конфигурация для слушателей.
На верхнем уровне может быть один или несколько блоков listener. Добавление слушателя включает API Proxy и позволяет API Proxy использовать кэш, если настроено. Эти значения конфигурации являются общими для блоков listener tcp и unix. Блоки типа tcp поддерживают стандартные параметры слушателя tcp. Кроме того, параметр строки роли доступен как часть верхнего уровня блока listener, который можно настроить на metrics_only для обслуживания только метрик или на роль по умолчанию default, которая обслуживает все (включая метрики).
-
type(string: required)— тип слушателя для использования. Допустимые значения:tcpиunix.при использовании HCL это может использоваться как ключ для блока, например,
listener "tcp" {…}.
-
address(string: required)— адрес, который прослушивает listener. Это может быть либо URL-путь при использованииtcp, либо путь к файлу при использованииunix. Например,127.0.0.1:8200или/path/to/socket. По умолчанию127.0.0.1:8200.
-
tls_disable(bool: false)— указывает, будет ли отключен TLS.
-
tls_key_file(string: Optional)— указывает путь к закрытому ключу для сертификата.
-
tls_cert_file(string: Optional)— указывает путь к сертификату для TLS. == Пример конфигурации
Ниже приведен пример конфигурации кэша с дополнительным persist блоком, а также обычным слушателем и слушателем, который обслуживает только метрики.
# Другие блоки конфигурации прокси-сервера StarVault
# ...
cache {
persist = {
type = "kubernetes"
path = "/vault/proxy-cache/"
keep_after_import = true
exit_on_err = true
service_account_token_file = "/tmp/serviceaccount/token"
}
}
listener "tcp" {
address = "127.0.0.1:8100"
tls_disable = true
}
listener "tcp" {
address = "127.0.0.1:3000"
tls_disable = true
role = "metrics_only"
}