Для хранения в репозитории паролей, файлов сертификатов и т.п., рекомендуется использовать подсистему работы с секретами werf.
Идея заключается в том, что конфиденциальные данные должны храниться в репозитории вместе с приложением, и должны оставаться независимыми от какого-либо конкретного сервера.
Ключ шифрования
Для шифрования и дешифрования данных необходим ключ шифрования. Есть два места откуда werf может прочитать этот ключ:
- из переменной окружения
WERF_SECRET_KEY
- из специального файла
.werf_secret_key
, находящегося в корневой папке проекта - из файла
~/.werf/global_secret_key
(глобальный ключ)
Ключ шифрования должен иметь шестнадцатеричный дамп длиной 16, 24, или 32 байта для выбора соответственно алгоритмов AES-128, AES-192, или AES-256. Команда werf helm secret generate-secret-key возвращает ключ шифрования, подходящий для использования алгоритма AES-128.
Вы можете быстро сгенерировать ключ, используя команду werf helm secret generate-secret-key.
Работа с переменной окружения WERF_SECRET_KEY
Если при запуске werf доступна переменная окружения WERF_SECRET_KEY, то werf может использовать ключ шифрования из нее.
При работе локально, вы можете объявить ее с консоли. При работе с GitLab CI используйте CI/CD Variables – они видны только участникам проекта с ролью master и не видны обычным разработчикам.
Работа с файлом .werf_secret_key
Использование файла .werf_secret_key
является более безопасным и удобным, т.к.:
- пользователям или инженерам, ответственным за запуск/релиз приложения не требуется добавлять ключ шифрования при каждом запуске;
- значения секрета из файла не будет отражено в истории команд консоли, например в файле
~/.bash_history
.
Внимание! Не сохраняйте файл
.werf_secret_key
в git-репозитории. Если вы это сделаете, то потеряете весь смысл шифрования, т.к. любой пользователь с доступом к git-репозиторию, сможет получить ключ шифрования. Поэтому, файл.werf_secret_key
должен находиться в исключениях, т.е. в файле.gitignore
!
Шифрация секретных переменных
Файлы с секретными переменными предназначены для хранения секретных данных в виде — ключ: секрет
. По умолчанию werf использует для этого файл .helm/secret-values.yaml
, но пользователь может указать любое число подобных файлов с помощью параметров запуска.
Файл с секретными переменными может выглядеть следующим образом:
mysql:
host: 10005968c24e593b9821eadd5ea1801eb6c9535bd2ba0f9bcfbcd647fddede9da0bf6e13de83eb80ebe3cad4
user: 100016edd63bb1523366dc5fd971a23edae3e59885153ecb5ed89c3d31150349a4ff786760c886e5c0293990
password: 10000ef541683fab215132687a63074796b3892d68000a33a4a3ddc673c3f4de81990ca654fca0130f17
db: 1000db50be293432129acb741de54209a33bf479ae2e0f53462b5053c30da7584e31a589f5206cfa4a8e249d20
Для управления файлами с секретными переменными используйте следующие команды:
Использование в шаблонах чарта
Значения секретных переменных расшифровываются в процессе деплоя и используются в Helm в качестве дополнительных значений. Таким образом, использование секретов не отличается от использования данных в обычном случае:
...
env:
- name: MYSQL_USER
value: {{ .Values.mysql.user }}
- name: MYSQL_PASSWORD
value: {{ .Values.mysql.password }}
Шифрование файлов-секретов
Помимо использования секретов в переменных, в шаблонах также используются файлы, которые нельзя хранить незашифрованными в репозитории. Для размещения таких файлов выделен каталог .helm/secret
, в котором должны храниться файлы с зашифрованным содержимым.
Чтобы использовать файлы содержащие секретную информацию в шаблонах Helm, вы должны сохранить их в соответствующем виде в каталоге .helm/secret
.
Для управления файлами, содержащими секретную информацию, используйте следующие команды:
Использование в шаблонах чарта
Функция werf_secret_file
позволяет использовать расшифрованное содержимое секретного файла в шаблоне. Обязательный аргумент функции путь к секретному файлу, относительно папки .helm/secret
.
Пример использования секрета .helm/secret/backend-saml/tls.key
в шаблоне:
...
data:
tls.key: {{ werf_secret_file "backend-saml/tls.key" | b64enc }}
Смена ключа шифрования
Для перегенерации всех секретных переменных и файлов содержащих секреты с новым ключом шифрования используется команда werf helm secret rotate-secret-key.