Настройка кэширования SSH MFA

В PAM можно настроить кэширование многофакторной аутентификации SSH — MFA. Это позволит пользователям подключаться к настроенному удаленному ресурсу с помощью временных одноразовых ключей, которые отзываются автоматически.

Шаг 1. Активация движка sshkeygen

Чтобы активировать Secret Engine sshkeygen, выполните запрос:

curl --insecure \      --header "X-Vault-Token: {token}" \      --request POST \      --data '{        "type": "sshkeygen"      }' \      "https://{vault_address}/v1/sys/mounts/sshkeygen/default"

Шаг 2. Создание парольной политики, проверка генерации пароля

  1. Создайте Password Policy в Vault:

    curl --insecure \      --header "X-Vault-Token: {token}" \      --request POST \      --data '{        "policy": "length = 20\n                  rule \"charset\" {                    charset = \"abcdefghijklmnopqrstuvwxyz\"                    min-chars = 1                  }\n                  rule \"charset\" {                    charset = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"                    min-chars = 1                  }\n                  rule \"charset\" {                    charset = \"0123456789\"                    min-chars = 1                  }\n                  rule \"charset\" {                    charset = \"!@#$%^&*\"                    min-chars = 1                  }"      }' \      "https://{vault_address}/v1/sys/policies/password/web-clients-passphrase-policy"
  2. Проверьте, что пароль по созданной политике генерируется корректно:

    curl --insecure \      --header "X-Vault-Token: {token}" \      --request POST \      "https://{vault_address}/v1/sys/policies/password/web-clients-passphrase-policy/generate"

Шаг 3. Назначение политики движку sshkeygen

Чтобы назначить политику, выполните:

curl --insecure \      --header "X-Vault-Token: {token}" \      --request POST \      --data '{        "password_policy": "web-clients-passphrase-policy"      }' \      "https://{vault_address}/v1/sshkeygen/default/config"

Шаг 4. Создание роли для генерации ключевых пар

Чтобы создать роли генерации ключевых пар для MFA Cashe, выполните запросы к Vault. В теле запросов передайте параметры алгоритмов, размер ключа, формат и комментарий.

RSA 2048

curl --insecure \ --header "X-Vault-Token: {token}" \ --request POST \ --data '{ "key_algo": "rsa", "public_key_size": 2048, "format": "openssh", "comment": "MFA Cache RSA Policy" }' \ "https://{vault_address}/v1/sshkeygen/default/roles/rsa-2048-role"

ECDSA 521

curl --insecure \ --header "X-Vault-Token: {token}" \ --request POST \ --data '{ "key_algo": "ecdsa", "public_key_size": 521, "format": "openssh", "comment": "MFA Cache ECDSA Policy" }' \ "https://{vault_address}/v1/sshkeygen/default/roles/ecdsa-512-role"

ED25519

curl --insecure \ --header "X-Vault-Token: {token}" \ --request POST \ --data '{ "key_algo": "ed25519", "public_key_size": 521, "format": "openssh", "comment": "MFA Cache ED25519 Policy" }' \ "https://{vault_address}/v1/sshkeygen/default/roles/ed25519-512-role"

После создания, проверьте описание созданной роли:

curl --insecure \ --header "X-Vault-Token: {token}" \ --request GET \ "https://{vault_address}/v1/sshkeygen/default/roles/ecdsa-512-role"

5. Создайте новый секрет и роль

В Vault в разделе Secrets cоздайте новый SSH-Signer с параметрами:

Параметр

Значение

Path

singner ssh-web-clients/01

Local

No

Swap

No

Deafult Lease TTL

0

Max Lease TTL

0

После этого, на вкладке Roles создайте SSH-роль с параметрами:

Параметр

Значение

Role name

worker-ssh-web-client-role

Key type

ca

Allow user certificates

Yes

Allowed users

*

TTL

28800

Max TTL

86400

Deafult critical options

{}

Allowed extentions

permit-pty

Deafult extentions

{   "permit-X11-forwarding": "",   "permit-pty": "" }

6. Обновите настройки в базе данных PAM

Чтобы добавить новые настройки в PAM, обновите данные в таблице pam.param базы данных.

UPDATE pam.param SET value = jsonb_build_object( 'ttl', '1h', 'rsa', '/v1/sshkeygen/default/keys/rsa-2048-role', 'ecdsa', '/v1/sshkeygen/default/keys/ecdsa-512-role', 'ed25519', '/v1/sshkeygen/default/keys/ed25519-512-role', 'signer_url', '/v1/ssh-web-clients/01/sign/worker-ssh-web-client-role', 'password_gen', '/v1/sys/policies/password/web-clients-passphrase-policy/generate' ) WHERE "key" = 'control';
  • 'signer_url', '/v1/ssh-web-clients/01/sign/worker-ssh-web-client-role' – роль для подписания сертификата.

  • 'ttl', '1h', — время жизни сертификата MFA SSH и Wrap-токена RDP.

  • 'rsa', '/v1/sshkeygen/default/keys/rsa-2048-role' – роли генерации пары ключей. Их может быть несколько.

  • 'password_gen', '/v1/sys/policies/password/web-clients-passphrase-policy/generate' – генератор паролей по заданной парольной политике.