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
Ansible: Хватит хранить пароли в Git! Используем ansible-vault
Вы написали гениальный плейбук, но в group_vars/all.yml у вас лежит db_password: "MySuperSecretPassword123". Теперь этот плейбук нельзя безопасно положить в Git.
Ansible Vault — это не отдельный инструмент, это встроенный в Ansible механизм шифрования. Он позволяет шифровать не целые плейбуки, а только файлы с чувствительными данными (например, vars/secrets.yml).
Как это работает (магия в 3 команды):
Создаём зашифрованный файл: Вместо nano vars/secrets.yml вы пишете:
Bash
Ansible попросит вас придумать пароль (vault password) и откроет редактор. Вы вводите свои секреты, сохраняете, и файл на диске оказывается полностью зашифрован.
Редактируем файл:
Bash
Снова вводите пароль, редактируете, сохраняете. Файл остается зашифрованным.
Запускаем плейбук: Ansible сам поймет, что файл зашифрован, и спросит пароль при запуске.
Bash
Взгляд архитектора: Это и есть GitOps в действии. Ваши секреты хранятся вместе с кодом, они версионируются, но остаются в безопасности. Архитектор строит единый источник правды (Single Source of Truth). С ansible-vault ваш Git-репозиторий становится этим источником для всей инфраструктуры, включая пароли и ключи.
#linux #ansible #devops #security #iac #gitops #гайд
Вы написали гениальный плейбук, но в group_vars/all.yml у вас лежит db_password: "MySuperSecretPassword123". Теперь этот плейбук нельзя безопасно положить в Git.
Ansible Vault — это не отдельный инструмент, это встроенный в Ansible механизм шифрования. Он позволяет шифровать не целые плейбуки, а только файлы с чувствительными данными (например, vars/secrets.yml).
Как это работает (магия в 3 команды):
Создаём зашифрованный файл: Вместо nano vars/secrets.yml вы пишете:
Bash
ansible-vault create vars/secrets.yml
Ansible попросит вас придумать пароль (vault password) и откроет редактор. Вы вводите свои секреты, сохраняете, и файл на диске оказывается полностью зашифрован.
Редактируем файл:
Bash
ansible-vault edit vars/secrets.yml
Снова вводите пароль, редактируете, сохраняете. Файл остается зашифрованным.
Запускаем плейбук: Ansible сам поймет, что файл зашифрован, и спросит пароль при запуске.
Bash
# Ansible спросит пароль в консоли
ansible-playbook site.yml
# ...или используем файл с паролем (для CI/CD)
ansible-playbook site.yml --vault-password-file ~/.vault_pass
Взгляд архитектора: Это и есть GitOps в действии. Ваши секреты хранятся вместе с кодом, они версионируются, но остаются в безопасности. Архитектор строит единый источник правды (Single Source of Truth). С ansible-vault ваш Git-репозиторий становится этим источником для всей инфраструктуры, включая пароли и ключи.
#linux #ansible #devops #security #iac #gitops #гайд
Что такое GitOps?
Это не "Git". Это принцип, при котором ваш Git-репозиторий — единственный источник правды.
Как это работает:
1. Инженер: Пушит config.yml в Git.
2. Автоматика (CI/CD): Видит изменение.
3. Система (Kubernetes/Ansible): Приводит инфраструктуру в соответствие с Git.
Взгляд архитектора: Вы больше не "заходите на сервер" и не правите конфиги вручную. Вы декларативно описываете желаемое состояние, а система сама его достигает.
#architect #devops #gitops #git #iac #sre
Это не "Git". Это принцип, при котором ваш Git-репозиторий — единственный источник правды.
Как это работает:
1. Инженер: Пушит config.yml в Git.
2. Автоматика (CI/CD): Видит изменение.
3. Система (Kubernetes/Ansible): Приводит инфраструктуру в соответствие с Git.
Взгляд архитектора: Вы больше не "заходите на сервер" и не правите конфиги вручную. Вы декларативно описываете желаемое состояние, а система сама его достигает.
#architect #devops #gitops #git #iac #sre
Архитектура: "Docs as Code". Почему ваша документация — это ваш главный актив
Реакция админа: "У меня нет времени писать документацию".
Мысль архитектора: "У меня нет времени НЕ писать документацию".
Документация — это не "скучные Word-файлы".
В современном IT, документация — это код.
Что такое "Docs as Code":
Формат: Вы пишете в Markdown (.md). Это простой, чистый текст.
Хранилище: Вы храните .md файлы в Git-репозитории (на том же Gitea, что мы ставили) вместе с вашими скриптами и IaC-конфигами.
Инструменты: Вы используете MkDocs, Hugo или просто VS Code для рендеринга.
Почему это меняет всё:
Версионность: Ваша документация имеет историю. Вы видите, кто и когда изменил IP-адрес сервера в "runbook".
Runbooks: Вы не "чините по памяти". Вы открываете restore_db.md и копируете проверенные команды.
Схемы как Код: Вы рисуете диаграммы с помощью PlantUML или Mermaid — прямо текстом!
Масштабирование: Вы можете "форкнуть" документацию, предложить изменения через Pull Request.
Взгляд архитектора: Если вас "завтра уволят", а инфраструктура "умрет" через неделю, потому что никто не знает, "как оно работает" — вы были плохим архитектором. Документация — это ваш главный инструмент масштабирования вашего собственного мозга.
#architect #devops #gitops #documentation #sre #стратегия #гайд
Реакция админа: "У меня нет времени писать документацию".
Мысль архитектора: "У меня нет времени НЕ писать документацию".
Документация — это не "скучные Word-файлы".
В современном IT, документация — это код.
Что такое "Docs as Code":
Формат: Вы пишете в Markdown (.md). Это простой, чистый текст.
Хранилище: Вы храните .md файлы в Git-репозитории (на том же Gitea, что мы ставили) вместе с вашими скриптами и IaC-конфигами.
Инструменты: Вы используете MkDocs, Hugo или просто VS Code для рендеринга.
Почему это меняет всё:
Версионность: Ваша документация имеет историю. Вы видите, кто и когда изменил IP-адрес сервера в "runbook".
Runbooks: Вы не "чините по памяти". Вы открываете restore_db.md и копируете проверенные команды.
Схемы как Код: Вы рисуете диаграммы с помощью PlantUML или Mermaid — прямо текстом!
Масштабирование: Вы можете "форкнуть" документацию, предложить изменения через Pull Request.
Взгляд архитектора: Если вас "завтра уволят", а инфраструктура "умрет" через неделю, потому что никто не знает, "как оно работает" — вы были плохим архитектором. Документация — это ваш главный инструмент масштабирования вашего собственного мозга.
#architect #devops #gitops #documentation #sre #стратегия #гайд
👍5
🧠 Skill: "Terraform Drift Detection" — навык №1 в 2026 году ☁️
В эпоху IaC (Infrastructure as Code) самая большая проблема — это Drift (отклонение).
Это когда кто-то зашел в консоль AWS/Azure/Yandex руками и поменял тип инстанса или открыл порт, а в коде Terraform осталось старое значение.
Почему это опасно: При следующем запуске terraform apply твои ручные правки либо затрутся, либо всё упадет с ошибкой.
Что учить:
1. Terraform Plan Automation: Настрой запуск terraform plan в CI/CD раз в час.
2. Инструменты: Посмотри в сторону Driftctl или встроенного режима --refresh-only.
3. Команда для проверки "разрыва" между кодом и реальностью: terraform plan -refresh-only
Умение находить и устранять такие расхождения без даунтайма — это то, за что сегодня платят Senior DevOps инженерам. 🚀
#devops #terraform #iac #cloud #skills #automation #gitops
В эпоху IaC (Infrastructure as Code) самая большая проблема — это Drift (отклонение).
Это когда кто-то зашел в консоль AWS/Azure/Yandex руками и поменял тип инстанса или открыл порт, а в коде Terraform осталось старое значение.
Почему это опасно: При следующем запуске terraform apply твои ручные правки либо затрутся, либо всё упадет с ошибкой.
Что учить:
1. Terraform Plan Automation: Настрой запуск terraform plan в CI/CD раз в час.
2. Инструменты: Посмотри в сторону Driftctl или встроенного режима --refresh-only.
3. Команда для проверки "разрыва" между кодом и реальностью: terraform plan -refresh-only
Умение находить и устранять такие расхождения без даунтайма — это то, за что сегодня платят Senior DevOps инженерам. 🚀
#devops #terraform #iac #cloud #skills #automation #gitops