Git & Security: Перестань хранить пароли в plaintext. Знакомство с SOPS
Каждый админ хоть раз писал в скрипте PASSWORD="MySecretPassword123". Это прямая дорога к утечке данных, особенно если скрипт попадёт в Git. Архитектурный подход — хранить конфигурацию и код в Git, а секреты — шифровать.
SOPS (Secrets OPerationS) от Mozilla — элегантное решение этой проблемы. Он не шифрует весь файл, а только значения в нём, оставляя ключи в открытом виде. Это идеально для YAML, JSON, .env и .ini файлов.
Как это работает:
Вы создаёте обычный конфиг, а SOPS шифрует его с помощью PGP, age или облачных KMS (AWS, Azure, GCP). Зашифрованный файл можно смело коммитить в Git.
Практический пример с age (простой и современный инструмент шифрования):
Установка инструментов:
Bash
Генерация ключа:
Bash
Публичный ключ мы будем использовать для шифрования, приватный — для расшифровки.
Создаём файл с секретами config.yaml:
YAML
Шифруем и редактируем:
Создаём в корне проекта файл .sops.yaml с правилами шифрования:
YAML
Теперь команда sops config.yaml откроет файл в вашем $EDITOR, а при сохранении автоматически зашифрует значения.
Результат в config.yaml:
YAML
Файл можно безопасно коммитить в Git.
Как использовать в скрипте?
Bash
Взгляд архитектора:
Это основа GitOps. Конфигурация, включая зашифрованные секреты, является «единственным источником правды». Изменения отслеживаются, а доступ к расшифровке имеют только те, у кого есть приватный ключ (люди или CI/CD системы).
#linux #security #gitops #devops #sops #architect
Каждый админ хоть раз писал в скрипте PASSWORD="MySecretPassword123". Это прямая дорога к утечке данных, особенно если скрипт попадёт в Git. Архитектурный подход — хранить конфигурацию и код в Git, а секреты — шифровать.
SOPS (Secrets OPerationS) от Mozilla — элегантное решение этой проблемы. Он не шифрует весь файл, а только значения в нём, оставляя ключи в открытом виде. Это идеально для YAML, JSON, .env и .ini файлов.
Как это работает:
Вы создаёте обычный конфиг, а SOPS шифрует его с помощью PGP, age или облачных KMS (AWS, Azure, GCP). Зашифрованный файл можно смело коммитить в Git.
Практический пример с age (простой и современный инструмент шифрования):
Установка инструментов:
Bash
# macOS или Linux с Homebrew
brew install sops age
Генерация ключа:
Bash
age-keygen -o key.txt
# public key: age1...
# private key: AGE-SECRET-KEY-1...
Публичный ключ мы будем использовать для шифрования, приватный — для расшифровки.
Создаём файл с секретами config.yaml:
YAML
db_user: "postgres"
db_password: "SuperSecretPassword" # ЭТО БУДЕМ ШИФРОВАТЬ
Шифруем и редактируем:
Создаём в корне проекта файл .sops.yaml с правилами шифрования:
YAML
creation_rules:
- path_regex: .*.yaml$
age: age1... # Ваш публичный ключ
Теперь команда sops config.yaml откроет файл в вашем $EDITOR, а при сохранении автоматически зашифрует значения.
Результат в config.yaml:
YAML
db_user: "postgres"
db_password: "ENC[AES256_GCM,data:...,iv:...,tag:...]"
sops:
# ... метаданные sops
Файл можно безопасно коммитить в Git.
Как использовать в скрипте?
Bash
# Расшифровываем "на лету" и передаём в переменную
DB_CONFIG=$(sops -d config.yaml)
DB_PASSWORD=$(echo "$DB_CONFIG" | yq .db_password) # yq - парсер для yaml
Взгляд архитектора:
Это основа GitOps. Конфигурация, включая зашифрованные секреты, является «единственным источником правды». Изменения отслеживаются, а доступ к расшифровке имеют только те, у кого есть приватный ключ (люди или CI/CD системы).
#linux #security #gitops #devops #sops #architect
👍2