Vault — это инструмент для управления секретами от компании Hashicorp известной также другими интересными тулами, такими как Consul, Nomad, Terraform, Vagrant, Packer и прочими.
Vault удобен тем, что может хранить различные типы секретов, например одноразовые пароли для SSH, доступы к БД, облачным сервисам и прочие key-value варианты. Получается некий аналог keepass/lastpass и google authenticator pam.
Удобство хашикорповских тулов заключается в том, что они распространяются единым бинарником и легко настраиваются, в том числе и Vault. У Vault неплохая документация, по которой в принципе все понятно.
В данной заметке я опишу вариант использования One-Time Passwords для логина в SSH, вместо мучений с менеджментом ssh-ключей.
Как установить Vault описано здесь. Ничего сложного нет, достаточно только лишь скачать бинарник и запустить его.
В моем случае я разворачивал Vault в амазоне с помощью packer и terraform. Если у кого-то будет похожий кейс, то рекомендую этот репозиторий.
Окей, Vault мы установили, мы можем залогиниться в веб-интерфейс с помощью рутового токена, создать SSH engine и некоторую роль.
Для того чтобы можно было генерировать одноразовые токены, на всех машинах, на которые мы хотим соединяться должен быть установлен ssh-helper. Опять же, вся установка сводится к скачиванию бинарника и настройке пары конфигов.
Качаем и устанавливаем helper:
VSH_VERSION=0.1.4
SSHD_CONFIG_PATH=/etc/ssh/sshd_config
PAMD_CONFIG_PATH=/etc/pam.d/sshd
wget https://releases.hashicorp.com/vault-ssh-helper/${VSH_VERSION}/vault-ssh-helper_${VSH_VERSION}_linux_amd64.zip
unzip vault-ssh-helper_${VSH_VERSION}_linux_amd64.zip
mv vault-ssh-helper /usr/local/bin/
Конфигурим его:
mkdir /etc/vault-helper.d/
cat << EOF > /etc/vault-helper.d/config.hcl
vault_addr = "https://vault.yourdomain.org:443"
ssh_mount_point = "ssh"
tls_skip_verify = true
allowed_roles = "*"
allowed_cidr_list="0.0.0.0/0"
EOF
Также настраиваем конфигурацию PAM:
sed -i -e 's/^@include common-auth/#@include common-auth/g' ${PAMD_CONFIG_PATH}
echo "auth requisite pam_exec.so quiet expose_authtok log=/tmp/vaultssh.log /usr/local/bin/vault-ssh-helper -config=/etc/vault-helper.d/config.hcl" | tee -a ${PAMD_CONFIG_PATH}
echo "auth optional pam_unix.so not_set_pass use_first_pass nodelay" | tee -a ${PAMD_CONFIG_PATH}
И конфигурацию SSH:
sed -i -e 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/g' ${SSHD_CONFIG_PATH}
sed -i -e 's/UsePAM no/UsePAM yes/g' ${SSHD_CONFIG_PATH}
sed -i -e 's/PasswordAuthentication yes/PasswordAuthentication no/g' ${SSHD_CONFIG_PATH}
systemctl restart sshd
Ноду на которую мы будем соединяться мы настроили, далее снова идем на ноду с Vault и включаем engine SSH:
vault secrets enable ssh
Создаем роль:
vault write ssh/roles/otp_key_role key_type=otp default_user=ubuntu cidr_list=0.0.0.0/0
Success! Data written to: ssh/roles/otp_key_role
И генерируем доступы:
vault write ssh/creds/otp_key_role ip=192.168.10.12
Key Value
--- -----
lease_id ssh/creds/otp_key_role/edc499e3-c100-405f-203b-c775d29c0233
lease_duration 192h
lease_renewable false
ip 192.168.10.12
key ce307d33-84d8-0794-f284-b8b3c8e43699
key_type otp
port 22
username ubuntu
Пробуем соединиться с любой машины с этими доступами:
ssh [email protected]
Password: ce307d33-84d8-0794-f284-b8b3c8e43699
Если же попробуете с этими доступами соединиться повторно, то ничего не выйдет, так как они одноразовые.
Генерировать доступы можно и через веб-интерфейс, нужно лишь в настройках включить вход по LDAP или GitHub например, настроить полиси для юзеров (например определенному юзеру разрешено заходить только на разрешенные ноды).
Vault удобен тем, что может хранить различные типы секретов, например одноразовые пароли для SSH, доступы к БД, облачным сервисам и прочие key-value варианты. Получается некий аналог keepass/lastpass и google authenticator pam.
Удобство хашикорповских тулов заключается в том, что они распространяются единым бинарником и легко настраиваются, в том числе и Vault. У Vault неплохая документация, по которой в принципе все понятно.
В данной заметке я опишу вариант использования One-Time Passwords для логина в SSH, вместо мучений с менеджментом ssh-ключей.
Как установить Vault описано здесь. Ничего сложного нет, достаточно только лишь скачать бинарник и запустить его.
В моем случае я разворачивал Vault в амазоне с помощью packer и terraform. Если у кого-то будет похожий кейс, то рекомендую этот репозиторий.
Окей, Vault мы установили, мы можем залогиниться в веб-интерфейс с помощью рутового токена, создать SSH engine и некоторую роль.
Для того чтобы можно было генерировать одноразовые токены, на всех машинах, на которые мы хотим соединяться должен быть установлен ssh-helper. Опять же, вся установка сводится к скачиванию бинарника и настройке пары конфигов.
Качаем и устанавливаем helper:
VSH_VERSION=0.1.4
SSHD_CONFIG_PATH=/etc/ssh/sshd_config
PAMD_CONFIG_PATH=/etc/pam.d/sshd
wget https://releases.hashicorp.com/vault-ssh-helper/${VSH_VERSION}/vault-ssh-helper_${VSH_VERSION}_linux_amd64.zip
unzip vault-ssh-helper_${VSH_VERSION}_linux_amd64.zip
mv vault-ssh-helper /usr/local/bin/
Конфигурим его:
mkdir /etc/vault-helper.d/
cat << EOF > /etc/vault-helper.d/config.hcl
vault_addr = "https://vault.yourdomain.org:443"
ssh_mount_point = "ssh"
tls_skip_verify = true
allowed_roles = "*"
allowed_cidr_list="0.0.0.0/0"
EOF
Также настраиваем конфигурацию PAM:
sed -i -e 's/^@include common-auth/#@include common-auth/g' ${PAMD_CONFIG_PATH}
echo "auth requisite pam_exec.so quiet expose_authtok log=/tmp/vaultssh.log /usr/local/bin/vault-ssh-helper -config=/etc/vault-helper.d/config.hcl" | tee -a ${PAMD_CONFIG_PATH}
echo "auth optional pam_unix.so not_set_pass use_first_pass nodelay" | tee -a ${PAMD_CONFIG_PATH}
И конфигурацию SSH:
sed -i -e 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/g' ${SSHD_CONFIG_PATH}
sed -i -e 's/UsePAM no/UsePAM yes/g' ${SSHD_CONFIG_PATH}
sed -i -e 's/PasswordAuthentication yes/PasswordAuthentication no/g' ${SSHD_CONFIG_PATH}
systemctl restart sshd
Ноду на которую мы будем соединяться мы настроили, далее снова идем на ноду с Vault и включаем engine SSH:
vault secrets enable ssh
Создаем роль:
vault write ssh/roles/otp_key_role key_type=otp default_user=ubuntu cidr_list=0.0.0.0/0
Success! Data written to: ssh/roles/otp_key_role
И генерируем доступы:
vault write ssh/creds/otp_key_role ip=192.168.10.12
Key Value
--- -----
lease_id ssh/creds/otp_key_role/edc499e3-c100-405f-203b-c775d29c0233
lease_duration 192h
lease_renewable false
ip 192.168.10.12
key ce307d33-84d8-0794-f284-b8b3c8e43699
key_type otp
port 22
username ubuntu
Пробуем соединиться с любой машины с этими доступами:
ssh [email protected]
Password: ce307d33-84d8-0794-f284-b8b3c8e43699
Если же попробуете с этими доступами соединиться повторно, то ничего не выйдет, так как они одноразовые.
Генерировать доступы можно и через веб-интерфейс, нужно лишь в настройках включить вход по LDAP или GitHub например, настроить полиси для юзеров (например определенному юзеру разрешено заходить только на разрешенные ноды).
Комментариев нет:
Отправить комментарий