Аренда, продление и отзыв

Для каждого динамического секрета и сервиса аутентификации Stronghold создает аренду (lease), в которой содержатся метаданные, такие как срок действия, возможность продления и прочее. Stronghold гарантирует, что данные будут оставаться актуальными в течение установленного периода, известного как время жизни (TTL). После окончания срока аренды Stronghold может автоматически аннулировать данные, после чего потребитель секрета не может быть уверен в их актуальности.

Потребители секретов вынуждены регулярно связываться со Stronghold, чтобы продлить аренду (если это разрешено) или запросить новый секрет. Это повышает ценность журналов аудита Stronghold, а также значительно упрощает процесс смены ключей.

Аренда должна быть у всех динамических секретов в Stronghold. Даже если предполагается, что данные будут действовать «вечно», аренда необходима, чтобы заставить потребителя регулярно перепроверять их.

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

Отзыв может происходить вручную через API, с помощью CLI-команды d8 stronghold lease revoke, через веб-интерфейс на вкладке «Access» или автоматически. Когда срок аренды истекает, Stronghold автоматически её отзывает. При отзыве токена Stronghold отзывает все аренды, которые были созданы с его помощью.

Бэкенд Key/Value, который хранит произвольные секреты, не выдает аренды, хотя иногда возвращает продолжительность аренды. За дополнительной информацией обратитесь к документации механизма секретов kv.

Идентификаторы аренды (lease IDs)

При чтении динамического секрета, например, с помощью команды d8 stronghold read, Stronghold всегда возвращает lease_id. Это идентификатор, который может быть использован такими командами, как d8 stronghold lease renew и d8 stronghold lease revoke для управления арендой секрета.

Срок действия и продление аренды

Вместе с идентификатором аренды возвращается срок действия аренды (Time To Live, TTL) — значение в секундах, определяющее период действия аренды. Потребитель секрета должен продлить аренду до истечения этого времени.

При продлении аренды пользователь может запросить изменение срока её действия, указав параметр increment. При этом приращение срока действия происходит не по завершении текущего TTL, а в момент запроса. Например, команда d8 stronghold lease renew -increment=3600 my-lease-id запрашивает увеличение TTL аренды на 1 час (3600 секунд). Такой способ позволяет пользователям не только продлевать, но и сокращать срок действия аренды, если секрет не требуется на весь возможный период аренды.

Запрашиваемое значение increment носит рекомендательный характер. Бэкенд, управляющий секретом, может проигнорировать этот параметр. Для большинства секретов бэкенд делает всё возможное, чтобы соблюсти increment, но часто ограничивает его, чтобы обеспечить регулярное обновление секретов.

После продления аренды следует проверять возвращаемые данные, чтобы уточнить новое значение TTL аренды.

Отзыв на основе префикса

Помимо отзыва единичного секрета, пользователи с необходимым уровнем доступа могут отзывать сразу несколько секретов на основе префикса их идентификатора аренды.

В префиксе идентификаторов аренды всегда содержится путь, указывающий на место, откуда был запрошен секрет. Это позволяет отзывать целые группы секретов. Например, чтобы отозвать все логины Userpass, достаточно выполнить команду d8 stronghold lease revoke -prefix auth/userpass/.

Это может пригодиться в случае проникновения злоумышленника в систему. Можно быстро отозвать все секреты определённого бэкенда или конкретной его конфигурации.