Запуск Продукты Bitnami Документацияimaxe CLI Блог Контакты
imaxe secrets секреты v1.0.0

Локальные секреты, безопасные по умолчанию

Генерирует, читает и ротирует секреты инстанса (пароли, парольные фразы, ключи) с помощью CSPRNG и прав 0600. Идемпотентно на серийных AMI: generate создаёт секрет только если его ещё нет, а get даёт чистый вывод для pipe.

$ imaxe secrets generate mariadb --len 32 --format password
Версия
v1.0.0
Подкоманды
4
Конфиг
/etc/imaxe/secrets.yml
Требуется root
да
Права
0600

Что делает этот модуль #

Почти любому сервису на вашем инстансе нужен секрет: пароль к базе данных, парольная фраза для инструмента контроля целостности, ключ API… Хранить их вручную — или, что ещё хуже, оставлять значения по умолчанию — один из самых распространённых способов довести машину до компрометации.

Модуль secrets берёт на себя этот жизненный цикл локально: генерирует каждый секрет криптографически стойким генератором (CSPRNG), сохраняет его с правами 0600 (читать может только root), возвращает его с чистым выводом, готовым для передачи по pipe, и ротирует его, когда это нужно. Всё организовано по доменам (например, mariadb или tripwire), и каждый домен может иметь несколько полей.

Безопасно по умолчанию на серийных AMI

generate идемпотентен: если секрет домена уже существует, он его не трогает. Так один и тот же образ может создавать свои секреты при первом запуске каждого инстанса, не допуская, чтобы две машины разделяли один и тот же пароль. Значения никогда не записываются в лог и не показываются в list.

Краткое руководствопошаговые задачи

Типовые задачи #

Выберите, что хотите сделать. В каждом рецепте команда уже написана — просто замените домен на свой и нажмите Копировать.

1

Сгенерировать секрет для сервиса

Создаёт стойкий пароль для домена, только если его ещё нет.

Подключитесь по SSH к своему серверу под пользователем ubuntu.

Сгенерируйте секрет домена mariadb. Поскольку команда идемпотентна, вы можете запускать её сколько угодно раз без риска перезаписи:

терминал
$ sudo imaxe secrets generate mariadb

Нужна длинная парольная фраза для другого инструмента и в конкретном поле? Настройте --format, --len и --field:

терминал
$ sudo imaxe secrets generate tripwire --field local.passphrase --format passphrase --len 40
Секрет сохранён с правами 0600. Если он уже существовал, он не изменён — команда всё равно завершается успешно.
2

Прочитать секрет для использования

Получите значение в чистом виде, готовое для передачи в другую команду.

get выводит только значение, без украшений и лишних переносов, чтобы вы могли передать его другому процессу по pipe:

терминал
$ sudo imaxe secrets get mariadb

Секрет хранится в конкретном поле домена? Укажите его через --field:

терминал
$ sudo imaxe secrets get tripwire --field local.passphrase
Вывод чистый: вы можете написать PASS="$(sudo imaxe secrets get mariadb)" и использовать его прямо в своём скрипте.
3

Ротировать секрет

Заменяет значение на новое и помечает домен как ротированный.

Сгенерируйте новое значение для домена. В отличие от generate, команда rotate всё же заменяет существующий секрет:

терминал
$ sudo imaxe secrets rotate mariadb
Домен помечен как ротированный (вы увидите дату в list). Не забудьте обновить сервис, использующий этот секрет, новым значением из get.
4

Посмотреть, какие домены существуют

Запросите метаданные, не раскрывая ни одного значения.

Выводит список доменов с их метаданными (когда созданы и когда ротированы). Сам секрет никогда не показывается:

терминал
$ sudo imaxe secrets list

Нужно для скрипта или автоматической проверки? Запросите вывод в формате JSON:

терминал
$ sudo imaxe secrets list --json
Вы одним взглядом видите, какими секретами управляет инстанс и какие стоит ротировать, не раскрывая ни одного значения на экране или в логе.
Следите за тем, куда попадает значение

