Это краткая заметка по шифрованию YAML-файлов с секретами, которые публикуются в Git. Удобно для дальнейшей интеграции с Flux2\ArgoCD (через Helm Secrets плагин)
Вместо тысячи слов: Age is a simple, modern and secure file encryption tool, format, and Go library. Рекомендуется пользоваться age вместо GPG – по крайней мере, так рекомендуют сами разработчики sops.
# создать каталог, где age по умолчанию будет искать ключи mkdir -p $HOME/.config/sops/age/ # сгенерировать ключи age-keygen -o $HOME/.config/sops/age/keys.txt # добавить публичный ключ в переменную PUB_KEY=$(cat $HOME/.config/sops/age/keys.txt | grep "public" | awk '{print $4}')
cat > $HOME/.sops.yaml << EOF creation_rules: - encrypted_regex: '^(data|key|password)$' age: $(echo $PUB_KEY) EOF
К файлу .sops.yaml и keys.txt sops будет обращаться при каждом выполнении.
Так как $HOME/.config/sops/age/keys.txt – путь по умолчанию, sops не требуется явно передавать путь к файлу ключей. Но при необходимости его также можно задавать через переменную окружения – export SOPS_AGE_KEY_FILE=$HOME/.config/sops/age/keys.tx
cat > $HOME/secret.yaml << EOF apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: USER_NAME: bob PASSWORD: strongpass EOF
sops -e -i secret.yaml
cat secret.yaml apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: USER_NAME: ENC[AES256_GCM,data:BQ6O,iv:XyjcRI5/TzDykCQo6a9FoDotHjJlYNGH+4Yq30F+5k4=,tag:YNyd8LnwMnmHe0TUm5wKhg==,type:str] PASSWORD: ENC[AES256_GCM,data:dD3prw2Cs9VOxw==,iv:2adiZTUmXrIHnpwrgAvJvsMafvrG+DDGXhUKD/C9nio=,tag:Xbl9NCuVdFRwED1AuXFtQA==,type:str] sops: kms: [] gcp_kms: [] azure_kv: [] hc_vault: [] age: - recipient: age10teuyr66yq0glkkdp8w8adpvuty7xl4vhp6ergna8k95r68g9p7q5gvt94 enc: | -----BEGIN AGE ENCRYPTED FILE----- YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGdVRaTU1OT2g2SkhhK2tm ckpCZ0pWanBTYXJBdloybXVvYzNKeUFLM3lnCnUvd2FtbDAzZFlIY2ZHTEwyYmFs MWl0VmNldnk0VzBzSUdCZmJzZ0VZaU0KLS0tIFJ6ZzJyZmxKYUE5cjRVdVViVzV6 ZFVLN3V0N3dUQ1lPSjUxZE0xMXh0SjgKFNwNL2bDPhuTZU7qb46ZPQ+qWm0dcSUf mt2xZismI0/g9oZH1K4CzMkrgYHDketCDPFLDZ9lRPha7jZzY9lKNA== -----END AGE ENCRYPTED FILE----- lastmodified: "2022-12-29T10:46:46Z" mac: ENC[AES256_GCM,data:ZEKJyGWWvKlP2/nrxosy7tLbiNx0p6Eu0+wYLz69NHjwa1bzIWAzVNXKQgZy1fWLT/AGlgwqTfx5zg8bg0iv43dHqL+NhIhTrqMLPlmYO/IiCn9PBfSY0UVdUwoz2E9QLCDHFaBvOqK5Q9EVkAApjsTwC39KlofPkwB5f+5FKqY=,iv:6hfqwbsUWHxkEWILMa5SrRnpPM81W2lX4gNntbxvoW0=,tag:lWl47uddfa4N/lQ0J+0fBA==,type:str] pgp: [] encrypted_regex: ^(data|key|password)$ version: 3.7.3
sops -d -i secret.yaml apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: USER_NAME: bob PASSWORD: strongpass
sops -e secret.yaml > secret.yaml.enc
sops -d --input-type yaml --output-type yaml secret.yaml.enc
Важно указать явно input и output формат – yaml. Этого нет в документации, см issue
Для удобства работы с шифрованными секретами можно установить плагин для VSC, который позволяет налету производить расшифровку. Плагин не требует настройки, если путь для хранения публичных\приватных ключей в linux лежит по пути $HOME/.config/sops/age/ – можно сразу открывать шифрованные файлы после установки и работать с ними