
Облачное управление секретами для разработчиков — никогда не покидайте командную строку ради секретов.
:computer: Never leave your terminal for secrets
:pager: Create easy and clean workflows for working with cloud environments
:mag_right: Scan for secrets and fight secret sprawl
Никогда не покидайте свой терминал, чтобы использовать секреты при разработке, тестировании и сборке приложений.
Вместо собственных скриптов, токенов в файлах .zshrc, видимых EXPORT в вашей истории bash, неуместных файлов .env.production и прочего на вашей рабочей станции — просто используйте teller и подключите его к любому хранилищу секретов, ключей или облачному сервису, который вам нравится (Teller поддерживает Hashicorp Vault, AWS Secrets Manager, Google Secret Manager и многие другие).
Вы можете использовать Teller, чтобы привести в порядок собственное окружение или внедрить его в команде как процесс и лучшую практику.

tellerСкачать бинарный файл Скачайте бинарный файл из релизов
Сборка из исходников Этот способ позволит вам просмотреть исходный код, изучить его и самостоятельно собрать копию.
Это установит бинарный файл локально на вашей машине:
$ cd teller-cli
$ cargo install --path .
Создание новой конфигурации
$ teller new
? Select your secret providers ›
⬚ hashicorp_consul
⬚ aws_secretsmanager
⬚ ssm
⬚ dotenv
⬚ hashicorp
⬚ google_secretmanager
Затем отредактируйте вновь созданный .teller.yml, чтобы задать карты (maps) и ключи, необходимые для ваших провайдеров.
teller.ymlФайл YAML Teller описывает ваши провайдеры, и внутри каждого провайдера находится map, который описывает:
id, который пригодится вам для операций в дальнейшемВот пример файла конфигурации. Обратите внимание, что он также включает шаблонные конструкции — например, получение переменных окружения при загрузке конфигурации:
providers:
hashi_1:
kind: hashicorp
maps:
- id: test-load
path: /{{ get_env(name="TEST_LOAD_1", default="test") }}/users/user1
# if empty, map everything
# == means map to same key name
# otherwise key on left becomes right
# in the future: key_transform: camelize, snake_case for automapping the keys
keys:
GITHUB_TOKEN: ==
mg: FOO_BAR
dot_1:
kind: dotenv
maps:
- id: stg
path: VAR_{{ get_env(name="STAGE", default="development") }}
Теперь вы можете обращаться к этим провайдерам как к hashi_1 или dot_1. По умолчанию Teller получает указанные данные от всех провайдеров.
Вручную экспортируете и настраиваете переменные окружения для запуска процесса с демонстрационной или боевой конфигурацией?
Обжигались на использовании .env.production и его раскрытии прямо в локальном проекте?
Используя teller и файл .teller.yml, который ничего не раскрывает чужим глазам, вы можете работать легко и бесшовно, без какого-либо риска и без необходимости в кавычках:
$ teller run --reset --shell -- node index.js
Эта команда выведет текущие переменные, которые подхватывает teller. Разумеется, от каждой переменной будут показаны только первые 2 буквы.
$ teller show
Зашифровываете секреты прямо в скриптах оболочки и dot-файлах?
В некоторых случаях имеет смысл выполнять eval переменных в текущей оболочке. Например, в вашем .zshrc гораздо разумнее использовать teller, а не хардкодить всё это прямо в сам файл .zshrc.
В этом случае вам нужно добавить следующее:
eval "$(teller sh)"
Устали собирать всевозможные переменные, настраивать их и переживать, что они также появятся в истории вашей оболочки?
Используйте эту однострочную команду отныне:
$ docker run --rm -it --env-file <(teller env) alpine sh
Teller может помочь вам бороться с расползанием секретов и захардкоженными секретами, а также стать лучшим инструментом продуктивности для работы с вашим хранилищем.
Он также может интегрироваться в ваш CI и служить инструментом безопасности shift-left для вашего пайплайна DevSecOps.
Ищите секреты, хранящиеся в вашем хранилище, в своём коде с помощью команды:
$ teller scan
Вы можете запускать его как линтер в вашем CI следующим образом:
run: teller scan --error-if-found
Он прервёт вашу сборку, если что-то найдёт (возвращает код выхода 1).
Вы также можете экспортировать результаты в JSON с помощью --json и сканировать бинарные файлы с помощью -b.
Вы можете использовать teller как инструмент редактирования/затирания по всей вашей инфраструктуре, запускать процессы с затиранием их вывода, а также очищать логи и живые хвосты логов.
Направьте вывод любого процесса, tail или логи в teller, чтобы затирать их в реальном времени:
$ cat some.log | teller redact
Это также должно работать с tail -f:
$ tail -f /var/log/apache.log | teller redact
Наконец, если у вас есть файлы, которые нужно затереть, вы можете сделать и это:
$ teller redact --in dirty.csv --out clean.csv
Если опустить --in, Teller будет читать из stdin, а если опустить --out, Teller выведет результат в stdout.
Вы можете заполнять собственные шаблоны:
$ teller template --in config-templ.t
Формат шаблонов — Tera, который очень похож на Liquid или Handlebars.
Вот пример шаблона:
production_var: {{ key(name="PRINT_NAME")}}
production_mood: {{ key(name="PRINT_MOOD")}}
В тех случаях, когда вы хотите выполнить синхронизацию между провайдерами, вы можете сделать это с помощью teller copy.
Синхронизация по конкретному ключу карты
Вы можете использовать формат <имя провайдера>/<идентификатор карты>, чтобы скопировать карту от одного провайдера к другому:
$ teller copy --from source/dev --to target/prod,<...>
В этом упрощённом примере мы используем следующий файл конфигурации
providers:
dot1:
kind: dotenv
maps:
- id: one
path: one.env
dot2:
kind: dotenv
maps:
- id: two
path: two.env
Это позволит:
По умолчанию копирование обновляет целевую карту (выполняет upsert); если вы хотите заменить значения, используйте --replace.
Провайдеры Teller поддерживают сценарии записи, позволяющие записывать значения в провайдеры.
Помните, что эта возможность по-прежнему опирается на определения в вашем файле teller.yml: