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
Чтобы установить Sops на Windows, загружаем последнюю версию sops:
https://github.com/mozilla/sops/releases/download/v3.7.1/sops-v3.7.1.exe
Переименовываем его в sops.exe и перемещаем файл в директорию из переменной окружения PATH Например, в C:\Windows\System32
Убедиться, что Sops корректно установлен можно через командную строку:
sops --version
Настройка редактора для открытия файлов в sops
LinuxДобавляем в переменные окружения Linux переменную EDITOR, которая должна содержать команду для запуска редактора. Некоторые GUI редакторы, такие как VSCode и SublimeText требуют указания опции --wait.
EDITOR='code -–wait'
И теперь при запуске sops он будет открывать в VSCode.
WindowsДобавляем в переменные среды, системную переменную EDITOR и путь до exe файл VsCode.
Использование 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