Skip to main content

Mozilla Sops для хранения секретов

Mozilla SOPS - это инструмент для работы с типами файлов, которые основаны на формате ключ: значение (json, yaml, env). Шифрование Sops происходит путем шифрования только значений, позволяя нам видеть ключи и тем самым понимать набор секретов, которые присутствуют в этом файле, без утечки значений. Имея закрытую часть ключа gpg и зашифрованный файл, всегда можно будет расшифровать этот файл.

Таким образом Mozilla Sops позволяет избежать хранения секретов в репозиториях (пусть и приватных)

Установка

Проверяем какая последняя версия sops Releases · mozilla/sops

Linux
Используем один из способов:

Debian\Ubuntu

wget https://github.com/mozilla/sops/releases/download/v3.7.1/sops_3.7.1_amd64.deb
dpkg -i sops_3.7.1_amd64.deb

Other (Debian\Ubuntu тоже можно использовать)

curl -qsL https://github.com/mozilla/sops/releases/download/v3.7.1/sops-v3.7.1.linux -o /usr/local/bin/sops && chmod +x /usr/local/bin/sops
Windows

Чтобы установить Sops на Windows, загружаем последнюю версию sops:

https://github.com/mozilla/sops/releases/download/v3.7.1/sops-v3.7.1.exe

Переименовываем его в sops.exe и перемещаем файл в директорию из переменной окружения PATH Например, в C:\Windows\System32

Screenshot

Убедиться, что Sops корректно установлен можно через командную строку:

sops --version

Screenshot

Настройка редактора для открытия файлов в sops

Linux
Добавляем в переменные окружения Linux переменную EDITOR, которая должна содержать команду для запуска редактора. Некоторые GUI редакторы, такие как VSCode и SublimeText требуют указания опции --wait.
EDITOR='code -–wait'

И теперь при запуске sops он будет открывать в VSCode.

Windows
Добавляем в переменные среды, системную переменную EDITOR и путь до exe файл VsCode.

Screenshot

Использование Sops

Скорее всего у вас на проекте уже есть git репозиторий, в котором хранятся values файлы. При использовании sops, чтобы не шифровать файл целиком, мы будем выделять секретные данные из него в отдельный файл. Например, у нас был файл admin.yaml, а теперь будет два файла - admin.yaml без секретных данных и admin.sops.yaml, в котором только секретные данные. С файлом admin.yaml можете работать, как и раньше.

Если же вам нужно изменить секретное значение, то необходимо выполнить особую команду, которая расшифрует файл, откроет редактор, а когда вы закончите редактирование, зашифрует файл обратно.

Открытие зашифрованного файла в режиме редактирования

sops --enable-local-keyservice=false --keyservice tcp://<IP>:<PORT> ./admin.sops.yaml

--enable-local-keyservice=false – отключаем проверку локальных ключей gpg

--keyservice tcp://<IP>:<PORT> – используем удаленный сервер ключей

./admin.sops.yaml – файл который мы открываем для редактирования

Зашифровка файла

sops --enable-local-keyservice=false --keyservice tcp://<IP>:<PORT> -e ./admin.secret.yaml > ./admin.sops.yaml

Флаг --encrypt, -e - зашифровать файл и вывести результат в stdout. В название файла добавили *.sops.yaml, для того чтобы понимать что файл зашифрован.

Для дешифрования файла нужно выполнить

sops --enable-local-keyservice=false --keyservice tcp://<IP>:<PORT> -d ./admin.sops.yaml > ./admin.secret.yaml

Флаг --decrypt, -d – расшифровать файл и вывести результат в stdout. В название файла добавили *.secret.yaml, для того чтобы понимать что в файле секреты в plaintext.

Использование локального gpg ключа

Если по какой-то причине keyservice недоступен, а у вас есть gpg ключ, то вы можете использовать его.

Сначала необходимо установить себе пакет gpg:

apt-get install gpg

Добавляем в .bashrc переменную, необходимую для работы gpg

export GPG_TTY=$(tty)

После этого у вас появится локальное хранилище ключей. Нужно импортировать в него файл ключа:

gpg --import key.gpg

И теперь можно расшифровать локально файл командой:

sops -d ./encrypted.yaml > plain.yaml

Или открыть зашифрованный файл для редактирования

sops ./filename.yaml