Для чего нужен плагин vault
Безопасное использование секретов: шаблон для использования HashiCorp Vault
HashiCorp Vault — это инструмент с открытым исходным кодом, который обеспечивает безопасный и надежный способ хранения и распространения секретов, таких как ключи API, токены доступа и пароли. Программное обеспечение, такое как Vault, может быть критически важным при развертывании приложений, требующих использования секретов или конфиденциальных данных.
Согласно недавнему исследованию ученых из Университета штата Северная Каролина, более 100 000 общедоступных репозиториев GitHub содержат открытые секреты приложений непосредственно в исходном коде. Это исследование — от частных токенов API до криптографических ключей — просканировало только около 13% общедоступных репозиториев GitHub — показывает, что надлежащая защита секретов приложений является одним из наиболее часто игнорируемых методов защиты информации в программном обеспечении.
Хотя масштабы воздействия удивительны, важно отметить, что эта проблема затрагивает не только проекты с открытым исходным кодом. Даже частные репозитории исходного кода могут раскрывать секреты, если они не защищены должным образом. Возьмем, к примеру, нарушение безопасности в Buffer Inc. в 2013 году. То, что начиналось как незаконный доступ к собственному исходному коду Buffer, привело к утечке учетных данных Twitter API компании, что в конечном итоге привело к рассылке спама в учетных записях Twitter бесчисленных клиентов.
Я не собираюсь угнетать Buffer прямо сейчас. Компании взламывают каждый день, и Buffer дал первоклассный ответ. Их нефильтрованная прозрачность и информирование об инцидентах послужили интересным примером важности управления секретами как основного принципа информационной безопасности. Но это также поднимает вопрос о том, как лучше всего управлять секретами в растущей, масштабируемой организации.
Введение в HashiCorp Vault
Я большой поклонник HashiCorp. Их подход к инструментам DevOps, не зависящий от поставщика, предоставляет отличные портативные решения, которые абстрагируются от отдельных поставщиков облачных услуг и фокусируются на решении реальных проблем. Их инструмент управления секретами, Vault, не исключение.
В то время как каждый отдельный поставщик облачных услуг имеет собственное решение для управления секретами, Vault является независимым от поставщика решением, которое позволяет централизованно управлять и обеспечивать доступ к секретам приложений без учета базового механизма секретов или методов аутентификации.
Установка Vault
Прежде чем мы сможем начать работу с Vault, нам сначала нужно его установить. Как и все продукты HashiCorp, Vault кроссплатформенный, с поддержкой macOS, Windows, Linux, Solaris и даже BSD. Вы даже можете запустить его на Raspberry Pi.
Запуск сервера
После установки Vault нам нужно запустить наш сервер. В этой статье я буду работать только с сервером разработки Vault. Однако важно отметить, что сервер разработки невероятно небезопасен и хранит все данные в памяти, а это означает, что при его перезапуске все будет потеряно. По словам самих HashiCorp:
Сервер разработки следует использовать для экспериментов с функциями Vault, такими как: различные методы аутентификации, механизмы секретов, устройства аудита и т. д.
Как видите, на экран выводится много данных, с которыми вы можете поиграть. Прежде всего следует отметить, что сервер разработки по умолчанию не запускается как демон (и в целях тестирования, никогда не должен запускаться как демон). Следовательно, если вы хотите взаимодействовать с сервером, вы должны сначала открыть второе окно терминала и экспортировать предоставленную переменную среды VAULT_ADDR, чтобы команда Vault хранилища знала, с каким сервером она должна взаимодействовать.
Также важно отметить значения Unseal Key и Root Token. Хотя мы коснемся того, что делать с Root Token в следующем разделе, понимание запечатывания / распечатывания Vault имеет решающее значение для правильного развертывания Vault в производственной среде.
Расшифровка и аутентификация
В производственной среде сервер Vault запускается в закрытом состоянии. Это означает, что Vault знает, где находятся данные, но не знает, как их расшифровать. На сервере разработки Vault по умолчанию не запечатан (unsealed). Однако, если вы решите запечатать его, вы получите ключ распечатки (Unseal Key), чтобы распечатать (unseal) его. Незапечатанный Vault остается в этом состоянии до тех пор, пока оно не будет повторно запечатано или сам сервер не будет перезапущен.
При первом запуске производственного сервера Vault важно его инициализировать. Этот процесс сгенерирует ключи шифрования и начальный корневой токен, и его можно будет запустить только с новыми хранилищами без каких-либо данных:
Вход в систему
Хранение секретов
В то время как Vault HashiCorp можно использовать для безопасного хранения практически любых данных, наиболее распространенным вариантом использования Vault является хранилище ключей и значений для секретов приложений. После проверки подлинности хранение секретов становится невероятно простым благодаря команде vault kv put :
Например, давайте посмотрим, что произойдет, если мы введем новое значение для того же секрета:
Видите, как был увеличен ключ метаданных версии? Это означает, что наше исходное значение должно поддерживаться в дополнение к новым значениям, что обеспечивает отличный журнал аудита того, какие секреты были изменены и когда.
Извлечение секретов
Хранение секретов — это только половина дела. Другая половина — извлекать эти секреты. В нашем примере выше давайте сначала посмотрим, как получить весь список секретов:
Как видите, хотя технически мы помещаем два секрета, отслеживается только один ключ, потому что эти два секрета на самом деле являются всего лишь двумя версиями одного секрета. Чтобы получить его, выполните команду vault kv get с секретным пространством имен и ключом:
Ценность секретов с управлением версиями невероятна, поскольку они позволяют внутренним службам привязаться к различным секретным версиям, что дает возможность постепенно развиваться, выпускать (release) и откатывать изменения приложений, не опасаясь потери важных данных.
Удаление секретов
Это помечает данные как удаленные ( deleted ) и предотвращает их извлечение в обычных запросах GET, но фактически не удаляет данные:
Чтобы данные действительно были удалены без возможности восстановления, необходимо использовать команду destroy:
Вместо того, чтобы просто пометить данные как удаленные и ограничить доступ к ним, команда destroy удалит их полностью, что сделает невозможным последующее извлечение:
Копаем глубже в HashiCorp Vault
Vault — сложный инструмент, и управление такими секретами — это лишь малая часть того, что можно с его помощью сделать. Хотя тонкости Vault выходят далеко за рамки этой статьи, давайте коснемся лишь нескольких других концепций, которые делают Vault таким мощным.
Secrets engines
Хранилище ключей и значений по умолчанию в Vault является примером механизма секретов (в частности, механизма под названием kv ). По своей сути алгоритм секретов — это абстрактный механизм хранения секретных данных. Это означает, что вместо механизма хранения на основе ключа-значения можно использовать более целевые механизмы хранения. Например, механизм секретов базы данных может использоваться для динамического генерирования учетных данных базы данных ( database ) на основе настроенных ролей для MySQL и MariaDB, что позволяет производить автоматическую ротацию учетных данных root или даже временные учетные данные для доступа по запросу.
Методы аутентификации
В дополнение к стандартному методу аутентификации на основе токенов Vault поддерживает ряд дополнительных методов аутентификации для лучшей поддержки ваших вариантов использования. Отличным примером этого является метод проверки подлинности GitHub, который можно использовать для автоматического предоставления доступа к Vault разработчикам, принадлежащим к определенной организации GitHub — и даже к определенной группе внутри организации GitHub — с использованием только токена личного доступа. Для более крупных организаций решения единого входа на уровне предприятия, такие как LDAP или Okta, могут использоваться для аутентификации пользователей в Vault.
Авторизация
Авторизация всегда идет рука об руку с аутентификацией. Хотя предоставить глобальный доступ с помощью GitHub или аутентификации на основе токенов несложно, это почти никогда не бывает полным решением. Благодаря политике Vault может быть реализован метод авторизации в стиле RBAC, предоставляющий разным пользователям и группам CRUD-подобный доступ к различным аспектам самого хранилища. В сочетании с одним из более продвинутых методов аутентификации это может стать невероятно мощным инструментом для детального контроля доступа в большой организации.
За пределами Vault
Каким бы мощным ни было Vault, настроить его правильно довольно сложно. Хотя размер и объем различных методов проверки подлинности и механизмов секретов ясно показывают, сколько вы можете сделать с Vault, может быть сложным осмыслить основы управления секретами в контексте информационной безопасности исходного кода. Благодаря впечатляюще большому количеству как официальных, так и общественных библиотек API, получение секретов безопасным способом невероятно просто, и если вы стремитесь стать опытным пользователем Vault, собственная учебная программа Vault HashiCorp – отличный способ для начала изучения.
Помимо безопасности приложений и инфраструктуры, вам нужен план быстрого реагирования на инциденты. Ознакомьтесь с нашим бесплатным руководством «От реактивного к упреждающему: 6 способов трансформации вашего мониторинга и реагирования на инциденты» для создания прозрачных рабочих процессов управления инцидентами с высокой степенью совместной работы.
Vault
Загрузка
Предыдущие версии
Скриншоты
Описание
Vault-это API разрешений, чата и экономики, позволяющий плагинам легко подключаться к этим системам без необходимости подключаться или зависеть от каждого отдельного плагина. Он родился из-за отвращения к тому, как работают как Register, так и текущий API разрешений, а также из-за отсутствия у них функций или чрезмерно сложных реализаций. Vault пытается решить эти проблемы, будучи интуитивно понятным и предоставляя плагины с поддержкой любой системы, которую они могут использовать.
Конфиг:
Разрешения:
Vault в настоящее время поддерживает:
Этот плагин использует систему показателей плагинов Hidendra. следующая информация собирается и отправляется по адресу bstats.org если только не отказался:
Отказаться от этой услуги может быть сделано путем редактирования плагинов/bstats/конфигурации.YML и меняется отказа в true.
Связующее хранилище
На странице Vault github есть немного более длинный/подробный пример того, как вы можете ссылаться на vault в плагине. См.: https://github.com/MilkBowl/VaultAPI
ОБРАТИТЕ ВНИМАНИЕ: Vault автоматически регистрирует найденные плагины и подключается к ним, нет необходимости отображать эту информацию в вашем плагине.
Примечание: не забудьте добавить softdepend: [хранилище] и зависеть от: [хранилище], чтобы ваш плагин.в формате YML
Minecraft: Доступ к API (Vault)
Для работы большинства плагинов в Minecraft, особенно на сервере bukkit нужны специальные библиотеки, о которых знает не так много игроков. Одним из самых нужных плагинов можно считать Vault, потому что без него не будет работать ни одно дополнение для поддержания экономики или расширения прав игроков в определенной группе или сервере. Сюда же относятся и различные дополнения, которые предназначены для введения собственного чата. Причем плагины не зависят друг от друга, и могут работать в полноценной мере поодиночке.
Плагины, поддерживаемые Vault
Здесь перечислим основные дополнения, для которых требуется Vault, а также небольшое описание каждого из них, чтобы вы понимали, для чего они нужны. Основная категория – это плагины для расширения прав игроков. Они позволяют настраивать определенные группы людей и назначать им права, в зависимости от используемых дополнений. Очень полезно на серверах, где есть несколько типов игроков, работает вместе с экономическими плагинами. Сюда относятся такие, как Permissions, PEX, GroupManager и другие. Если дополнению требуется Vault, на сайте в разделе «Установка» будет информация об этом.
Далее в списке идет категория экономических плагинов. Все они предназначены для ведения торгов на сервере при помощи встроенной виртуальной валюты. Обычно такое дополнение после установки автоматически создает новую базу, в которой хранит информацию о денежных переводах каждого игрока. Сюда относятся: iConomy, EconXP – позволяет торговать опытом, MineConomy, eWallet и другие. Для экономики разработано множество дополнений, и практически все они похожи между собой функционалом. И последняя группа – это плагины, которые используются для ведения чата. В игре Minecraft есть встроенный чат, однако он не поддерживает русский язык, и очень часто «тормозит».
Дополнения для внедрения чатов позволяют использовать не только общий канал для всех игроков, но и создавать свои собственные, например, внутри фракции или использовать личный для переписки с конкретным игроком.
Установка плагина Vault
Скачайте с сайта Vault, зайдите на свой сервер и перенесите загруженные файлы в папку /plugins, и перезапустите сервер. Обязательно учитывайте версию плагина, и сервера bukkit, который используется на вашем проекте. В настройках дополнения имеется возможность автоматического обновления при наличии новых версий. При желании можно отключить.
Управление всеми вашими секретами с помощью Vault. Обзор и практические примеры.
Aug 12, 2017 · 8 min read
от переводчика: чтобы некоторые термины усвоились более нативно, следует понимать, что Vault переводится с английского как «погреб/подвал». А ещё так обозначались убежища на случай ядерного апокалипсиса, что фигурируют в серии игр Fallout.
Когда Hashicorp выпустила Vault — open-source инструмент для управления секретами (пароли, ключи API и т.д.), мне не терпелось поскорее попробовать его в деле. Управление sensitive информацией, это значительная проблема в мире DevOps. Я повидал и испробовал множество разных подходов за последние годы, и ни один из них не отличается особой простотой или масштабируемостью:
Я считаю, что нет простого и единственного решения, которое одинаково хорошо подходит для единственного разработчика, команды разработчиков, смешанных команд с техническими и нетехническими участниками, для инфраструктуры и приложений. Постоянно приходится смешивать и подгонять различные методы, что само по себе является риском безопасности.
Vault обещает стать решением, которое решит несколько из обозначенных проблем или хотя бы станет хорошим фундаментом для такого.
Приступая к работе с Vault
Vault написан на Go и распространяется как статично собраный бинарник — это отличный вариант, чтобы протестировать всё прямо на локальной машине.
Мелкое неудобство, которые вы сразу можете заметить — проект не имеет готовых deb/rpm файлов или официальных репозиториев. Это делает несколько затратным процесс развёртывания Vault в Проде — придётся искать/писать/поддерживать собственные init скрипты и скрипты организующие CAPS. Как вариант, вы можете развернуть Vault в Docker контейнере или через Suprvisord.
Как только скачан бинарник, вы сразу же можете исполнять команды без какого-либо дополнительного конфигурирования. Вот так выглядит “hello world” в Vault. Чуть ниже мы сохраним ключ API от Digital Ocean и затем извлечём это значение.
Чтобы получить ключ API от DigitalOcean из ваших приложений, вам следует сделать что-то вроде такого:
В ваших приложениях можно завернуть эту логику в функцию:
Концепции Vault
Sealing (Запечатывание)/Unsealing (Распечатывание) Vault
Информация, которую вы храните в Vault, защищается мастер-ключом. Vault использует его, чтобы кодировать/декодировать секреты. Мастер-ключ сам по себе недоступен и реконструируется каждый раз, когда вы запускаете/перезапускаете Vault.
Чтобы всё работало надёжно, Vault использует алгоритм Shamir’s Secret Sharing (Схема разделения секрета Шамира). Мастер-ключ по-умолчанию разделяется на 5 ключей — это называется number of shares (число сторон). Для реконструкции мастер-ключа вам понадобится предоставить любые 3 из 5 ключей — это называется threshold (порог). Число сторон и порог полностью кастомизируемые значения в зависимости от имеющихся потребностей. Это отлично объясняется в официальной документации и вот в этой статье принцип работы алгоритма раскрывается ещё полнее — с видео и примерами кода.
Распечатывание — важная часть безопасности, заложенной в Vault и об этом стоит помнить, применяя решение в Проде: каждый раз, когда Vault остановится или перезапустится, потребуется проводить процедуру распечатывания.
Авторизация и Tokens (Токены)
В Vault версии 0.4, которую я тестирую (в момент написания перевода доступна уже версия 0.8.0 — прим. переводчика), вы не можете вывести список токенов после их создания. Такая возможность описана в roadmap следующих релизов, но пока функционала нет, придётся вести учёт в стороннем приложении.
от переводчика: быстрый поиск в google о том, был ли этот функционал создан за прошедшее время, привёл меня к обсуждению в официальной Google Group. Вкратце — возможность list tokens может раскрыть важную информацию о секретах и доступах; это небезопасно – реализоваться не будет.
Важные моменты, которые следует помнить про Авторизацию и Токены.
Каждый токен может быть отозван и иметь разные уровни доступа, что контролируется через Policies (Политики). Политики в Vault, это ACL (Access Control List).
Policies (Политики)
Политики в Vault работают как chown/users в Unix — у вас есть пользователь root с доступом ко всему и отдельные пользователи с доступом только к определённому пути.
Backends (Бэкенд)
Каждый бэкенд служит разным целям:
Установка Vault
Для развёртывания Vault в Проде, вам понадобится init скрипт, который в комплект не входит. Можно написать свой, упаковать Vault в Docker контейнер (самый простой вариант) или демонизировать его с помощью Supervisord.
Следующий этап — выбор хранилища: места, где Vault будет хранить ваши sensitive данные. Можно использовать файлы, S3, MySQL, Consul и т.д.
Лично я нахожу S3 сбалансированным решением между простотой использования и надёжностью. В Vault версии 0.4 вы не можете вывести список секретов, но сможете проверить их через Amazon Console.
Vault использует TLS сертификат для защиты TCP сокета, на котором исполняется. Вам придётся сгенерировать один и в документации не поясняется, как это сделать. Docker использует схожий механизм безопасности, так что его документация может стать референсом.
Вариантом попроще для охраны вашего экземпляра Vault может стать фронтенд через nginx/apache. К примеру, вы можете настроить basic auth или разрешить доступ только с определённых IP.
Моё впечатление от Vault
Я недавно документировал мой опыт работы с Terraform, другим проектом Hashicorp, который я часто использую. Опыт работы с Vault был очень похож — действительно уникальный и стоящий проект, однозначно заслуживающий добавления к инструментарию DevOps.
Из минусов — крутая кривая обучения, нехватка документации, мало описанных примеров. Есть вероятность, что решать задачи/проблемы придётся в google groups, stackoverflow и т.д., что может отнимать много времени.
P.S.: Если вам понравилась эта статья — нажмите зеленое сердечко. Это много значит для меня. Спасибо!
Нашли ошибку? Воспользуйтесь функцией Private notes: выделяете текст с ошибкой, нажимаете на символ замка в появившемся дудле и оставляете свой комментарий. Спасибо!
Идею дизайна для поста с переводом украл у Workafrolic (±∞), спасибо!
Плагин Vault
Плагин Vault — это API разрешений, чата и экономики, позволяющий подключать подключаемые модули к этим системам без необходимости подключать или зависеть от каждого отдельного подключаемого модуля. Он возник из-за отвращения к тому, как работают и Реестр, и к текущему API разрешений, а также к их отсутствию функций или слишком сложным реализациям. Vault пытается решить эти проблемы за счет интуитивного понимания и предоставления плагинов поддержки для любой системы, которую они могут использовать.
проверка обновления
включает / выключает проверку обновлений
Разрешения:
vault.admin
позволяет получить доступ к информации о хранилище и командам преобразования
по умолчанию OP
vault.update
Любой, у кого есть это разрешение, будет уведомлен об устаревании Vault.
по умолчанию OP
значение false в permissions.yml отключит сообщения проверки версии для консоли
Vault в настоящее время поддерживает:
Уникальный идентификатор
Серверная версия Java
Находится ли сервер в автономном или онлайн-режиме
Версия плагина
Версия сервера
Версия ОС / название и архитектура
количество ядер для процессора
количество игроков онлайн
Метрическая версия
Какой крюк чата, экономики и разрешений используется.