Настройка кэширования 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. Создание парольной политики, проверка генерации пароля
Создайте 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"Проверьте, что пароль по созданной политике генерируется корректно:
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 |
|
Local |
|
Swap |
|
Deafult Lease TTL |
|
Max Lease TTL |
|
После этого, на вкладке Roles создайте SSH-роль с параметрами:
Параметр | Значение |
Role name |
|
Key type |
|
Allow user certificates |
|
Allowed users |
|
TTL |
|
Max TTL |
|
Deafult critical options |
|
Allowed extentions |
|
Deafult extentions |
|
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'– генератор паролей по заданной парольной политике.