SOPS – ваш швейцарский нож для безопасного управления секретами в Git

02 Jun, 2026

Привет, коллеги! Наверное, каждый из нас сталкивался с этой проблемой: как безопасно хранить конфиденциальные данные – пароли, API-ключи, токены – в Git-репозитории, чтобы они были доступны только нужным сервисам и людям? Заливать их в открытом виде – табу, а хранить где-то отдельно и вручную раскидывать по серверам – утомительно и чревато ошибками. Именно здесь на помощь приходит SOPS (Secrets OPerationS).

SOPS Demo

Что это за зверь SOPS и зачем он нам?

Представьте себе инструмент, который позволяет вам шифровать файлы конфигурации (YAML, JSON, ENV, INI) и даже бинарные данные прямо в вашем репозитории. При этом ключи остаются читаемыми, а значения – надежно зашифрованными. SOPS делает это, используя различные бэкенды для хранения мастер-ключей: от облачных сервисов, таких как AWS KMS, GCP KMS, Azure Key Vault и HuaweiCloud KMS, до локальных PGP-ключей и современного age.

Этот проект родился в Mozilla в 2015 году, чтобы решить их собственные задачи по безопасной дистрибуции секретов в динамической инфраструктуре. А теперь он стал частью Cloud Native Computing Foundation (CNCF), что говорит о его зрелости и востребованности в мире облачных технологий.

GoDev Badge

Реклама

Ключевые возможности, которые упрощают жизнь

Давайте разберем, что именно SOPS умеет и как это может помочь вам в повседневной работе.

1. Единый редактор для всех секретов

SOPS работает как прозрачный редактор зашифрованных файлов. Вы просто вызываете sops edit mysecret.yaml, и он сам расшифровывает файл, открывает его в вашем любимом текстовом редакторе (будь то Vim, Nano или что-то другое), а после сохранения — снова шифрует. Вам не нужно думать о ключах или алгоритмах – всё происходит автоматически.

$ sops edit mynewtestfile.yaml
mynewtestfile.yaml doesn't exist, creating it.
please wait while an encryption key is being generated and stored in a secure fashion
file written to mynewtestfile.yaml

Результат выглядит как обычный конфиг, но значения заменены на зашифрованные блоки:

myapp1: ENC[AES256_GCM,data:Tr7o=,iv:1=,aad:No=,tag:k=]
app2:
    db:
        user: ENC[AES256_GCM,data:CwE4O1s=,iv:2k=,aad:o=,tag:w==]
        password: ENC[AES256_GCM,data:p673w==,iv:YY=,aad:UQ=,tag:A=]
    # private key for secret operations in app2
    key: |-
        ENC[AES256_GCM,data:Ea3kL5O5U8=,iv:DM=,aad:FKA=,tag:EA==]

2. Гибкость выбора ключей шифрования

SOPS поддерживает широкий спектр систем управления ключами:

  • AWS KMS, GCP KMS, Azure Key Vault, HuaweiCloud KMS: Идеально для облачных инфраструктур. Вы можете использовать IAM-роли для контроля доступа, что значительно упрощает управление ключами по сравнению с традиционными PGP.
  • PGP: Классика. Отлично подходит для локального использования или в качестве резервного варианта на случай потери доступа к облачным KMS.
  • Age: Современная, простая и безопасная альтернатива PGP, набирающая популярность. SOPS отлично с ней дружит.
  • HashiCorp Vault Transit: Для тех, кто уже использует Vault как централизованное хранилище секретов.

Вы можете комбинировать эти методы, например, шифровать одним файлом с помощью AWS KMS и PGP одновременно, повышая надежность и отказоустойчивость.

3. Git-friendly Diff'ы

Одна из самых крутых фич – это интеграция с Git. Знакома ситуация, когда зашифрованный файл меняется, и git diff показывает бесполезный бинарный бред? SOPS решает эту проблему! Вы можете настроить Git так, чтобы при просмотре diff он автоматически расшифровывал файлы, показывая изменения в чистом виде. Это бесценно для code review и отслеживания истории изменений.

*.yaml diff=sopsdiffer
$ git config diff.sopsdiffer.textconv "sops decrypt"

4. Гранулярный контроль и частичное шифрование

SOPS позволяет вам не шифровать весь файл целиком. Вы можете указать, какие поля должны оставаться в открытом виде, используя суффиксы (_unencrypted) или регулярные выражения. Это удобно, когда в одном файле есть и чувствительные, и нечувствительные данные.

# В этом файле 'description' останется незашифрованным
description: Это описание проекта
database_password: ENC[...] # Это зашифровано

5. Безопасная передача секретов в процессы

Когда нужно передать секреты в другое приложение, SOPS предлагает команды exec-env и exec-file. Они позволяют расшифровать секреты и передать их в переменные окружения или во временный файл для дочернего процесса. Самое главное — секреты никогда не записываются на диск в открытом виде и доступны только этому процессу.

$ sops exec-env out.json 'echo secret: $database_password; ./database-import'
secret: jf48t9wfw094gf4nhdf023r

Как это работает под капотом? Протокол шифрования

SOPS не просто шифрует весь файл как единый блок. При создании файла он генерирует случайный 256-битный ключ данных (data key). Этот ключ данных затем шифруется каждым из ваших мастер-ключей (KMS, PGP, age) и сохраняется в метаданных файла.

Далее, каждый отдельный лист (значение) в вашем YAML/JSON файле шифруется с помощью этого ключа данных, используя алгоритм AES256_GCM, уникальный вектор инициализации и дополнительные аутентификационные данные (AAD), которые формируются из имен ключей в иерархии документа. Это позволяет:

  • Сохранять структуру файла: Ключи остаются в открытом виде, что делает diff'ы осмысленными.
  • Гарантировать целостность: MAC (Message Authentication Code) вычисляется для всех значений, предотвращая незаметные изменения.

Такой подход обеспечивает высокую безопасность и удобство использования.

SOPS в вашей DevOps-практике

Где SOPS покажет себя лучше всего?

  • CI/CD пайплайны: Безопасное развертывание секретов в различных окружениях (dev, staging, prod) без жесткого кодирования или ручной передачи. .sops.yaml позволяет настроить правила шифрования для разных файлов и окружений.
  • Infrastructure as Code (IaC): Хранение чувствительных данных для Terraform, Ansible, Kubernetes Manifests. Например, пароли для баз данных или токены для внешних сервисов прямо рядом с кодом вашей инфраструктуры, но в зашифрованном виде.
  • Многопользовательская разработка: Благодаря поддержке нескольких мастер-ключей и Shamir's Secret Sharing, несколько разработчиков могут работать с одним файлом, требуя N из M ключей для расшифровки.

Стоит ли попробовать SOPS?

Если вы:

  • Устали от небезопасного хранения секретов.
  • Используете Git для управления конфигурациями.
  • Работаете в облаке и цените интеграцию с KMS.
  • Ищете инструмент, который упростит работу с зашифрованными файлами в команде.

Тогда SOPS — это то, что вам нужно! Он предлагает надежное, гибкое и удобное решение для одной из самых болезненных проблем в современной разработке. Попробуйте, и вы поймете, почему так много команд выбирают его.

YouTube Tutorial

Скачать SOPS можно на странице релизов.


CNCF Sandbox Project SOPS является песочным проектом Cloud Native Computing Foundation (CNCF).