2019年6月17日月曜日

Vault の One-Time SSH Password を試してみた

概要

登場マシンは本来 3 台以上だが今回は検証なので 2 台で実施

  • Vault サーバ (192.168.99.200 - Ubuntu)
  • SSH されるサーバ (192.168.99.200 - Ubuntu)
  • SSH するマシン (192.168.99.1 - Mac)

それぞれで行う作業があるので設定方法を紹介
実際に OTP を発行して接続テストも実施した

環境

  • サーバ
    • Ubuntu 16.04 LTS
    • vault 1.1.3
    • vault-ssh-helper 0.1.4
  • クライアント
    • macOS 10.14.5

Vault サーバ構築 (Ubuntu)

Vault インストール

  • mkdir bin
  • wget 'https://releases.hashicorp.com/vault/1.1.3/vault_1.1.3_linux_amd64.zip'
  • unzip vault_1.1.3_linux_amd64.zip
  • mv vault bin
  • vault server -dev -dev-listen-address=0.0.0.0:8200

SSH されるサーバ設定 (Ubuntu)

vault-ssh-helper インストール

  • wget https://releases.hashicorp.com/vault-ssh-helper/0.1.4/vault-ssh-helper_0.1.4_linux_amd64.zip
  • sudo unzip vault-ssh-helper_0.1.4_linux_amd64.zip -d /usr/local/bin
  • sudo chmod 0755 /usr/local/bin/vault-ssh-helper
  • sudo chown root:root /usr/local/bin/vault-ssh-helper

config.hcl ファイル作成

  • sudo mkdir -p /etc/vault-ssh-helper.d/
  • sudo touch /etc/vault-ssh-helper.d/config.hcl
  • sudo vim /etc/vault-ssh-helper.d/config.hcl
vault_addr = "http://192.168.99.200:8200:8200"
ssh_mount_point = "ssh"
tls_skip_verify = true
allowed_roles = "*"

/etc/pam.d/sshd 編集

  • sudo vim /etc/pam.d/sshd
# PAM configuration for the Secure Shell service

# Standard Un*x authentication.
# @include common-auth
auth requisite pam_exec.so quiet expose_authtok log=/tmp/vaultssh.log /usr/local/bin/vault-ssh-helper -dev -config=/etc/vault-ssh-helper.d/config.hcl
auth optional pam_unix.so not_set_pass use_first_pass nodelay

/etc/ssh/sshd_config 編集

  • vim sudo /etc/ssh/sshd_config
ChallengeResponseAuthentication yes
PasswordAuthentication no
UsePAM yes

ssd 再起動

  • sudo systemctl restart sshd

Vault サーバ設定 (Ubuntu)

  • export VAULT_ADDR='http://192.168.99.200:8200'
  • vault secrets enable ssh
  • vault write ssh/roles/otp_key_role key_type=otp default_user=ubuntu cidr_list=0.0.0.0/0

SSH するマシン (Mac)

  • export VAULT_ADDR='http://192.168.99.200:8200'
  • vault login s.sizM2TmC2nc5pXwAFYchpl1L

ここのトークンは -dev で Vault サーバを起動した際に表示されるトークンを使用する
本来であればちゃんとポリシーを作成してから専用のトークンを発行する

  • vault write ssh/creds/otp_key_role ip=192.168.99.200
Key                Value
---                -----
lease_id           ssh/creds/otp_key_role/DSULrJFHq7HiZQ7sEnDFkOgP
lease_duration     768h
lease_renewable    false
ip                 192.168.99.200
key                36899d1d-9f28-87e5-649f-58cfe3a80922
key_type           otp
port               22
username           ubuntu
  • ssh ubuntu@192.168.99.200

36899d1d-9f28-87e5-649f-58cfe3a80922 をパスワードに入力してログインできることを確認する

ワインラインでもできる

sshpass コマンド

  • vault ssh -role otp_key_role -mode otp -strict-host-key-checking=no ubuntu@192.168.99.200

最後に

SSH するリモートホストの設定が一番大変なので、そこを自動化できればあとはクライアントが毎回 write ssh/creds/otp_key_role するだけなのでセキュアなログインを実現できる

鍵認証の場合に鍵を配布する必要もなくなる

key_type=otp で複数のユーザが登録可能かどうか要調査
Mac で login したトークンが -dev の root トークンなので本番では使えない
実際はそこのトークン払い出し戦略は考える必要がありそう

参考サイト

0 件のコメント:

コメントを投稿