Токены: TTL, renew, revoke, иерархия
Токен — это пропуск с ограниченным сроком; разбираем, как он рождается, продлевается, отзывается и наследуется.
Токен — выданный после логина пропуск с привязанными политиками и сроком жизни (TTL); по нему Vault авторизует все последующие запросы.
Токены — основной механизм доступа. Хороший токен короткоживущий: даже если он утечёт, окно эксплуатации ограничено. Управление сроком, продлением и отзывом — повседневная операционная работа с Vault.
Создание токена
vault token create \
-policy=myapp-read \
-ttl=1h \
-explicit-max-ttl=4h
TTL и max_TTL
TTL — текущий срок жизни токена. max_TTL — потолок, выше которого продление невозможно. Токен можно продлевать, пока не упрётся в max_TTL, после чего он обязательно истечёт. Это гарантирует, что ни один токен не живёт вечно.
создан (TTL=1h) --renew--> +1h --renew--> +1h ... упёрся в max_TTL=4h --> истекает, продлить нельзя
Продление: renew
vault token renew # продлить текущий токен
vault token renew -increment=2h # продлить на 2 часа (в рамках max_ttl)
Долгоживущие сервисы периодически дёргают renew, удерживая токен активным. Если сервис умер и перестал продлевать — токен сам истечёт, и доступ закроется.
Отзыв: revoke
Отзыв немедленно делает токен недействительным, не дожидаясь TTL:
vault token revoke <токен>
Это инструмент реагирования на инцидент: подозреваете утечку — отзываете токен, и доступ пропадает мгновенно.
Иерархия токенов
Токены образуют дерево: токен, создавший другой токен, становится его родителем. Ключевое свойство — каскадный отзыв: отзыв родителя автоматически отзывает всех потомков.
root / admin | +-- token A (сервис деплоя) | +-- token A1 (под-задача) | +-- token A2 +-- token B (другой сервис) revoke A --> A, A1, A2 отозваны разом
Это удобно: достаточно отозвать корень ветки, чтобы погасить весь выданный под ней доступ.
Как работает под капотом
Vault ведёт учёт токенов и их аренд (leases) в storage. У каждого токена есть accessor — публичный идентификатор, по которому можно отозвать или посмотреть токен, не зная самого секретного значения. Истечение и отзыв запускают тот же механизм, что и для динамических секретов: связанные аренды отзываются, временные креды удаляются. Поэтому отзыв токена может за собой подтянуть отзыв выданных под ним динамических секретов.
Orphan-токены
Иногда нужен токен без родителя — чтобы его не убил каскадный отзыв (например, для самостоятельного демона). Такой orphan-токен создаётся явно и живёт независимо, но за ним нужно следить отдельно.
Частые ошибки
- Длинный TTL «чтобы не возиться» — большое окно эксплуатации при утечке.
- Полагаться только на TTL при инциденте — нужен немедленный
revoke. - Плодить orphan-токены без учёта — они переживут отзыв родителя.
- Не продлевать токен сервиса и удивляться внезапной потере доступа после истечения TTL.
Итог
- Токен живёт ограниченное время: TTL продлевается renew до потолка max_TTL.
- revoke немедленно гасит токен; это инструмент реагирования на инцидент.
- Токены образуют дерево с каскадным отзывом; orphan-токены живут вне дерева.