Страница описывает регламентные и аварийные операции с ключами Stronghold. Описание модели ключей приведено в разделе «Seal».
| Ключ | Назначение | Операция замены |
|---|---|---|
| Ключ распечатывания (доли Shamir) | Расшифровывает root-ключ при ручном распечатывании | d8 stronghold operator rekey |
| Ключ восстановления (доли) | Авторизует операции оператора при auto unseal через HSM/KMS | d8 stronghold operator rekey -target=recovery |
| Root-ключ | Расшифровывает связку ключей | Меняется при rekey |
| Ключ шифрования (связка ключей) | Шифрует данные в хранилище | d8 stronghold operator rotate |
| Root-токен | Неограниченный доступ к API | d8 stronghold operator generate-root, отзыв |
Ключи в DP
В DP в режиме Automatic при инициализации создаётся одна доля ключа с порогом 1. Ключ распечатывания и root-токен хранятся в секрете stronghold-keys неймспейса d8-stronghold, в полях unsealKey и rootToken. Deployment stronghold-automatic использует их:
unsealKey— для распечатывания узлов. Период проверки по умолчанию — 60 секунд.rootToken— для создания роли метода аутентификации Kubernetes, через которуюstronghold-automaticнастраивает Stronghold, если войти с этой ролью не удаётся.
Если поля unsealKey нет в секрете или оно не совпадает с текущим ключом распечатывания, автоматическое распечатывание перестаёт работать: после перезапуска распечатывайте каждый под вручную. Если поля rootToken нет или токен отозван, stronghold-automatic не может восстановить свой доступ и перестаёт настраивать Stronghold.
Чтобы посмотреть журналы stronghold-automatic, выполните команду:
d8 k -n d8-stronghold logs deploy/stronghold-automaticВ режиме Manual модуль не создаёт ни секрет, ни stronghold-automatic.
В DP в режиме Automatic rekey и отзыв root-токена нарушают автоматическое распечатывание и настройку. Согласуйте эти операции с поддержкой.
Смена ключей распечатывания (rekey)
Выполняйте rekey при смене держателей ключей, изменении числа долей или порога, а также при подозрении на компрометацию доли.
Инициируйте операцию, указав новое число долей и порог. В примере новые доли шифруются PGP-ключами держателей, поэтому прочитать долю может только её держатель. Флаг
-verifyтребует, чтобы держатели подтвердили получение новых долей до того, как старые станут недействительными:d8 stronghold operator rekey -init -key-shares=5 -key-threshold=3 -pgp-keys="alice.asc,bob.asc,carol.asc,dave.asc,erin.asc" -verifyКоманда вернёт
Nonceоперации. Передайте его держателям текущих долей.Каждый держатель текущей доли выполняет команду и вводит свою долю:
d8 stronghold operator rekey -nonce=<NONCE>После ввода порогового количества долей Stronghold выведет новые доли (зашифрованные PGP-ключами, если они заданы) и
Verification Nonce.Подтвердите получение новых долей: пороговое количество держателей вводит новые доли:
d8 stronghold operator rekey -verify -nonce=<VERIFICATION_NONCE>До завершения проверки старые доли продолжают действовать.
Раздайте новые доли держателям и уничтожьте старые.
Проверить ход операции или отменить её:
d8 stronghold operator rekey -status
d8 stronghold operator rekey -cancelСмена ключей восстановления
При auto unseal через HSM или KMS вместо ключей распечатывания используются ключи восстановления. Процедура аналогична, операция авторизуется текущими ключами восстановления:
d8 stronghold operator rekey -init -target=recovery -key-shares=5 -key-threshold=3
d8 stronghold operator rekey -target=recovery -nonce=<NONCE>Через API используется префикс /sys/rekey-recovery-key.
Ротация ключа шифрования
Ротация добавляет в связке ключей новый ключ шифрования. Новые данные шифруются новым ключом, старые ключи остаются в связке ключей для расшифровки ранее записанных данных. Операция выполняется без простоя и требует токена с правами sudo на sys/rotate.
d8 stronghold operator rotateПроверить текущий номер и время установки ключа:
d8 stronghold operator key-statusНастройте автоматическую ротацию через /sys/rotate/config:
d8 stronghold write sys/rotate/config enabled=true interval=720h max_operations=3000000000interval— через какое время после установки активного ключа выполнить ротацию;max_operations— после какого количества операций шифрования выполнить ротацию.
interval задаётся строкой с суффиксом (720h) или числом секунд, минимум — 24 часа. max_operations принимает значения от 1 000 000 до 3 865 470 566; если не задан, действует максимум.
Генерация root-токена
Root-токен нужен только для экстренных операций, когда административный доступ через методы аутентификации невозможен. Генерация требует порогового количества ключей распечатывания или восстановления.
С одноразовым паролем (OTP)
Инициируйте операцию. Stronghold выведет
NonceиOTP. Сохраните OTP — он потребуется для расшифровки токена:d8 stronghold operator generate-root -initКаждый держатель вводит свою долю:
d8 stronghold operator generate-root -nonce=<NONCE>После ввода последней доли Stronghold выведет
Encoded Token. Расшифруйте его:d8 stronghold operator generate-root -decode=<ENCODED_TOKEN> -otp=<OTP>
С PGP-ключом
Вместо OTP токен можно зашифровать PGP-ключом получателя:
d8 stronghold operator generate-root -init -pgp-key=operator.ascПосле ввода долей расшифруйте Encoded Token:
echo "<ENCODED_TOKEN>" | base64 -d | gpg --decryptПроверить ход или отменить операцию:
d8 stronghold operator generate-root -status
d8 stronghold operator generate-root -cancelОтзыв root-токена
После выполнения экстренных операций отзовите root-токен:
d8 stronghold token revoke <ROOT_TOKEN>Или, если root-токен используется в текущей сессии:
d8 stronghold token revoke -selfУбедитесь, что до отзыва настроен рабочий административный доступ через методы аутентификации.
Действия при компрометации
Компрометация доли ключа распечатывания или восстановления
Одной доли недостаточно для распечатывания, если порог больше единицы, но запас надёжности снижается.
- Выполните rekey с участием остальных держателей.
- Если под угрозой пороговое количество долей и есть доступ к данным хранилища, выполните rekey и ротацию ключа шифрования, затем проверьте журналы аудита на подозрительные операции.
- Оцените, не были ли скопированы снимки Raft: снимок вместе с пороговым количеством долей позволяет получить доступ к данным.
Компрометация root-токена
Немедленно отзовите токен. Если значение токена неизвестно, используйте accessor из журнала аудита:
d8 stronghold token revoke -accessor <ACCESSOR>Дочерние токены и аренды, созданные этим токеном, будут отозваны автоматически. Orphan-токены не отзываются — найдите их по журналу аудита и отзовите отдельно.
Проверьте журналы аудита на операции, выполненные с этим токеном: изменения политик, методов аутентификации, аудит-устройств.
Смените статические секреты, которые могли быть прочитаны.
Компрометация обычного токена
Отзовите токен:
d8 stronghold token revoke <TOKEN>Если скомпрометированы секреты, выданные через определённый путь, отзовите аренды по префиксу:
d8 stronghold lease revoke -prefix database/creds/app-roleКлюч
-forceудаляет аренды из Stronghold даже при ошибке отзыва во внешней системе. Используйте его только если учётные данные удалены во внешней системе вручную.Для методов аутентификации отзовите все выданные ими токены по префиксу, например
d8 stronghold lease revoke -prefix auth/approle/, и смените учётные данные (например,secret_idAppRole).
Подробнее об арендах — в разделе «Аренды», о токенах — в разделе «Токены».
Утеря ключей
Утеряны доли ключа распечатывания
Если держатели сохранили пороговое количество долей, выполните rekey, чтобы восстановить нужное число долей.
Если долей меньше порога, после следующего запечатывания или перезапуска данные будет невозможно расшифровать:
- Не перезапускайте и не запечатывайте работающие узлы.
- Пока кластер распечатан, перенесите секреты и конфигурацию в новый кластер с новыми ключами.
Утеряны ключи восстановления
При auto unseal кластер продолжит распечатываться автоматически, но станут невозможны операции, требующие ключей восстановления: генерация root-токена, rekey ключей восстановления, миграция seal.
- Сохраните рабочий административный доступ через методы аутентификации.
- Спланируйте перенос данных в новый кластер с новыми ключами восстановления.
Stronghold не может перевыпустить ключи восстановления без порогового количества текущих долей: операция rekey ключей восстановления собирает ключ из переданных долей и без них не завершается.