Шифрование данных в файлах состояний и Pillar
GPG
GNU Privacy Guard (GnuPG, GPG) — свободное программное обеспечение для шифрования информации и создания электронных цифровых подписей.
GnuPG присутствует во всех свободных операционных системах, включая GNU/Linux, распространяется под свободной лицензией GNU General Public License.
GnuPG полностью совместима со стандартом IETF OpenPGP.
Текущие версии GnuPG могут взаимодействовать с PGP и другими OpenPGP-совместимыми системами.
Основные функции GnuPG:
- создание ключевых пар,
- обмен и проверка ключей,
- шифрование и расшифрование сообщений и документов,
- аутентификация документов с помощью цифровых подписей.
Принцип работы GPG
GnuPG использует криптографию с открытым ключом.
В системе с открытым ключом у каждого пользователя есть пара ключей: закрытый ключ (private key) и открытый ключ (public key).
Закрытый ключ необходим пользователю для расшифрования сообщений, направляемых ему другими пользователями, и зашифрованных его открытым ключом.
Закрытый ключ должен оставаться в секрете, его не следует раскрывать другим пользователям ни при каких обстоятельствах.
Открытый ключ может быть передан любому корреспонденту для шифрования сообщений, направляемых пользователю.
GnuPG использует схему, в которой у пользователя есть основной ключ и ни одного или более дополнительных подчинённых ключей.
Основные и подчиненные пары ключей объединены для упрощения управления ключами, и это объединение часто можно рассматривать просто как одну пару ключей.
SaltStack GPG Renderer
Создание GPG-ключей для SaltStack
Чтобы создать новую пару ключей GPG для шифрования данных, войдите в командную оболочку мастера как пользователь root и выполните следующие команды:
-
Создание каталога для хранения ключей:
mkdir -p /etc/salt/gpgkeys
-
Отключение любых прав на доступ к каталогу у пользователей группы владельца и у других пользователей:
chmod 0700 /etc/salt/gpgkeys
-
Генерация и сохранение GPG-ключей в созданном каталоге:
gpg --homedir /etc/salt/gpgkeys --gen-key
После запуска утилиты генерации ключей gpg последовательно выполните следующие шаги:
-
Выберите тип создаваемого ключа.
Следует выбрать один из двух вариантов:RSA and RSA
илиDSA and Elgamal
.
Ключ с пометкойsign only
не подходит: необходим ключ, поддерживающий шифрование данных, а не только их подписание:sudo gpg --gen-key --homedir /etc/salt/gpgkeys
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
gpg: keyring `/etc/salt/gpgkeys/secring.gpg' created
gpg: keyring `/etc/salt/gpgkeys/pubring.gpg' created
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only) -
Укажите размер ключа в битах.
Рекомндуется использовать ключ размером 4096 бит:RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) -
Установите срок действия ключа:
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) -
Укажите данные о владельце ключа:
GnuPG needs to construct a user ID to identify your key.
Real name: SaltBox
Email address: saltbox@example.local
Comment: "SaltBox KEY"
You selected this USER-ID:
"SaltBox (SaltBox KEY) <saltbox@example.local>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? -
Далее утилита создания ключа запросит парольную фразу для ключа.
Оставьте поле пустым и подтвердите создание ключа. -
Убедитесь, что ключ был создан.
В выводе команд, указанных ниже, должен быть созданный ключSaltBox
:gpg --homedir /etc/salt/gpgkeys --list-keys
gpg --homedir /etc/salt/gpgkeys --list-secret-keysПример вывода команды
gpg --homedir /etc/salt/gpgkeys --list-keys
в случае её успешного выполнения:sec 4096R/3B42DC0F0 2025-04-15
uid SaltBox (SaltBox KEY) <saltbox@example.local>
ssb 4096R/3767D6BA 2025-04-15Пример вывода команды
gpg --homedir /etc/salt/gpgkeys --list-secret-keys
в случае её успешного выполнения:sec 4096R/3B42DC0F0 2025-04-15
uid SaltBox (SaltBox KEY) <saltbox@example.local>
ssb 4096R/3767D6BA 2025-04-15 -
На основе имеющегося приватного ключа создайте публичный ключ для шифрования данных:
sudo gpg --homedir /etc/salt/gpgkeys --armor --export > saltBox.gpg
Созданный публичный ключ можно передавать пользователям, на стороне которых будет производится шифрование данных (обычно это администраторы SaltStack,которые пишут файлы состояний).
-
Импортируйте GPG-ключ в профиль пользователя
С правами пользователя выполните команду:
gpg --import saltBox.gpg
Убедитесь в успешном импорте ключа:
gpg --list-keys
Шифрование данных с помощью публичного ключа
Шифрование данных выполняется следующей командой:
echo -n "encrypted_password" | gpg --trust-model always -ear 'SaltBox'
Пример вывода команды в случае её успешного выполнения:
-----BEGIN PGP MESSAGE-----
hQIMA/PI+003Z9a6AQ/+M6Z1+byu5girZSIIx8ILiRlUDVoGyd0NTInz44OYNiFl
HunSYrb9GD/agDR2ICmbcxUdzSz8Cnm+1GHxFq5pHtQMFB4iK4szs5+PH/yUKR1/
+ijEnBATh3J9SaZjftcf1nVKHNGtsCl7wDEdvOUqfLfekZZmJ15zaedQYFKdB7T4
X9oRs+vxRIZMTlAuJ/g8nbs51eYSno3le5cajrpBUJQr/Fe3gL7aKE/2xQVlXZPP
ONK24ocBhoKJYwqsAyCo15JtYZl+X+yzTpxhaIaOGOTGFUijqvnRqbyiWUToRy9W
4Abf8vu52rhL09SDTgVZQ9Mg++qFXvcd8WaFPocTzBbWu2iRdkCTwxiOPYdfPyAl
XY0/k5zFtEkPicMo6xrpT4HKQ99H5MJ4hxNOjfSTrB4isyHfNjuRzfzRJHMJ9WrL
YFG+3j4CvKKWthtIALNXsFglvBVT3JUsL1bGZXbIdaYkFhVpNTJhF1wkBKe3qwno
TD5y+AYfjuMKYcpKBrrGAvaDEnvWicaAPKu24a4mQNcmHu5q/FVYHy7F/FnKHvZ4
jk3NEMkYrGjrJYkrOpFzW2blrvx1+FIywf95LyoddUc1Bn/1MumC5y5YD2jHbwYT
fRHs6YVZEBAG/86mx1nzyjOSiG64Ct+JMiUsDasGPvNBcsDoJXdmk12B9MhOIUzS
TQG2CTKOeChs9hO48ZKs1hPXqWACseOzpAnuA8GpWOffbIfzD816zcqx6zAhPj5b
x9MfZslQwVE6qG+YOhw0QX9S6Gl56syHRraS4Y2y
=e1eF
-----END PGP MESSAGE-----
Текст, начинающийся строкой -----BEGIN PGP MESSAGE-----
и заканчивающийся строкой -----END PGP MESSAGE-----
, необходимо скопировать полностью (вместе с указанными строками) и вставить в файл, содержащий нужный pillar (подробнее в примере зашифрованного файла Pillar).
Шифрование данных в файлах Pillar
Система рендеринга Salt может использоваться для расшифрования данных pillar.
Элементы pillar могут храниться в зашифрованном виде и расшифровываться во время компиляции pillar.
Пример зашифрованного файла Pillar
# pillars/top.sls
secrets:
vault:
foo: |
-----BEGIN PGP MESSAGE-----
hQEMAw2B674HRhwSAQgAhTrN8NizwUv/VunVrqa4/X8t6EUulrnhKcSeb8sZS4th
W1Qz3K2NjL4lkUHCQHKZVx/VoZY7zsddBIFvvoGGfj8+2wjkEDwFmFjGE4DEsS74
ZLRFIFJC1iB/O0AiQ+oU745skQkU6OEKxqavmKMrKo3rvJ8ZCXDC470+i2/Hqrp7
+KWGmaDOO422JaSKRm5D9bQZr9oX7KqnrPG9I1+UbJyQSJdsdtquPWmeIpamEVHb
VMDNQRjSezZ1yKC4kCWm3YQbBF76qTHzG1VlLF5qOzuGI9VkyvlMaLfMibriqY73
zBbPzf6Bkp2+Y9qyzuveYMmwS4sEOuZL/PetqisWe9JGAWD/O+slQ2KRu9hNww06
KMDPJRdyj5bRuBVE4hHkkP23KrYr7SuhW2vpe7O/MvWEJ9uDNegpMLhTWruGngJh
iFndxegN9w==
=bAuo
-----END PGP MESSAGE-----
bar: this was unencrypted already
baz: |
-----BEGIN PGP MESSAGE-----
hQEMAw2B674HRhwSAQf+Ne+IfsP2IcPDrUWct8sTJrga47jQvlPCmO+7zJjOVcqz
gLjUKvMajrbI/jorBWxyAbF+5E7WdG9WHHVnuoywsyTB9rbmzuPqYCJCe+ZVyqWf
9qgJ+oUjcvYIFmH3h7H68ldqbxaAUkAOQbTRHdr253wwaTIC91ZeX0SCj64HfTg7
Izwk383CRWonEktXJpientApQFSUWNeLUWagEr/YPNFA3vzpPF5/Ia9X8/z/6oO2
q+D5W5mVsns3i2HHbg2A8Y+pm4TWnH6mTSh/gdxPqssi9qIrzGQ6H1tEoFFOEq1V
kJBe0izlfudqMq62XswzuRB4CYT5Iqw1c97T+1RqENJCASG0Wz8AGhinTdlU5iQl
JkLKqBxcBz4L70LYWyHhYwYROJWjHgKAywX5T67ftq0wi8APuZl9olnOkwSK+wrY
1OZi
=7epf
-----END PGP MESSAGE-----
qux:
- foo
- bar
- |
-----BEGIN PGP MESSAGE-----
hQEMAw2B674HRhwSAQgAg1YCmokrweoOI1c9HO0BLamWBaFPTMblOaTo0WJLZoTS
ksbQ3OJAMkrkn3BnnM/djJc5C7vNs86ZfSJ+pvE8Sp1Rhtuxh25EKMqGOn/SBedI
gR6N5vGUNiIpG5Tf3DuYAMNFDUqw8uY0MyDJI+ZW3o3xrMUABzTH0ew+Piz85FDA
YrVgwZfqyL+9OQuu6T66jOIdwQNRX2NPFZqvon8liZUPus5VzD8E5cAL9OPxQ3sF
f7/zE91YIXUTimrv3L7eCgU1dSxKhhfvA2bEUi+AskMWFXFuETYVrIhFJAKnkFmE
uZx+O9R9hADW3hM5hWHKH9/CRtb0/cC84I9oCWIQPdI+AaPtICxtsD2N8Q98hhhd
4M7I0sLZhV+4ZJqzpUsOnSpaGyfh1Zy/1d3ijJi99/l+uVHuvmMllsNmgR+ZTj0=
=LrCQ
-----END PGP MESSAGE-----
После компиляции данных pillar результаты будут расшифрованы.
$: salt myminion pillar.items
myminion:
----------
secrets:
----------
vault:
----------
bar:
this was unencrypted already
baz:
rosebud
foo:
supersecret
qux:
- foo
- bar
- baz
Ссылки
Статья о GnuPG в Википедии
Руководство по GnuPG
Шифрование данных в файлах Pillar
SaltSTack GPG Renderer