Секреты в git: sops и age с мастер-ключом в Yandex Cloud KMS или на парольной фразе
Секреты проекта — пароль базы, ключи подписи токенов, секреты OAuth-клиентов, SMTP — хочется держать рядом с кодом: в том же репозитории, с той же историей, в тех же ветках. Но в открытом виде им в git не место. В этой статье — схема, которой я пользуюсь для блога: файлы с секретами лежат в репозитории зашифрованными sops на ключе age, а сам ключ age хранится там же, зашифрованный мастер-ключом. Разберу два варианта мастер-ключа — в Yandex Cloud KMS и без облака, на парольной фразе, — а в конце пройдусь по альтернативам: Google Cloud, AWS, Azure, Vault, аппаратные ключи.
Инструменты
sops (Secrets OPerationS) шифрует не файл целиком, а значения в нём. Ключи YAML, JSON, .env остаются открытыми, и в git diff видно, какой секрет изменился, хотя и не видно, на что. Вот фрагмент зашифрованных значений чарта блога, как он лежит в git: