Mozilla Sops для хранения секретов
Mozilla SOPS - это инструмент для работы с типами файлов, которые основаны на формате ключ: значение (json, yaml, env). Шифрование Sops происходит путем шифрования только значений, позволяя нам видеть ключи и тем самым понимать набор секретов, которые присутствуют в этом файле, без утечки значений. Имея закрытую часть ключа gpg и зашифрованный файл, всегда можно будет расшифровать этот файл.
Таким образом Mozilla Sops позволяет избежать хранения секретов в репозиториях (пусть и приватных)
#
УстановкаПроверяем какая последняя версия sops Releases · mozilla/sops
LinuxИспользуем один из способов:
Debian\Ubuntu
Other (Debian\Ubuntu тоже можно использовать)
Чтобы установить Sops на Windows, загружаем последнюю версию sops:
Переименовываем его в sops.exe и перемещаем файл в директорию из переменной окружения PATH Например, в C:\Windows\System32
Убедиться, что Sops корректно установлен можно через командную строку:
#
Linux Настройка редактора для открытия файлов в sopsДобавляем в переменные окружения Linux переменную EDITOR, которая должна содержать команду для запуска редактора. Некоторые GUI редакторы, такие как VSCode и SublimeText требуют указания опции --wait.
И теперь при запуске sops он будет открывать в VSCode.
WindowsДобавляем в переменные среды, системную переменную EDITOR и путь до exe файл VsCode.
#
Использование SopsСкорее всего у вас на проекте уже есть git репозиторий, в котором хранятся values файлы. При использовании sops, чтобы не шифровать файл целиком, мы будем выделять секретные данные из него в отдельный файл. Например, у нас был файл admin.yaml, а теперь будет два файла - admin.yaml без секретных данных и admin.sops.yaml, в котором только секретные данные. С файлом admin.yaml можете работать, как и раньше.
Если же вам нужно изменить секретное значение, то необходимо выполнить особую команду, которая расшифрует файл, откроет редактор, а когда вы закончите редактирование, зашифрует файл обратно.
#
Открытие зашифрованного файла в режиме редактирования--enable-local-keyservice=false
– отключаем проверку локальных ключей gpg
--keyservice tcp://<IP>:<PORT>
– используем удаленный сервер ключей
./admin.sops.yaml
– файл который мы открываем для редактирования
#
Зашифровка файлаФлаг --encrypt, -e - зашифровать файл и вывести результат в stdout. В название файла добавили *.sops.yaml, для того чтобы понимать что файл зашифрован.
#
Для дешифрования файла нужно выполнитьФлаг --decrypt, -d – расшифровать файл и вывести результат в stdout. В название файла добавили *.secret.yaml, для того чтобы понимать что в файле секреты в plaintext.
#
Использование локального gpg ключаЕсли по какой-то причине keyservice недоступен, а у вас есть gpg ключ, то вы можете использовать его.
Сначала необходимо установить себе пакет gpg:
Добавляем в .bashrc переменную, необходимую для работы gpg
После этого у вас появится локальное хранилище ключей. Нужно импортировать в него файл ключа:
И теперь можно расшифровать локально файл командой:
Или открыть зашифрованный файл для редактирования