SSH-секреты: обзор

Как Vault убирает «зоопарк» статических SSH-ключей на серверах.

SSH secrets engine — движок для управляемого доступа по SSH: вместо раздачи постоянных ключей Vault выдаёт короткоживущие подписанные сертификаты или одноразовые пароли.

Классическая боль администрирования — authorized_keys на сотнях серверов: ключи копятся, уволившиеся сотрудники остаются, отозвать доступ трудно. SSH-движок Vault решает это через эфемерный доступ.

Два режима

РежимКак работаетКогда
Signed certificatesVault подписывает публичный ключ пользователя на короткий срок; сервер доверяет CA Vaultосновной, масштабируемый
One-Time Password (OTP)Vault выдаёт одноразовый пароль; на сервере helper его проверяеткогда сертификаты неудобны

Подписанные сертификаты

Идея как в PKI, но для SSH. Vault выступает SSH CA: серверы один раз настраивают доверие к публичному ключу этого CA, после чего принимают любые сертификаты, им подписанные.

vault secrets enable -path=ssh-client-signer ssh

# Vault как SSH CA
vault write ssh-client-signer/config/ca generate_signing_key=true

# роль: кого и под какого пользователя пускать
vault write ssh-client-signer/roles/admin \
  key_type=ca \
  allowed_users="ubuntu,deploy" \
  ttl=30m

Пользователь просит подписать свой публичный ключ и получает короткоживущий сертификат:

vault write -field=signed_key \
  ssh-client-signer/sign/admin \
  public_key=@$HOME/.ssh/id_rsa.pub > signed-cert.pub

ssh -i signed-cert.pub -i ~/.ssh/id_rsa [email protected]

Как работает под капотом

Сервер настроен с TrustedUserCAKeys, указывающим на публичный ключ Vault-CA. Когда пользователь подключается с подписанным сертификатом, sshd проверяет подпись CA, срок действия и список разрешённых пользователей, зашитый в сам сертификат. Никаких записей в authorized_keys не нужно — доверие централизовано в одном CA, а каждый сертификат живёт минуты. Отзыв сводится к тому, что сертификат просто истекает.

Зачем это нужно

  • Нет статических ключей на серверах — нечего красть из authorized_keys.
  • Доступ по запросу и на минуты — уволился сотрудник, доступ протух сам.
  • Аудит — каждая подпись/выдача логируется в Vault.
  • Масштаб — добавить сервер = настроить доверие к одному CA, а не раскатывать ключи.

Частые ошибки

  • Длинный TTL сертификата — теряется выгода эфемерности.
  • Широкий allowed_users — пускает под привилегированных юзеров кого попало.
  • Не настроить TrustedUserCAKeys на сервере — сертификаты не будут приняты.

Итог

  • SSH-движок убирает статические ключи: доступ выдаётся эфемерно и централизованно.
  • Основной режим — подписанные сертификаты: серверы доверяют одному SSH-CA Vault.
  • Короткий TTL делает отзыв тривиальным — доступ просто истекает.
Проверьте себя
1. Какой основной режим SSH-движка масштабируется лучше всего?
AРаздача статических ключей
BПодписанные сертификаты: серверы доверяют одному SSH-CA Vault
CХранение паролей в KV
DРучной authorized_keys
2. Как при подписанных сертификатах настраивается доверие на сервере?
AЧерез authorized_keys каждого пользователя
BЧерез TrustedUserCAKeys, указывающий на публичный ключ Vault-CA
CЧерез пароль root
DЧерез transit engine
3. Почему SSH-движок упрощает отзыв доступа?
AОн шифрует трафик
BСертификаты короткоживущие — доступ просто истекает сам
CОн удаляет пользователей из БД
DОн блокирует порт 22