SOPS для Git
Тема дорожной карты · Kubernetes
SOPS (Secrets OPerationS) — инструмент шифрования на уровне файлов, созданный Mozilla, шифрующий манифесты Secret Kubernetes для безопасного хранения в Git и позволяющий строить полностью зашифрованные GitOps-конвейеры с Argo CD или Flux без раскрытия чувствительных значений в открытом YAML. SOPS шифрует только значения data в YAML-файле, сохраняя структуру ключей и метаданные ресурсов Kubernetes, используя бэкенды шифрования: age, GPG, AWS KMS, GCP KMS или Azure Key Vault — настраиваемые через файл правил .sops.yaml в корне репозитория. С провайдером дешифрования sops Flux, source controller Flux автоматически расшифровывает манифесты Secret во время синхронизации с использованием age-ключа, хранящегося в Secret Kubernetes в пространстве имён flux-system, не требуя никакого инструментария SOPS в кластере во время выполнения. Argo CD интегрируется с SOPS через argocd-vault-plugin или плагин генератора Kustomize ksops, расшифровывающий зашифрованные файлы Secret во время рендеринга манифестов перед их применением к кластеру. SOPS с Kubernetes — лёгкая альтернатива External Secrets Operator для команд, предпочитающих зашифрованные файлы в Git живому соединению с Vault или облачным KMS-сервисом.
Как это работает
SOPS для Git управляется в Kubernetes через ConfigMap и Secret ресурсы. ConfigMaps держат не-чувствительную конфигурацию (feature flags, URL, sampling rates) и могут монтироваться как файлы или инжектироваться как переменные окружения. Secrets держат чувствительные данные (пароли, токены, TLS-сертификаты) и хранятся base64-encoded в etcd (с настраиваемым encryption-at-rest). Pods ссылаются на них по имени в своём spec.
Когда применять
Используйте SOPS для Git для отделения конфигурации от образов контейнеров — один образ, разные среды через разные ConfigMaps. Используйте Secrets для всего чувствительного, но относитесь к base64 как к кодированию, не шифрованию; ротируйте через External Secrets Operator + Vault или SOPS для git-friendly secret management. Не храните реальные секреты в ConfigMaps "потому что проще" — RBAC обычно отличается между ними.
Типичные ошибки
Config/Secret-ловушки: коммитят реальные Secrets в git (используйте sealed-secrets, SOPS или External Secrets Operator); reload config требует перезапуск pod, если приложение не следит за изменениями файлов; лимит ConfigMap — 1 MiB, переполнение fail тихо. Аудитируйте, кто может kubectl get secrets регулярно; во многих кластерах ответ — все, что значит etcd dump = leak credentials.