Установка и настройка hashicorp vault сервера на ubuntu
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 server -dev ( -dev указывает, что мы должны запускать сервер разработки, а не рабочий сервер):
Как видите, на экран выводится много данных, с которыми вы можете поиграть. Прежде всего следует отметить, что сервер разработки по умолчанию не запускается как демон (и в целях тестирования, никогда не должен запускаться как демон). Следовательно, если вы хотите взаимодействовать с сервером, вы должны сначала открыть второе окно терминала и экспортировать предоставленную переменную среды VAULT_ADDR, чтобы команда Vault хранилища знала, с каким сервером она должна взаимодействовать.
Также важно отметить значения Unseal Key и Root Token. Хотя мы коснемся того, что делать с Root Token в следующем разделе, понимание запечатывания / распечатывания Vault имеет решающее значение для правильного развертывания Vault в производственной среде.
Расшифровка и аутентификация
В производственной среде сервер Vault запускается в закрытом состоянии. Это означает, что Vault знает, где находятся данные, но не знает, как их расшифровать. На сервере разработки Vault по умолчанию не запечатан (unsealed). Однако, если вы решите запечатать его, вы получите ключ распечатки (Unseal Key), чтобы распечатать (unseal) его. Незапечатанный Vault остается в этом состоянии до тех пор, пока оно не будет повторно запечатано или сам сервер не будет перезапущен.
При первом запуске производственного сервера Vault важно его инициализировать. Этот процесс сгенерирует ключи шифрования и начальный корневой токен, и его можно будет запустить только с новыми хранилищами без каких-либо данных:
Когда сервер запущен, следующее, что нам нужно сделать, это войти в него. Это можно сделать с помощью команды vault login , которая запросит токен аутентификации. При первоначальной настройке вы можете пройти аутентификацию с помощью Root Token (см. Выше). Однако в производственной среде базовые методы аутентификации можно изменить, чтобы обеспечить более точный контроль над тем, кто имеет доступ и почему:
Хранение секретов
В то время как Vault HashiCorp можно использовать для безопасного хранения практически любых данных, наиболее распространенным вариантом использования Vault является хранилище ключей и значений для секретов приложений. После проверки подлинности хранение секретов становится невероятно простым благодаря команде vault kv put :
Чтобы немного разобрать приведенную выше команду и ответ, мы создали новый секрет с именем foo в пространстве имен secret со значением bar=baz , ответ дает нам некоторые базовые метаданные о нашем новом секрете. Хотя ключи created_time , deletion_time и destroyed не требуют пояснений, вам следует обратить особое внимание на ключ version , потому что это подразумевает, что секреты могут быть версированы.
Например, давайте посмотрим, что произойдет, если мы введем новое значение для того же секрета:
Видите, как был увеличен ключ метаданных версии? Это означает, что наше исходное значение должно поддерживаться в дополнение к новым значениям, что обеспечивает отличный журнал аудита того, какие секреты были изменены и когда.
Извлечение секретов
Хранение секретов — это только половина дела. Другая половина — извлекать эти секреты. В нашем примере выше давайте сначала посмотрим, как получить весь список секретов:
Как видите, хотя технически мы помещаем два секрета, отслеживается только один ключ, потому что эти два секрета на самом деле являются всего лишь двумя версиями одного секрета. Чтобы получить его, выполните команду vault kv get с секретным пространством имен и ключом:
По умолчанию Vault будет извлекать самую последнюю версию секрета, но если мы хотим получить предыдущую версию, можно использовать директиву -version :
Ценность секретов с управлением версиями невероятна, поскольку они позволяют внутренним службам привязаться к различным секретным версиям, что дает возможность постепенно развиваться, выпускать (release) и откатывать изменения приложений, не опасаясь потери важных данных.
Удаление секретов
Несмотря на преимущества контроля секретами, нам может понадобится фактическое удаление секрета (или его версии). Это можно сделать двумя способами, в зависимости от того, насколько «удаленным» вы хотите, чтобы секрет был: удалить delete и уничтожить destroy . Чтобы проиллюстрировать это, давайте сначала рассмотрим удаление версии нашего секрета foo :
Это помечает данные как удаленные ( 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 Server на Ubuntu 18.04 / Debian 9 ?,
- Как установить Vault Server на CentOS 7 ?,
- Как установить Hashicorp Vault на Fedora ?.
Секретом может быть пароль, ключ API, сертификат и многое другое.
Vault имеет веб-интерфейс пользователя, который вы можете использовать для взаимодействия с Vault.
Из пользовательского интерфейса вы можете легко создавать, обновлять, считывать и удалять секреты, аутентифицировать, распечатывать и многое другое.
Особенности Vault
Ниже приведены основные характеристики Vault.
- Безопасное секретное хранилище: по умолчанию Vault шифрует секреты перед записью их в постоянное хранилище.
- Поддержка динамических секретов: Vault может генерировать секреты по требованию и отзывать их после истечения срока аренды.
- Лизинг и обновление: все секреты в Vault связаны с арендой. Секрет автоматически аннулируется в конце срока аренды. Обновление возможно через встроенные API обновления.
- Отзыв секретов: Vault может отозвать не только отдельные секреты, но и дерево секретов, например, все секреты, прочитанные конкретным пользователем, или все секреты определенного типа.
Установите Vault в Ubuntu / Debian / CentOS / Fedora
Vault написан на Go, и бинарные пакеты доступны для основных дистрибутивов Unix и Linux.
Извлеките загруженный архив.
Проверка версии должна совпадать с загруженной.
Включить автозаполнение команды.
Настройка службы Vault systemd
После установки Vault давайте настроим службу systemd для управления службой.
Начните с создания уникального непривилегированного системного пользователя для запуска Vault.
Создайте каталоги данных Vault.
Затем создайте пользователя с именем vault .
Создайте файл службы Vault в /etc/systemd/system/vault.service.
Создайте конфиг Vault /etc/vault/config.hcl
Добавьте основные параметры конфигурации Vault в файл /etc/vault/config.hcl.
Вы также можете использовать Consul Storage, но сначала вам нужно установить Consul.
Конфигурация для бэкэнда Consul выглядит примерно так:
Запустите и включите службу vault для запуска при загрузке системы.
Проверьте статус сервиса, он должен показывать running.
Инициализировать сервер vault
Экспортируйте переменную среды VAULT_ADDR перед инициализацией сервера Vault.
Замените 127.0.0.1 на IP-адрес сервера vault
Начните инициализацию с параметрами по умолчанию, выполнив команду ниже:
Вставьте ваши “Unseal Keys” по одному в хранилище Unseal.
Вы можете получить ключи на /etc/vault/init.file.
Как только вы «откроете» Vault, используйте Initial Root Token, чтобы войти в Vault.
Вы должны увидеть веб-панель Vault на следующей странице.
Вы также можете просмотреть статус Vault из CLI.
Настройка ролей и политик Vault
Экспортируйте свой корневой токен Vault:
Замените «s.BOKlKvEAxyn5OS0LvfhzvBur» на ваш первоначальный корневой токен, хранящийся в файле /etc/vault/init.file.
Затем включите подходящий метод проверки подлинности, который позволяет компьютерам или приложениям проходить проверку подлинности с помощью ролей, определенных в Vault.
Та же команда может использоваться для других методов аутентификации, например,
Перечислите все методы аутентификации, используя команду:
Другие методы аутентификации также могут быть включены из веб-интерфейса.
Политиками ACL можно управлять в разделе «Policies» веб-консоли.
Напишите и получите секреты
Теперь, когда мы установили и настроили наш сервер хранилища, давайте напишем и получим секреты в хранилище.
Мы используем Vault KV, чтобы писать секреты.
Получить секретный путь движка:
Напишите секрет вашего движка kv.
Вы даже можете использовать однострочную команду для записи нескольких данных.
Для чего нужен Vault:
Установка Vault в CentOS/Fedora/RedHat
Если у вас еще используется 32-битная ОС, то вы можете использовать следующую ссылку чтобы скачать ПО:
Если у вас используется 64-битная ОС, то вы можете использовать следующую ссылку чтобы скачать ПО:
Если у вас используется ARM, то вы можете использовать следующую ссылку чтобы скачать ПО:
Если у вас используется ARM64, то вы можете использовать следующую ссылку чтобы скачать ПО:
PS: На момент написания статьи, я использовал самую новую версию данной утилиты. Данный продукт довольно быстро развиваеться и за ним нужно следить и скачивать самую новую версию (если есть необходимость). На официальном сайте можно скачать актуальную версию.
Установка Vault в Debian/Ubuntu
Если у вас еще используется 32-битная ОС, то вы можете использовать следующую ссылку чтобы скачать ПО:
Если у вас используется 64-битная ОС, то вы можете использовать следующую ссылку чтобы скачать ПО:
Если у вас используется ARM, то вы можете использовать следующую ссылку чтобы скачать ПО:
Если у вас используется ARM64, то вы можете использовать следующую ссылку чтобы скачать ПО:
PS: На момент написания статьи, я использовал самую новую версию данной утилиты. Данный продукт довольно быстро развиваеться и за ним нужно следить и скачивать самую новую версию (если есть необходимость). На официальном сайте можно скачать актуальную версию.
Установка Vault в Mac OS X
Для скачивания ПО, можно использовать следующу команду:
PS: На момент написания статьи, я использовал самую новую версию данной утилиты. Данный продукт довольно быстро развиваеться и за ним нужно следить и скачивать самую новую версию (если есть необходимость). На официальном сайте можно скачать актуальную версию.
Установка Vault в FreeBSD
Если у вас еще используется 32-битная ОС, то вы можете использовать следующую ссылку чтобы скачать ПО:
Если у вас используется 64-битная ОС, то вы можете использовать следующую ссылку чтобы скачать ПО:
Если у вас используется ARM, то вы можете использовать следующую ссылку чтобы скачать ПО:
PS: На момент написания статьи, я использовал самую новую версию данной утилиты. Данный продукт довольно быстро развиваеться и за ним нужно следить и скачивать самую новую версию (если есть необходимость). На официальном сайте можно скачать актуальную версию.
Установка Vault в OpenBSD
Если у вас еще используется 32-битная ОС, то вы можете использовать следующую ссылку чтобы скачать ПО:
Если у вас используется 64-битная ОС, то вы можете использовать следующую ссылку чтобы скачать ПО:
PS: На момент написания статьи, я использовал самую новую версию данной утилиты. Данный продукт довольно быстро развиваеться и за ним нужно следить и скачивать самую новую версию (если есть необходимость). На официальном сайте можно скачать актуальную версию.
Установка Vault в Solaris
Для скачивания ПО, можно использовать следующу команду:
PS: На момент написания статьи, я использовал самую новую версию данной утилиты. Данный продукт довольно быстро развиваеться и за ним нужно следить и скачивать самую новую версию (если есть необходимость). На официальном сайте можно скачать актуальную версию.
Установка Vault для других Unix/Linux ОС
Можно попробовать скомпилировать данное ПО. Я работу не проверял, но разработчики выкладуют исходный код на гитхабе и его можно попробовать заюзать.
И дальше следовать инструкциям.
Для установки Vault, я написал скрипт:
Который имеет следующий код:
Проверялось на Debian 8, CentOS 6/7 и на Mac OS X.
Использование Vault в Unix/Linux
Установка прошла, vault имеется в системе. Настройку я не выполнял, т.к у меня только первое знакомство с данной технологией.
Создание secret-а в Vault
Давайте создадим перый секрет:
Создадим еще один:
Можно писать в один и тот же секрет, одно и тоже:
Более подробно опишу позже или в другой раз.
Получение secret-а в Vault
Как и следовало ожидать, секреты можно получить с помощью:
И мой 2-й секрет:
Если планируете юзать скрипты, то стоит заюзать jq утилиту, например:
Или вот еще пример:
Чтобы понять работу, стоит убрать поля и выполнить:
При поддержке поля, вы также можете получить его напрямую:
Удаление secret-а в Vault
Проверим что получилось:
С вывода видно что пропали ключ\значение.
Создание/Включение произвольного Secrets Engines в Vault
Раньше я показывал, как читать и писать произвольные секреты в Vault. Возможно, вы заметили, что все запросы начинаются с secret/. Попробуйте использовать другой префикс и Vault вернет ошибку:
По умолчанию, vault разрешен secrets engine с kv типом и расположеном по secret/ пути. Именно kv secrets engine читает/пишет необработанные данные (raw data) в бэкенд сторедж. Vault поддерживает множество других секретов (кроме kv), и эта функция делает Vault гибким и уникальным.
Чтобы начать работу с secrets engine, необходимо включить другой экземпляр kv по другому пути. Подобно файловой системе, Vault может включить механизм секретов на разным путях. Каждый путь полностью изолирован и не может разговидить\слушать с другими путями.
Чтобы включить secrets engine выполните:
Чтобы проверить что у нас вышло, выполните:
Как видно с вывода, my_kv_path создался и его можно использовать.
Можно добавить дескрипшен\описание создаваемого пути, например:
Для всех используемых параметров, вызовете хелп:
Давайте что-то запишем, прочитаем и запием некоторые данные в новый движок. Вот несколько идей для начала:
Создадим еще пример:
Другая вариация создания секрета:
Смотрим что вышло, выполняем команду:
Давайте создадим еще ключ-значение для созданного энжина:
И дальше аналогичным способом.
Удаление выключение произвольного Secrets Engines в Vault
Создали все это добро, но если нужно удалить или выключить такой сикрет-энжин, то легко это можно сделать.
Чтобы выключить secrets engine выполните:
Когда secrets engine больше не нужен, его можно отключить. Когда он отключен, все секреты аннулируются, и соответствующие данные и конфигурация Vault удаляются. Если по какой-либо причине Vault не может удалить данные, операция отключения завершится с ошибкой. Если это произойдет, энжин останется включенным и доступным, но запрос вернет ошибку.
Динамические секреты (Dynamic Secrets) в Vault
В отличие от kv секретов, примеры показывал выше, динамические секреты генерируются при их доступе. Такие секреты, не существуют до тех пор, пока они не будут прочитаны, поэтому нет риска, что кто-то украдет их. Поскольку у хранилища есть встроенные механизмы аннулирования, динамические секреты могут быть отменены сразу после использования, сводя к минимуму время, в течение которого существовал секрет.
Возьму пример, но для этого стоит создать Secrets Engine:
Для этого кейса, механизм AWS секретов генерирует динамические учетные данные доступа для AWS по требованию.
можно восспользоватся помощью:
Для конкретного пути можно использовать:
И так, запустим следующую команду:
PS: Не пробуйте даже юзать мои креды, т.к я создал их только для этого примера.
Создаем AWS роль, например:
Сейчас, попробуем получить креды с созданной роли:
Или, можно создать полиси с использованием AWS policy ARN:
PS: Создаем файл policy.json и в него прописывем:
Ну и получим данные:
Чтобы перегенерировать данные и указать TTL, заюзайте:
Отменить секрет (Revoke the Secret) можно следующим образом:
Аутентификация в Vault
Создадим новый токен:
По умолчанию это создаст дочерний токен вашего текущего токена, который наследует все те же политики. Концепция «child» (ребенок) здесь важна: у токенов всегда есть родительский элемент, и когда этот родительский токен отменяется, дочерние токены также могут быть отменены за одну операцию.
После создания токена вы можете отменить его (сделать revoke):
Я нашел в системе (записал созданный токен при установке vault-а) и с помощью него, я могу выполнить login (вход):
На практике вы не должны использовать команду создания токена для генерации Vault токенов. Вместо этого должны заюзать аутентификацию в Vault с использованием любых настроенных методов (например GitHub, LDAP, AppRole. Для устаревших приложений, которые не могут генерировать свой собственный токен, вы можете создать токен заранее.
Vault поддерживает множество методов auth, но их необходимо активировать перед использованием. В качестве примера метода аутентификации я возьму сервис GitHub. Включаем его:
PS: auth-методы по умолчанию используют свой TYPE как PATH, поэтому следующие команды эквивалентны:
Я оставлю по умолчанию, т.к меня все это устраивает.
Затем настроим метод auth в GitHub:
Данная команда настраивает хранилище для логина из «linux-notes» организации в GitHub.
Можно вывести все включенные и доступные auth методы с помощью следующей команды:
Чтобы вызвать помощь, введите:
Можно получить помощь для конкретного аута:
Сгенерируйте токен в админ-панели самого github аккаунта. После этого выполним:
Залогинимся с помощью токена:
Можно отменить любой логин из auth метода:
Кроме того, если вы хотите полностью отключить метод auth для gitHub, выполните:
Полиси в Vault
Политики в Vault контролируют доступ пользователя.
Обычные сервера имеют версию 1 для конфигурирования полисов:
Создаем my-policy.hcl файл и впишим в него строки.
Проверка форматирования полисов.
После чего, проверяем форматирование (чтобы убедится что у нас верный формат используемого файла с полисами):
Если имеется файл с полисами, выполните следующую команду чтобы записать ваши policy:
Можно заливать полисы прямо через терминал, например:
Просмотр доступных политик.
Если хотите посмотреть все доступные политики, выполните:
Можно посмотреть что имеется в той или иной политике, например:
И так, создался токен по созданной политике, проверим что будет на ДЕВ-сервере:
Mapping политик в Auth методы
Давайте замапаем политику:
Настройка Vault в Unix/Linux
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
Раздел Access-Auth methods выбираем создать ldap
первый раз просто нажимаем создать параметры все по дефолту, потом вобьем правильные
Так же настроим поиск по группам
Все шаги ниже, подразумевают, что вы подключились к vault используя клиент vault, как подключиться ниже
Подключение
Укажем адрес подключения нашего vault и убедимся, что корректно подключились
Создание secret engine
создавать можно как через gui так и через консоль, УЗ которой создается, должна обладать соответствующими правами, в примере ниже я создаем KV хранилище с именем examplestorage
Создание секрета
Правило именовнаия и создания секрета тут Инструкция 0001
Пример создания тестового секрета для ансибл, роли pg_install, перменной pg_root_pass имеющей пароль root123
Выдача доступа к SecretEngine строится по логике
- Создаем политику и определяем уровни доступ
- Подключаем пользователя или группу к политике
Проверить текущие политики
проверить, что входит в политику с именем debug-policy01
Создание политики
На мой взгляд, удобнее политику создавать через GUI, чем через консоль и файл. Пример политики
Подключение политики к пользователю
ВАЖНО: если мы хотим назначить сразу несколько политик, надо их все перечислить через запятую, иначе my-policy перезатрет все остальные политики
Подключение политики к LDAP группе
Узнать какие политики назначены на пользователя
например пользователю vasy, который входит по логину и паролю
Vault – это инструмент с открытым исходным кодом, который обеспечивает безопасное и надежное хранение и распространение конфиденциальных данных (ключей API, токенов доступа и паролей). Программное обеспечение типа Vault может иметь решающее значение при развертывании приложений, требующих использования конфиденциальных данных.
В этом мануале вы:
- Установите Vault и настроите его как системный сервис.
- Инициализируете зашифрованное хранилище данных на диске.
- Научитесь безопасно хранить и извлекать конфиденциальные значения по TLS.
При помощи дополнительных политик вы сможете использовать Vault для безопасного управления конфиденциальными данными различных приложений и инструментов.
Прежде чем начать работу с конфиденциальной информацией в производственной среде, следует почитать о наилучших методах развертывания хранилища. Например, руководство по развертыванию Vault расскажет много полезного.
Требования
1: Установка Vault
HashiCorp предоставляет Vault как единый бинарный файл, поэтому можно загрузить и установить исполняемый файл Vault вручную.
Сначала загрузите сжатый ZIP-архив Vault для 64-битной Linux. Вы можете найти ссылку на последнюю версию (0.9.5 на момент написания) на странице загрузки Vault.
Затем загрузите контрольную сумму, чтобы проверить загрузку:
Затем проверьте целостность zip-архива. Команда подтвердит, что содержимое zip-архива соответствует версии 0.9.5 Vault от Hashicorp.
grep linux_amd64 vault_*_SHA256SUMS | sha256sum -c -
Каждая строка в файле SHA256SUMS имеет контрольную сумму и имя файла, по одному для каждого архива zip, который предоставляет HashiCorp. Компонент grep вышеприведенной команды выводит строку с контрольной суммой и именем 64-битного двоичного файла Linux, а затем передает (|) эту строку следующей команде. Команда SHA-256 подтверждает, что файл с таким именем в этой строке соответствует контрольной сумме из этой строки.
Команда подтвердит целостность архива:
Если этого не произошло, загрузите архив заново.
После завершения проверки контрольной суммы установите команду unzip, чтобы распаковать архив. Перед этим обновите индекс пакетов.
sudo apt-get update
sudo apt-get install unzip
Затем распакуйте бинарный файл Vault в рабочем каталоге:
unzip vault_*.zip
Archive: vault_0.9.5_linux_amd64.zip
inflating: vault
Переместите исполняемый файл Vault в PATH, чтобы сделать его доступным в оболочке.
sudo cp vault /usr/local/bin/
Наконец, установите флаг Linux в двоичном формате. Это повышает безопасность, позволяя блокировать память без повышения привилегий.
sudo setcap cap_ipc_lock=+ep /usr/local/bin/vault
Теперь у вас есть доступ к команде vault. Запросите версию:
vault --version
Vault v0.7.2 ('d28dd5a018294562dbc9a18c95554d52b5d12390')
Vault успешно установлен на сервер.
2: Создание unit-файла Vault
Systemd – это система инициализации Ubuntu, которая, среди прочего, управляет сервисами системы. Чтобы установить Vault в качестве системного сервиса, необходимо настроить:
- Системного пользователя, с помощью которого будет запускаться демон Vault.
- Каталог данных для хранения информации Vault.
- Конфигурационный файл Vault.
- Unit-файл systemd.
Примечание: В этом мануале используется бэкэнд для хранения зашифрованных данных в локальной файловой системе в /var/lib/vault. Это подходит для локальных или односерверных развертываний, которые не требуют репликации. Другие бэкэнды Vault, такие как бэкэнд Consul, будут хранить зашифрованные секретные данные в распределенном хранилище «ключ-значение».
Создайте пользователя vault:
sudo useradd -r -d /var/lib/vault -s /bin/nologin vault
Здесь в качестве домашнего каталога пользователя используется /var/lib/vault. Он также будет каталогом данных Vault. Также нужно настроить оболочку /bin/nologin для ограничения пользователя и настройки неинтерактивной системной учетной записи.
Передайте права на /var/lib/vault пользователю и группе vault.
sudo install -o vault -g vault -m 750 -d /var/lib/vault
Теперь нужно настроить конфигурационный файл Vault, /etc/vault.hcl. Он нужен для управления различными опциями Vault (например, здесь можно указать, где хранятся зашифрованные секретные данные). Создайте файл.
sudo nano /etc/vault.hcl
Вставьте в файл следующие строки:
backend "file" path = "/var/lib/vault"
>
listener "tcp" tls_disable = 0
tls_cert_file = "/etc/letsencrypt/live/example.com/fullchain.pem"
tls_key_file = "/etc/letsencrypt/live/example.com/privkey.pem"
>
Сохраните и закройте файл, а затем ограничьте доступ к Vault, передав право на чтение пользователю vault.
sudo chown vault:vault /etc/vault.hcl
sudo chmod 640 /etc/vault.hcl
Чтобы система systemd управляла демоном Vault, создайте unit-файл /etc/systemd/system/vault.service.
sudo nano /etc/systemd/system/vault.service
Скопируйте и вставьте в файл следующие строки. Это позволит Vault работать в фоновом режиме в качестве постоянного системного демона.
Полный список параметров unit-файла сервиса является довольно большим. Вот наиболее важные параметры конфигурации, которые следует учитывать в приведенном выше определении:
- ConditionFileNotEmpty подтверждает, что /etc/vault.hcl существует.
- User и Group управляют правами демона Vault.
- ExecStart указывает на исполняемый файл, который вы установили ранее, и определяет, как запустить сервис.
- ExecReload вызывается, когда Vault перезагружает конфигурационный файл (например, при запуске systemctl reload vault).
- [Install] позволяет автоматически запускать сервис во время загрузки, чтобы вам не пришлось этого делать вручную.
Vault нужны права на чтение сертификатов, созданных с помощью Certbot. По умолчанию эти сертификаты и закрытые ключи доступны только пользователю root. Чтобы сделать их доступными для Vault, но не открывать всем, создайте специальную группу pki для доступа к этим файлам, а затем добавьте в нее пользователя vault.
Сохраните и закройте файл.
Создайте группу pki:
sudo groupadd pki
Обновите права доступа к каталогам в /etc/letsencrypt, чтобы группа pki могла прочитать содержимое.
sudo chgrp pki /etc/letsencrypt/
sudo chmod g+rx /etc/letsencrypt/
sudo gpasswd -a vault pki
Теперь для удобства добавьте правило в /etc/hosts, чтобы направлять запросы Vault на localhost.
Теперь можно запустить Vault и инициализировать хранилище конфиденциальных данных.
3: Инициализация Vault
При первом запуске Vault не будет инициализирован – то есть пока что он не будет готов к получению и хранению данных. Бэкэнд, который фактически хранит зашифрованные секретные данные, тоже не инициализирован. Запустите сервис Vault, чтобы инициализировать бэкэнд и запустить Vault.
sudo systemctl start vault
Чтобы убедиться в том, что сервис успешно запустился, введите:
sudo systemctl status vault
Результат этой команды включает несколько фрагментов информации о запущенном сервисе, например, идентификатор процесса и использование ресурсов. Убедитесь, что в выводе есть следующая строка, которая указывает, что сервис работает правильно.
Если сервис не активен, посмотрите на сопровождающие строки логов в конце вывода команды, чтобы понять, в чем проблема.
Убедитесь, что хранилище vault не было инициализировано.
Сервер должен вернуть ошибку 400, что говорит о том, что хранилище не инициализировано
Во время инициализации Vault будет отображать два фрагмента информации, которые не будут доступны в других точках:
- Исходный токен root: эквивалентен правам root на развертывание Vault, что позволяет управлять всеми политиками Vault, монтированием и т. д.
- Ключи разблокировки: используются для вскрытия Vault при запуске демона, что позволяет демону Vault расшифровывать хранилище секретных данных бэкэнда.
При инициализации Vault вы можете выбрать, сколько вам нужно ключей и сколько их нужно в момент вскрытия, чтобы успешно открыть Vault.
Обычно запрашивается три ключа вскрытия, два из которых используется непосредственно в момент вскрытия. Благодаря этому недостаточно взломать один ключ, чтобы вскрыть Vault.
Другими словами, для обеспечения доступности и готовности к использованию сервиса Vault при его запуске потребуется не менее двух ключей для вскрытия. До этого момента файлы с конфиденциальной информацией будут зашифрованными и недоступными.
Инициализируйте Vault с такими параметрами:
vault init -key-shares=3 -key-threshold=2
Сохраните токены для вкрытия и исходный токен root в безопасном месте. Например, можно сохранить один токен вскрытия в диспетчере паролей, второй на USB-накопителе, а третий в GPG-зашифрованном файле.
Теперь вы можете вскрыть хранилище с помощью токенов. Начните с одного ключа.
vault operator unseal
Команда запросит токен:
Key (will be hidden):
После ввода токена команда сообщит, что процесс вскрытия выполняется, но для его завершения требуется еще один токен.
Sealed: true
Key Shares: 3
Key Threshold: 2
Unseal Progress: 1
Unseal Nonce: 3bdc838e-1b74-bc13-1d6f-c772f1694d83
Еще раз запустите команду unseal:
vault operator unseal
Введите второй токен:
Key (will be hidden):
Вывод команды указывает, что процесс вскрытия и завершен успешно.
Seal Type shamir
Sealed false
Total Shares 3
Threshold 2
Version 0.9.5
Cluster Name vault-cluster-5511b3ff
Cluster ID 53522534-8ee1-8aec-86db-e13e4a499dd0
HA Enabled false
Теперь хранилище Vault вскрыто и готово к использованию. Процесс вскрытия необходим после каждой загрузки или перезагрузки Vault.
Тем не менее, вскрытие не является частью обычного взаимодействия с Vault (как, например, чтение и запись значений), которое аутентифицируется токенами. На последнем этапе нужно создать токены доступа и политики для хранения секретных значений.
4: Чтение и запись конфиденциальных данных
Vault предоставляет документацию по нескольким бэкэндам. В данном примере используется бэкэнд generic. Он хранит простые пары «ключ-значение».
Сохраните сгенерированные ранее токены в переменную оболочки.
Для начала запишите значение в путь в Vault.
VAULT_TOKEN=$root_token vault write secret/message value=mypassword
В этой команде префикс secret/ указывает на то, что данные пишутся на общий бэкэнд, смонтированный в пути secret. Ключ value хранится в пути message со значением mypassword. Для этого использовался токен root, который имеет привилегии суперпользователя.
В реальном сценарии вы можете хранить такие значения, как ключи API или пароли, которые используются внешними инструментами. Хотя вы можете снова прочитать секретное значение с помощью токена root, для примера попробуйте создать токен с пониженными привилегиями (с правом только на чтение).
Создайте файл policy.hcl.
Добавьте в файл следующую политику Vault, которая определяет доступ только для чтения к секретному пути в рабочем каталоге:
path "secret/message" capabilities = ["read"] >
Сохраните и закройте файл.
Запишите политику в Vault. Следующая команда создаст политику message-readonly:
VAULT_TOKEN=$root_token vault policy write message-readonly policy.hcl
Создайте токен с объявленными в политике правами.
VAULT_TOKEN=$root_token vault token create -policy="message-readonly"
Key Value
--- -----
token your_token_value
token_accessor your_token_accessor
token_duration 768h0m0s
token_renewable true
token_policies [default message-readonly]
Сохраните токен в переменную app_token.
Вы можете использовать значение app_token только для доступа к данным, хранящимся в пути secret/message.
VAULT_TOKEN=$app_token vault read secret/message
Key Value
--- -----
refresh_interval 768h0m0s
value mypassword
Вы также можете убедиться, что этот непривилегированный токен не может выполнять других операций, например, просматривать секретные данные в Vault.
Это подтверждает, что менее привилегированный токен приложения не причинит вреда данным или не получит доступ к другим секретным значениям.
Заключение
Теперь вы умеете устанавливать, настраивать и инициализировать хранилище Vault в Ubuntu 16.04. В документации Vault есть информация о дополнительных способах хранения и доступа к секретным данным, а также об альтернативных методах аутентификации.
Инструкции в документации довольно простые. Некоторые изменения, которые следует внести:
Читайте также: