Метод аутентификации по токену (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Описание
-policypoliciesПолитики токена. Флаг можно указать несколько раз.
-no-default-policyno_default_policyНе добавлять политику default.
-ttlttlНачальный TTL токена.
-explicit-max-ttlexplicit_max_ttlЖёсткий максимальный TTL.
-periodperiodПериод продления периодического токена.
-renewablerenewableРазрешено ли продление. По умолчанию true.
-orphanno_parentСоздать токен без родителя.
-typetypeТип токена: service или batch.
-use-limitnum_usesМаксимальное число использований.
-display-namedisplay_nameОтображаемое имя токена.
-metadatametaПроизвольные метаданные key=value.
-entity-aliasentity_aliasПсевдоним сущности, с которым связывается токен.
-role—Создать токен по роли хранилища токенов.

Роли хранилища токенов

Роль хранилища токенов (auth/token/roles/<ROLE_NAME>) задаёт свойства токенов, которые выдаются по ней: допустимые политики, тип токена, TTL, период, признак токена-сироты и другие. С помощью ролей можно разрешить создание токенов с политиками, которых нет у вызывающего токена, не выдавая ему sudo.

  1. Создайте роль:

    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Разрешённые псевдонимы сущностей.
  2. Выдайте токен по роли:

    d8 stronghold token create -role=ci-deploy

    Для этого вызывающему токену нужна возможность update на пути auth/token/create/ci-deploy.

  3. Просмотрите роли:

    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

Дополнительные ресурсы