Spec-Zone.ru › Ansible

О lookup-плагине hashi_vault

На этой странице рассказывается о прошлом, настоящем и будущем hashi_vault lookup-плагина.

Lookup-плагин hashi_vault — это самый старый контент, связанный с Vault, в Ansible. Он был включён в Ansible до появления коллекций (<2.10). В результате это самый используемый плагин для Vault и тот, с которым знакомо большинство пользователей.

Сейчас мы рекомендуем использовать более новый контент в коллекции и считаем, что все сценарии использования hashi_vault охвачены более новыми плагинами. Чтобы узнать историю, продолжайте читать этот документ. Информацию о переходе на новые плагины можно найти в руководстве по переходу с hashi_vault.

  • Краткое описание
  • Подробная история

    • Особенности lookup-плагина hashi_vault
    • Как мы учитываем эти особенности
    • Будущее lookup-плагина hashi_vault

Краткое описание

Кратко:

  • Lookup-плагин hashi_vault выполняет несколько задач и использует некоторые шаблоны, которые мы хотели бы изменить, но которые уже прочно укоренились.
  • Коллекция community.hashi_vault разрабатывает и выпускает новые плагины и модули с более узкой областью применения, которые обеспечат отдельную поддержку многих сценариев использования, для которых применялся lookup-плагин hashi_vault.
  • Сейчас планов по устареванию lookup-плагина hashi_vault нет, но маловероятно, что для него будут добавлены новые специфичные функции (улучшения общего кода, например новые методы аутентификации, включаются автоматически).
  • По мере выпуска новых плагинов в коллекции мы будем добавлять на эту страницу конкретные рекомендации по переходу с примерами.

Подробная история

Особенности lookup-плагина hashi_vault

Из-за истории lookup-плагина hashi_vault он выполняет множество задач. Он универсален, но порой его поведение трудно предугадать.

Lookup-плагин hashi_vault выполняет три основные задачи:

  • аутентификация: принимает параметры для различных типов входа в систему, выполняет вход и получает токен, с помощью которого может отправлять дополнительные запросы в Vault;
  • универсальное чтение: позволяет читать данные из любого пути Vault, не требуя специальной реализации для конкретного типа пути;
  • преобразование ответов, похожих на ответы kv2, в более простые ответы, напоминающие ответы kv1.

Чаще всего этот плагин используют для чтения секретов. Самое распространённое хранилище секретов — встроенное в Vault хранилище kv (ключ-значение). В большинстве реализаций используется версия 2 хранилища kv. Чтобы упростить чтение секретов kv версии 2, lookup-плагин предполагает, что вы, вероятно, пытаетесь прочитать секрет kv, и пытается определить, получен ли ответ от kv2, поскольку ответы версии 2 содержат метаданные, а значение секрета дополнительно заключено в другую структуру. Lookup-плагин преобразует ответы kv2 так, чтобы они были похожи на ответы версии 1.

Поскольку хранилище kv содержит одну или несколько пар ключ-значение в каждом секрете, lookup-плагин также поддерживает нестандартный суффикс в пути, позволяющий получить значение, относящееся к одному конкретному ключу, с помощью синтаксиса :keyname. Это удобно для компактного обращения к одному значению секрета (что, стоит признать, является очень распространённым сценарием), но усложняет реализацию и приводит к формированию нежелательных привычек.

Например, стало обычным делом использовать множество вызовов lookup-плагина с одним и тем же путём, но разными значениями :keyname, чтобы получить несколько значений из одного секрета. Однако это весьма неэффективно: для каждого вызова отдельно выполняются вход в систему и чтение секрета, хотя возвращается одно и то же значение, а разыменование ключа выполняется на стороне клиента. Кроме того, разыменование можно выполнить непосредственно в Jinja, где происходящее будет понятнее, используя синтаксис .key или ['key'].

