Vault の SSH エンジンは、ワンタイムパスワード(OTP)方式と、Vault を SSH CA として使う証明書署名方式の2つを提供します。両者はネットワーク要件、導入コスト、失効戦略が異なります。
本稿では、公式ドキュメントに基づく安定した動作を前提に、設計判断材料、最小構成手順、試験で問われやすい観点をまとめます。
Vault の SSH エンジンは、サーバへの SSH アクセス制御を中央集約するための仕組みです。実装としては、ユーザが一度だけ使えるパスワードを払い出す OTP モードと、Vault を SSH 認証局(CA)として公開鍵に短命の証明書を付与する CA 署名モードがあります。
Associate/Ops レベルでは、どのモードをどの条件で選ぶべきか、サーバ側の設定要件、TTL と失効の考え方、監査ログの活用、ローテーション運用が問われやすいです。OTP はサーバ側に PAM 連携のヘルパ導入が必要で、認証時に Vault と通信します。CA 署名はサーバに CA 公開鍵を信頼させる設定のみで、認証時に Vault との通信は不要です。
OTP モードでは、ユーザは Vault から一度だけ使えるパスワードを取得し、それを SSH のパスワード認証として利用します。サーバ側は PAM 連携の vault-ssh-helper 等を導入し、受け取ったパスワード(OTP)を Vault API に照会して正当性を検証します。OTP は1回のみ有効で、短い TTL が設定されます。
Vault 側では SSH エンジンを有効化し、key_type=otp の Role を作成します。Role には default_user、allowed_users、cidr_list、port、ttl、max_ttl などの制約を設定できます。接続元や宛先ユーザを中央で制御できるため、使い捨ての踏み台用途や段階的導入に適します。
CA 署名モードでは、Vault が SSH のユーザ用 CA として署名鍵を保持し、ユーザの公開鍵に有効期限やプリンシパル等を含む証明書を付与します。サーバは sshd_config の TrustedUserCAKeys で Vault の CA 公開鍵を信頼し、接続時に提示される鍵+証明書の検証のみで認証を完結できます。認証時にサーバが Vault へ通信する必要はありません。
Vault 側の Role(key_type=ca)では、allowed_users や default_user、ttl/max_ttl、allowed_extensions、default_extensions、allowed_critical_options などを定義して署名ポリシーを制御します。失効は短い TTL とキーのローテーションで担保するのが一般的です。集中署名により大規模環境での配布・回収コストを下げられます。
OTP と CA の接続フロー
段階導入や踏み台用途など、サーバ側への軽微な設定変更から始めたい場合は OTP が有効です。一方で、サーバ台数やユーザ数が多い環境では CA 署名が運用負荷を大きく下げます。特にオフライン環境やゼロトラストの観点では、認証時に Vault への到達性を必要としない CA 署名が有利です。
試験では、ネットワーク到達性、サーバ側要件、失効戦略(TTL とローテーション)、Role での制御項目の違いを軸に選定根拠を答えられるかが問われます。
| 観点 | OTP モード | CA 署名モード | 試験での要点 |
|---|---|---|---|
| サーバ側要件 | PAM に vault-ssh-helper を導入し、Vault へ照会 | TrustedUserCAKeys に CA 公開鍵を配置 | 導入成分の違いと設定箇所を答えられること |
| 認証時のネットワーク | サーバから Vault へのアウトバウンド必須 | 不要(クライアントとサーバ間のみ) | 到達性の有無で選定が変わる |
| クライアント操作 | OTP を取得しパスワード認証 | 公開鍵に署名を取得し鍵+証明書で接続 | vault CLI サブパスの違い(otp vs sign) |
| 失効・有効期限 | 一回限り・短 TTL。使われた時点で無効化 | 短 TTL が基本。中央失効は困難、キー回転で対応 | TTL とローテーション前提を理解する |
| スケーラビリティ | サーバごとにヘルパ導入・Vault 可用性に依存 | CA 公開鍵の配布と更新でスケールしやすい | 大規模は CA が有利 |
| 代表的ユースケース | 踏み台・短期的導入・細かな接続元制御 | 開発者や自動化向けの広域配布・オフライン認証 | 要件に応じた使い分けを説明できる |
以下は学習・検証向けの最小例です。実運用では TLS 検証、Policy の最小権限化、監査ログを必ず有効化してください。サーバ側の sshd 設定変更はメンテナンスウィンドウで行い、必ず別セッションを残して疎通確認します。
同一の Vault インスタンスで OTP と CA を併用できます。役割ごとに Role を分離し、CIDR、ユーザ、TTL を厳格化します。
手順例: Vault 側設定、サーバ設定、接続
# 1) Vault 側: SSH エンジンを有効化
vault secrets enable ssh
# 2) OTP モード: Role を作成(例)
vault write ssh/roles/otp-admin \
key_type=otp \
default_user=ubuntu \
allowed_users=ubuntu \
cidr_list=10.0.0.0/24 \
port=22 \
ttl=5m
# 3) サーバ側(OTP): vault-ssh-helper の設定例
# /etc/vault-ssh-helper.d/config.hcl
# vault_addr = "https://vault.example.com:8200"
# tls_skip_verify = false
# tls_ca_cert = "/etc/ssl/certs/vault-ca.pem"
# allowed_roles = "otp-admin"
# PAM 設定例(OpenSSH): /etc/pam.d/sshd に追加
# auth requisite pam_exec.so quiet expose_authtok \
# /usr/local/bin/vault-ssh-helper -config=/etc/vault-ssh-helper.d/config.hcl
# クライアント(OTP): OTP を取得して SSH(パスワード認証)
# Vault にログイン済みとする
auth_output=$(vault ssh -mode=otp -role=otp-admin [email protected])
echo "$auth_output"
# 表示された OTP をパスワードとして入力
# 4) CA 署名モード: 署名鍵を生成
vault write ssh/config/ca generate_signing_key=true
# CA 公開鍵を取得し、サーバへ配布
vault read -field=public_key ssh/config/ca > trusted-user-ca-keys.pem
# Role 作成(CA)
vault write ssh/roles/devops \
key_type=ca \
allow_user_certificates=true \
allowed_users=ubuntu \
default_user=ubuntu \
ttl=30m \
allowed_extensions=permit-pty
# サーバ側(CA): sshd_config の設定
# TrustedUserCAKeys /etc/ssh/trusted-user-ca-keys.pem
# PubkeyAuthentication yes
# (必要に応じて)AuthorizedPrincipalsFile /etc/ssh/auth_principals/%u
# 反映: systemctl reload sshd など
# クライアント(CA): 自分の公開鍵に署名を取得
vault write -field=signed_key ssh/sign/devops \
public_key=@$HOME/.ssh/id_rsa.pub > $HOME/.ssh/id_rsa-cert.pub
# 署名付きで接続(鍵+証明書)
ssh -i $HOME/.ssh/id_rsa -i $HOME/.ssh/id_rsa-cert.pub [email protected]OTP はサーバが認証時に Vault へ到達できないとログインできません。可用性要件に応じて Vault クラスタとネットワーク経路を冗長化します。CA 署名は認証時の到達性を必要としませんが、CA 公開鍵の配布とローテーション手順(ローリング更新と sshd リロード)の整備が肝です。
CA 署名の失効は短 TTL が前提です。個別証明書の中央失効は一般的な OpenSSH ユーザ証明書では難しいため、署名 TTL を短くし、必要に応じて CA 鍵をローテーションします。Vault 側の監査ログで誰がいつどの公開鍵に署名したかを追跡できるようにしておきます。
Associate / Ops
問題 1
社内サーバは外部ネットワークへ出られない設計で、認証時に Vault へアウトバウンドできません。開発者は自端末から Vault に接続可能です。短命証明書で SSH を許可したい場合、正しいアプローチとサーバ側設定はどれですか。
正解: C
サーバが認証時に Vault へ到達できない条件では、オンライン検証を必要とする OTP は不適。CA 署名モードはクライアントが事前に短命証明書を取得し、サーバは TrustedUserCAKeys で検証するだけでよい。
OTP は複数回使えますか?期限切れの扱いはどうなりますか?
いいえ。OTP は一回限りで、Role で定義した TTL 内に1回使用された時点で無効化されます。期限切れ後は認証に失敗します。
Vault がダウンした場合の影響は?
OTP は認証時に Vault への照会が必要なため影響を受けます。CA 署名は既に発行済みの短命証明書で認証が完結するため、証明書の有効期限内はログイン可能です。
CA 鍵のローテーションはどう行いますか?
Vault で新しい署名鍵を生成し(ssh/config/ca)、新旧の CA 公開鍵をサーバに段階的に配布します。移行期間中は両方を TrustedUserCAKeys で受け入れ、すべてのクライアント証明書が新 CA に切り替わったら旧 CA を削除します。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Vault のコア概念を最短距離で理解する:Secret / Auth / Policy / Token
HashiCorp Vault Associate レベルで押さえるべきコア概念(Secret Engine、Auth ...
Vault Operations Professional: 上位資格としての範囲を実務目線で押さえる
HashiCorp Vault Operations Professional(Ops Pro)の出題範囲を、Assoc...
Vaultにおけるパスベースのルーティング: マウントとAPI構造を読み解く
HashiCorp Vaultのパスベースのルーティングを、マウント設計とAPIパスの観点から整理。Associateレ...
Vault Tokens の基礎: 認証の起点となる概念
HashiCorp Vault におけるトークンの役割、種類、ライフサイクル、ポリシー連携、設計パターンをAssocia...
Vault のトークン種類を正しく使い分ける: service / batch 実践
HashiCorp Vault Associate 向けの試験対策と実務運用を両立させた、service トークンと b...