Метод аутентификации по токену (Token auth)
Метод аутентификации по токену является встроенным и автоматически доступен по адресу /auth/token. Он позволяет пользователям проходить аутентификацию с помощью токена, а также создавать новые токены, отзывать секреты по токену и выполнять другие операции.
Когда любой другой метод аутентификации возвращает идентификационные данные, ядро Stronghold вызывает метод token, чтобы создать для них новый уникальный токен.
Хранилище токенов также может быть использовано в обход любого другого метода аутентификации: вы можете создавать токены напрямую, а также выполнять различные другие операции с токенами, такие как обновление и отзыв.
Аутентификация
Через CLI
Чтобы войти с помощью токена, выполните команду:
- Stronghold в DP
- Stronghold в Linux
d8 stronghold login token=<TOKEN>stronghold login token=<TOKEN>Где <TOKEN> — значение токена.
Через API
Токен передаётся в HTTP API в заголовке X-Vault-Token: <TOKEN> или Authorization: Bearer <TOKEN>, где <TOKEN> — значение токена.
Создание токенов
Токены создаются командой d8 stronghold token create (эндпоинт auth/token/create). Новый токен по умолчанию становится дочерним по отношению к токену, от имени которого выполняется запрос, и может получить только подмножество его политик. Подробнее о свойствах токенов — в разделе «Токен».
Служебный токен
Служебный (service) токен используется по умолчанию. Он хранится в Stronghold, поддерживает продление, отзыв, создание дочерних токенов и имеет accessor:
d8 stronghold token create -policy="app-read" -ttl=1h -display-name="app-1"Пакетный токен
Пакетный (batch) токен не хранится в Stronghold, не продлевается, не отзывается вручную и не имеет accessor. Он подходит для большого числа короткоживущих операций:
d8 stronghold token create -type=batch -policy="app-read" -ttl=15mОсиротевший токен
Токен-сирота (orphan token) не имеет родителя и не отзывается при отзыве токена, от имени которого был создан. Для его создания нужен доступ к auth/token/create-orphan или возможность sudo на auth/token/create:
d8 stronghold token create -orphan -policy="app-read" -ttl=24hПериодический токен
Периодический токен не имеет максимального срока жизни: при каждом продлении его TTL сбрасывается до значения периода. Токен истекает, если его не продлевать дольше периода:
d8 stronghold token create -period=1h -policy="app-read"Явный максимальный TTL
Параметр -explicit-max-ttl задаёт жёсткое ограничение времени жизни токена, которое нельзя превысить продлением, в том числе для периодических токенов:
d8 stronghold token create -policy="app-read" -ttl=1h -explicit-max-ttl=8hОграничение числа использований
Параметр -use-limit задаёт, сколько раз можно использовать токен. После исчерпания лимита токен отзывается:
d8 stronghold token create -policy="app-read" -use-limit=3 -ttl=10mДругие параметры
| Флаг CLI | Параметр API | Описание |
|---|---|---|
-policy | policies | Политики токена. Флаг можно указать несколько раз. |
-no-default-policy | no_default_policy | Не добавлять политику default. |
-ttl | ttl | Начальный TTL токена. |
-explicit-max-ttl | explicit_max_ttl | Жёсткий максимальный TTL. |
-period | period | Период продления периодического токена. |
-renewable | renewable | Разрешено ли продление. По умолчанию true. |
-orphan | no_parent | Создать токен без родителя. |
-type | type | Тип токена: service или batch. |
-use-limit | num_uses | Максимальное число использований. |
-display-name | display_name | Отображаемое имя токена. |
-metadata | meta | Произвольные метаданные key=value. |
-entity-alias | entity_alias | Псевдоним сущности, с которым связывается токен. |
-role | — | Создать токен по роли хранилища токенов. |
Роли хранилища токенов
Роль хранилища токенов (auth/token/roles/<ROLE_NAME>) задаёт свойства токенов, которые выдаются по ней: допустимые политики, тип токена, TTL, период, признак токена-сироты и другие. С помощью ролей можно разрешить создание токенов с политиками, которых нет у вызывающего токена, не выдавая ему sudo.
Создайте роль:
d8 stronghold write auth/token/roles/ci-deploy allowed_policies="deploy" disallowed_policies="admin" orphan=true token_type=service token_period=1h token_explicit_max_ttl=24h renewable=trueОсновные параметры роли:
Параметр Описание allowed_policies,allowed_policies_globПолитики, которые можно назначить токену. disallowed_policies,disallowed_policies_globПолитики, которые запрещено запрашивать. orphanВыдавать токены-сироты. token_typeТип токенов: serviceилиbatch.token_periodПериод для периодических токенов. token_explicit_max_ttlЯвный максимальный TTL. token_num_usesЛимит использований токена. token_bound_cidrsCIDR-блоки, из которых разрешено использовать токен. renewableРазрешено ли продление токенов. path_suffixСуффикс пути токена для последующего отзыва по префиксу. allowed_entity_aliasesРазрешённые псевдонимы сущностей. Выдайте токен по роли:
d8 stronghold token create -role=ci-deployДля этого вызывающему токену нужна возможность
updateна путиauth/token/create/ci-deploy.Просмотрите роли:
d8 stronghold list auth/token/roles d8 stronghold read auth/token/roles/ci-deploy
Просмотр, продление и отзыв токенов
В командах ниже <TOKEN> — значение токена, который нужно просмотреть, продлить или отозвать.
Просмотр свойств текущего токена:
d8 stronghold token lookupПросмотр свойств другого токена:
d8 stronghold token lookup <TOKEN>Продление текущего токена или другого токена с запросом нового TTL:
d8 stronghold token renew d8 stronghold token renew -increment=1h <TOKEN>Отзыв токена вместе со всеми дочерними токенами и арендами:
d8 stronghold token revoke <TOKEN>Отзыв только самого токена: его прямые дочерние токены становятся токенами-сиротами:
d8 stronghold token revoke -mode=orphan <TOKEN>Отзыв текущего токена:
d8 stronghold token revoke -selfПроверка возможностей токена на пути:
d8 stronghold token capabilities <TOKEN> secret/data/app
Работа через accessor
Accessor — это ссылка на токен, которая позволяет просматривать, продлевать и отзывать токен, не зная его значения. Accessor возвращается при создании токена (поле token_accessor) и в выводе token lookup (поле accessor). У пакетных токенов accessor отсутствует.
В командах ниже <ACCESSOR> — accessor токена.
Просмотр токена по accessor:
d8 stronghold token lookup -accessor <ACCESSOR>Продление токена по accessor:
d8 stronghold token renew -accessor <ACCESSOR>Отзыв токена по accessor:
d8 stronghold token revoke -accessor <ACCESSOR>Проверка возможностей токена по accessor:
d8 stronghold write sys/capabilities-accessor accessor=<ACCESSOR> paths=secret/data/appСписок accessor всех токенов (требуется
sudo):d8 stronghold list auth/token/accessors
Список accessor позволяет отозвать любой токен. Выдавайте доступ к auth/token/accessors только администраторам.
Очистка хранилища токенов
Эндпоинт auth/token/tidy удаляет из хранилища токенов устаревшие записи, например accessor уже истёкших токенов:
d8 stronghold write -force auth/token/tidy