Ещё одна особенность плагина — возможность указывать все его параметры в строке термина. Это выглядит компактно, но значительно усложняет обработку параметров плагина. Когда этот lookup-плагин был создан, многие другие lookup-плагины позволяли указывать параметры в строке термина, однако с тех пор такой подход стали считать антипаттерном, и его использование в основных плагинах было объявлено устаревшим или прекращено.

Ещё один недостаток такого подхода — невозможность эффективно повторно использовать токен аутентификации, когда передано несколько строк термина напрямую или через with_community.hashi_vault.hashi_vault. В результате при таком использовании выполняется новый вход в систему для каждого термина. В новых lookup-плагинах можно выполнить несколько операций после одного входа в систему.

Все эти особенности объяснимы в контексте, но несколько затуманивают назначение lookup-плагина:

  • Если ответ от совершенно другой конечной точки окажется похожим на ответ kv2, результат будет неожиданным.
  • Если попытаться напрямую указать путь к секрету kv2, это не сработает, пока в путь не будет добавлен компонент /data/, чтобы он соответствовал пути API, а не привычному пользователям пути.
  • Если нужно получить метаданные вместе с ответом kv2, сделать это невозможно.
  • Другие возможности kv2, например управление версиями секретов, нельзя использовать напрямую, если не изменить URL, что чревато ошибками и неочевидно.
  • Получить токен, созданный при внутреннем входе в систему, чтобы использовать его повторно, невозможно.

Как мы учитываем эти особенности

Встроенная поддержка аутентификации сохранится. Более того, она была перенесена в общие утилиты коллекции, чтобы все плагины и модули могли использовать одну и ту же функциональность и работать согласованно. Благодаря этому проще тестировать новые и существующие методы аутентификации, добавлять новые (они автоматически становятся доступными во всём существующем контенте) и создавать новый контент, поскольку не нужно повторно реализовывать аутентификацию.

Кроме того, теперь можно напрямую выполнить вход в систему и вернуть токен для последующего повторного использования с помощью community.hashi_vault.vault_login модуля и lookup-плагина.

Универсальное чтение (не только для kv) по-прежнему важно, поэтому для этого мы предлагаем community.hashi_vault.vault_read модуль и lookup-плагин, которые не пытаются определить, получен ли ответ от конкретного бэкенда.

Поскольку чтение из хранилища kv — наиболее распространённый сценарий использования, для него есть специализированный контент:

  • community.hashi_vault.vault_kv1_get модуль
  • community.hashi_vault.vault_kv2_get модуль
  • community.hashi_vault.vault_kv1_get lookup-плагин
  • community.hashi_vault.vault_kv2_get lookup-плагин

Разыменование словаря с помощью синтаксиса :keyname не будет поддерживаться в других элементах контента. В Jinja для этого можно использовать:

  • синтаксис с точкой .keyname
  • синтаксис lookup-плагина ['keyname']
  • специализированные фильтры в некоторых случаях, например vault_login_token фильтр.

Другие lookup-плагины не будут поддерживать параметры в строке термина. Разработчики основного проекта не рекомендуют такой подход и уже предприняли шаги по удалению этой функциональности из основного проекта там, где она ещё сохраняется. Однако в плагине hashi_vault она останется для обратной совместимости, поскольку, вероятно, всё ещё широко используется.

Будущее lookup-плагина hashi_vault

В настоящее время планов объявлять плагин hashi_vault устаревшим или удалять его нет. Вероятно, он останется в проекте бессрочно — ради обратной совместимости и потому, что значительная часть функциональности перенесена в общий код, поэтому для его поддержки требуется совсем немного усилий. Если обстоятельства изменятся, это решение можно будет пересмотреть.

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

Маловероятно, что в lookup-плагин hashi_vault будут добавляться или приниматься новые функции и возможности, за исключением тех, которые появляются «бесплатно», например новых методов аутентификации (для них не нужно менять код самого плагина).

© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/collections/community/hashi_vault/docsite/about_hashi_vault_lookup.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API