Секрет читается только root, пока он лежит на диске. Как только вы читаете его через get, он попадает в ваш терминал и вашу оболочку: не оставляйте его в истории (history), в лишних экспортированных переменных окружения или в логах. Предпочитайте точечные подстановки команд вроде "$(sudo imaxe secrets get mariadb)".

Справочник CLIкоманды, флаги и файлы

Синопсис #

использование
imaxe secrets <subcomando> [<dominio>] [--field CLAVE] [flags]

Все подкоманды требуют привилегий root (используйте sudo), потому что они читают и пишут файлы 0600 в /etc/imaxe/. Добавьте --json к list, чтобы получить машиночитаемый вывод, пригодный для скриптинга. Помните: get выдаёт значение в чистом виде, без оформления, готовым для pipe.

Подкоманды #

ПодкомандаЧто делаетЗначимые флаги
generateСоздаёт секрет домена, если его нет (идемпотентно, CSPRNG). Без домена генерирует секреты из generate_on_first_boot.--len, --format, --field
getВозвращает значение секрета с чистым выводом, пригодным для pipe.--field
rotateГенерирует новый секрет и помечает домен как ротированный.--field
listВыводит список доменов и метаданные (создан, ротирован). Никогда не показывает значения.--json

Аргументы и флаги #

ФлагТипПо умолчаниюОписание
<dominio>stringДомен секрета (напр. mariadb, tripwire). Обязателен в get и rotate. В generate пусто = домены из generate_on_first_boot.
--fieldstringvalueПоле внутри домена. Позволяет хранить несколько секретов на домен (напр. local.passphrase).
--lenint32В generate: длина секрета в символах.
--formatenumpasswordВ generate: формат значения — password, passphrase или hex.
--jsonboolfalseВ list выдаёт метаданные как структурированный JSON в stdout.

Файлы и пути #

ПутьСодержимое
/etc/imaxe/secrets.ymlКонфигурация модуля: значения по умолчанию (length, format), домены и список generate_on_first_boot. Сохраняется с правами 0600.

Пример secrets.yml:

/etc/imaxe/secrets.yml
defaults:
  length: 32
  format: password
domains: {}
generate_on_first_boot:
  - mariadb
  - tripwire

С такой конфигурацией sudo imaxe secrets generate без домена при первом запуске создаёт секреты mariadb и tripwire с длиной и форматом по умолчанию.

Коды возврата и логи #

Каждый запуск возвращает код, который можно проверить через echo $? — удобно для сцепления в скриптах:

0OKОперация завершена (включая идемпотентный случай без изменений).
1ERRОбщая неклассифицированная ошибка. Проверьте права и файл конфигурации.
2USAGEНедопустимые или отсутствующие аргументы (напр. get без домена).
3NOTFOUNDЗапрошенный домен или поле не существует.

Типичное использование в скрипте с учётом чистого вывода get:

терминал
$ sudo imaxe secrets generate mariadb \
  && sudo imaxe secrets get mariadb | some-tool --stdin-password \
  || echo "falló con código $?"

Устранение неполадок #

СимптомВероятная причинаРешение
Выдаёт NOTFOUND (код 3)Домен или --field ещё не сгенерированы.Сначала создайте его через secrets generate <dominio> (и тот же --field).
Выдаёт USAGE (код 2)get или rotate запущены без указания домена.Передайте домен как аргумент; он обязателен в этих подкомандах.
generate не меняет значениеСекрет уже существовал: generate идемпотентен по замыслу.Если нужно новое значение, используйте secrets rotate <dominio>.
Permission denied при чтенииФайл имеет права 0600, а вы запустили без привилегий.Выполните команду с sudo; доступ к секрету есть только у root.

Застряли с модулем Секреты?

Напишите нам, приложив вывод «imaxe <module> status --json», и мы быстро ответим.

Связаться с поддержкой