Talm v0.17: встроенное шифрование age для управления секретами
Talm v0.17: встроенное шифрование age для управления секретами
Последний релиз
Talm, менеджера конфигурации для Talos Linux, представляет мощную новую возможность: встроенное шифрование с помощью инструмента шифрования
age. Это улучшение позволяет безопасно хранить конфиденциальные конфигурационные файлы, такие как secrets.yaml, talosconfig и kubeconfig, в Git-репозиториях с соблюдением лучших практик безопасности.

Почему шифрование age?
Управление секретами в Git-репозиториях всегда было непростой задачей. Хотя хранение конфигурационных файлов в системе контроля версий удобно для GitOps-процессов, конфиденциальные данные, такие как API-ключи, сертификаты и учётные данные кластера, никогда не должны попадать в репозиторий в открытом виде. Традиционные решения, такие как git-crypt или внешние системы управления секретами, добавляют сложность и зависимости.
Talm v0.17 решает эту проблему, интегрируя шифрование age непосредственно в рабочий процесс. Age — это современный, простой и безопасный инструмент шифрования файлов, использующий передовую криптографию. Он спроектирован так, чтобы быть:
- Простым: прост в использовании с минимальной настройкой
- Безопасным: использует современные алгоритмы шифрования (X25519, ChaCha20Poly1305)
- Быстрым: эффективное шифрование и расшифровка
- Совместимым: без проблем работает с существующими Git-процессами
SOPS-подобный формат для зашифрованных значений
Talm использует SOPS-подобный формат для зашифрованных значений, что делает его знакомым для пользователей, работавших с Mozilla SOPS. В зашифрованных YAML-файлах шифруются только значения, а ключи остаются читаемыми. Это позволяет легко понять структуру конфигурационных файлов, даже когда они зашифрованы.
Вот пример того, как выглядят зашифрованные значения:
machine:
token: ENC[AGE,data:Tr7o=]
ca:
crt: ENC[AGE,data:VGVzdA==]
Формат ENC[AGE,data:...] чётко указывает, какие значения зашифрованы, при этом структура YAML остаётся неизменной и понятной для человека.
Начало работы с шифрованием
Первоначальная настройка
При первом запуске talm init Talm автоматически генерирует ключ шифрования (talm.key), если он ещё не существует. Этот ключ используется для всех операций шифрования и расшифровки:
talm init -p cozystack
Эта команда:
- Сгенерирует
secrets.yamlс секретами вашего кластера - Создаст
talosconfigдля доступа к кластеру - Сгенерирует
talm.key(если он не существует) для шифрования - Автоматически зашифрует
secrets.yamlвsecrets.encrypted.yaml - Зашифрует
talosconfigвtalosconfig.encrypted - Обновит
.gitignore, чтобы исключить файлы в открытом виде
Формат ключа шифрования
Файл talm.key соответствует стандартному формату age keygen, что делает его совместимым с другими инструментами на основе age:
# created: 2025-01-17T15:18:42+01:00
# public key: age1uqwfv7lq6a23wslgpjqkpj8mnp6dmycwd97wmz4n6grtr7g2853sl0yjdr
AGE-SECRET-KEY-103PEFSPAV83H6GXECWZJ9CXCXJ3YRY64Y5PE75XWY2S97VAR84AQQ678AU
Этот формат включает метаданные о времени создания ключа и публичный ключ, который может использоваться для обмена зашифрованными файлами с участниками команды (хотя эта возможность запланирована на будущие релизы).
Шифрование и расшифровка файлов
Шифрование файлов
Чтобы зашифровать конфиденциальные файлы, используйте флаг --encrypt (или -e):
talm init -e
Эта команда:
- Зашифрует
secrets.yaml→secrets.encrypted.yaml - Зашифрует
talosconfig→talosconfig.encrypted - Зашифрует
kubeconfig→kubeconfig.encrypted(если он существует)
Команда выводит подробную информацию о том, какие файлы шифруются:
Encrypting secrets.yaml -> secrets.encrypted.yaml
Encrypting talosconfig -> talosconfig.encrypted
Encrypting kubeconfig -> kubeconfig.encrypted
Encrypted 3 file(s).
Расшифровка файлов
Чтобы расшифровать зашифрованные файлы обратно в открытый вид, используйте флаг --decrypt (или -d):
talm init -d
Это расшифрует все зашифрованные файлы:
secrets.encrypted.yaml→secrets.yamltalosconfig.encrypted→talosconfigkubeconfig.encrypted→kubeconfig
Идемпотентное шифрование: обновляются только изменённые значения
Одна из самых мощных возможностей шифрования в Talm — его идемпотентное поведение. Когда вы запускаете talm init -e несколько раз, система интеллектуально сравнивает значения в открытом виде с их зашифрованными аналогами и повторно шифрует только те значения, которые действительно изменились.
Это означает:
- Неизменённые значения сохраняют свою существующую зашифрованную форму
- Изменённые значения повторно шифруются с учётом актуального открытого текста
- Новые ключи шифруются автоматически
- Зашифрованный файл изменяется только при необходимости
Такое идемпотентное поведение гарантирует, что:
- Git-диффы остаются минимальными и содержательными
- Вы можете безопасно запускать команды шифрования несколько раз
- Только реальные изменения приводят к обновлениям в системе контроля версий
Автоматическое управление .gitignore
Talm автоматически управляет вашим файлом .gitignore, чтобы конфиденциальные файлы никогда не были случайно закоммичены:
secrets.yaml— секреты в открытом виде (никогда не коммитьте)talosconfig— конфигурация Talos в открытом виде (никогда не коммитьте)kubeconfig— конфигурация Kubernetes в открытом виде (никогда не коммитьте)talm.key— ваш ключ шифрования (никогда не коммитьте)
Зашифрованные версии (*.encrypted.yaml, *.encrypted) предназначены для коммита в ваш репозиторий, поскольку их безопасно хранить в системе контроля версий.
Лучшие практики безопасности
Создавайте резервную копию ключа шифрования
После того как talm init создаст новый talm.key, вы увидите предупреждение о безопасности:
┌──────────────────────────────────────────────────────────────────────────────┐
│ Security Information │
├──────────────────────────────────────────────────────────────────────────────┤
│ │
│ Sensitive files (secrets.yaml, talosconfig, talm.key) have been added to │
│ .gitignore and will not be tracked by git. │
│ │
│ Important: Please make a backup of your talm.key file. │
│ │
│ The talm.key file is required to decrypt secrets.encrypted.yaml. Without it, │
│ you won't be able to decrypt your encrypted secrets. │
│ │
│ Key location: talm.key │
│ │
│ Recommended: Store the backup in a secure location (password manager, │
│ encrypted storage, or other secure backup solution). │
│ │
└──────────────────────────────────────────────────────────────────────────────┘
Всегда создавайте резервную копию файла talm.key! Без него вы не сможете расшифровать свои секреты. Храните его в безопасном месте, например:
- В менеджере паролей
- В зашифрованном хранилище (например, на зашифрованном USB-накопителе)
- В надёжном решении для резервного копирования
Права доступа к файлам
Talm автоматически устанавливает безопасные права доступа к файлам:
secrets.yaml,talosconfigиkubeconfigсоздаются с правамиchmod 600(чтение/запись только для владельца)- Это гарантирует, что только владелец файла может читать эти конфиденциальные файлы
Пример рабочего процесса
Вот типичный рабочий процесс управления секретами с Talm v0.17:
Инициализируйте новый проект:
talm init -p cozystackЭто создаёт все необходимые файлы и автоматически их шифрует.
Внесите изменения в секреты:
# Отредактируйте kubeconfig vim kubeconfigПовторно зашифруйте после изменений:
talm init -eБудут повторно зашифрованы только изменённые значения.
Закоммитьте зашифрованные файлы в Git:
git add secrets.encrypted.yaml talosconfig.encrypted kubeconfig.encrypted git commit -m "Update encrypted secrets"На новой машине расшифруйте файлы:
# Сначала скопируйте talm.key на новую машину! talm init -d
Интеграция с существующими рабочими процессами
Шифрование в Talm без проблем интегрируется с существующими GitOps-процессами:
- CI/CD-конвейеры могут расшифровывать файлы с помощью
talm init -d, если у них есть доступ кtalm.key - Командная работа упрощается: зашифрованными файлами можно обмениваться через Git, а ключ передаётся безопасно по другим каналам
- Журналы аудита сохраняются: все изменения зашифрованных файлов отслеживаются в истории Git
Что дальше?
Возможность шифрования в Talm v0.17 обеспечивает прочную основу для безопасного управления секретами. Будущие релизы могут включать:
- Поддержку нескольких получателей (участники команды смогут расшифровывать своими собственными ключами)
- Интеграцию с аппаратными модулями безопасности (HSM)
- Возможности автоматической ротации ключей
- Интеграцию с внешними системами управления ключами
Заключение
Встроенное шифрование age в Talm v0.17 значительно упрощает управление конфиденциальными конфигурационными файлами в Git-репозиториях с соблюдением лучших практик безопасности. Идемпотентное поведение шифрования, автоматическое управление .gitignore и SOPS-подобный формат создают бесшовный опыт для команд, внедряющих GitOps-процессы с Talos Linux.
Управляете ли вы одним кластером или несколькими окружениями, возможности шифрования Talm помогают поддерживать безопасность, не жертвуя удобством управления конфигурацией в системе контроля версий.
Начало работы
- GitHub: github.com/cozystack/talm
- Документация: см. README для подробных примеров использования
- Сообщество: присоединяйтесь к чату в Telegram, чтобы обсудить Talm и получить помощь
Благодарности
Talm разрабатывается в рамках проекта Cozystack и распространяется под лицензией Apache 2.0. Мы приветствуем вклад и отзывы от сообщества!