Vault

Vault SSH エンジン実践ガイド: OTP と CA 署名の使い分け

2026-04-19
NicheeLab編集部

Vault の SSH エンジンは、ワンタイムパスワード(OTP)方式と、Vault を SSH CA として使う証明書署名方式の2つを提供します。両者はネットワーク要件、導入コスト、失効戦略が異なります。

本稿では、公式ドキュメントに基づく安定した動作を前提に、設計判断材料、最小構成手順、試験で問われやすい観点をまとめます。

Vault SSH エンジンの全体像と試験観点

Vault の SSH エンジンは、サーバへの SSH アクセス制御を中央集約するための仕組みです。実装としては、ユーザが一度だけ使えるパスワードを払い出す OTP モードと、Vault を SSH 認証局(CA)として公開鍵に短命の証明書を付与する CA 署名モードがあります。

Associate/Ops レベルでは、どのモードをどの条件で選ぶべきか、サーバ側の設定要件、TTL と失効の考え方、監査ログの活用、ローテーション運用が問われやすいです。OTP はサーバ側に PAM 連携のヘルパ導入が必要で、認証時に Vault と通信します。CA 署名はサーバに CA 公開鍵を信頼させる設定のみで、認証時に Vault との通信は不要です。

  • OTP は一回限り・短時間有効のパスワード。サーバは Vault にアウトバウンドで到達できる必要がある
  • CA 署名は短命の SSH 証明書を発行。サーバは TrustedUserCAKeys の設定で Vault の CA 公開鍵を信頼
  • どちらも Vault の Role でユーザやCIDR、TTL等の制約を集中管理できる

SSH OTP モードのしくみと要件

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 などの制約を設定できます。接続元や宛先ユーザを中央で制御できるため、使い捨ての踏み台用途や段階的導入に適します。

  • 要件: サーバから Vault へのアウトバウンド通信(認証時)
  • サーバ: PAM に vault-ssh-helper を組み込み、Vault のアドレスと CA を設定
  • クライアント: vault CLI で OTP を取得し、ssh パスワードとして使用
  • 特性: 一回限り、短 TTL、サーバごとにヘルパ導入が必要

SSH CA 署名モードのしくみと要件

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 とキーのローテーションで担保するのが一般的です。集中署名により大規模環境での配布・回収コストを下げられます。

  • 要件: サーバに Vault の CA 公開鍵を配布して信頼設定
  • サーバ: OpenSSH の TrustedUserCAKeys を設定し再読込
  • クライアント: 自身の公開鍵を Vault に提出して短命証明書を取得し、鍵と併用して接続
  • 特性: 短 TTL、認証時に Vault との通信不要、大規模運用に向く

OTP と CA の接続フロー

API (OTP / sign)OTP modeverify OTPCA mode (key+cert)ClientVaultTarget ServerSSH password=OTPPAM (sshd) + vault-ssh-helper (verifies OTP via Vault)sshd: TrustedUserCAKeys verifies cert (no Vault call)

OTP と CA の比較と選定指針

段階導入や踏み台用途など、サーバ側への軽微な設定変更から始めたい場合は OTP が有効です。一方で、サーバ台数やユーザ数が多い環境では CA 署名が運用負荷を大きく下げます。特にオフライン環境やゼロトラストの観点では、認証時に Vault への到達性を必要としない CA 署名が有利です。

試験では、ネットワーク到達性、サーバ側要件、失効戦略(TTL とローテーション)、Role での制御項目の違いを軸に選定根拠を答えられるかが問われます。

  • 初期導入容易性を重視: OTP
  • スケールと認証時のオフライン性を重視: CA 署名
  • 厳密な失効管理が必要: CA は短 TTL とキー・ローテーションで担保、OTP は一回限りで即時失効の性質
観点OTP モードCA 署名モード試験での要点
サーバ側要件PAM に vault-ssh-helper を導入し、Vault へ照会TrustedUserCAKeys に CA 公開鍵を配置導入成分の違いと設定箇所を答えられること
認証時のネットワークサーバから Vault へのアウトバウンド必須不要(クライアントとサーバ間のみ)到達性の有無で選定が変わる
クライアント操作OTP を取得しパスワード認証公開鍵に署名を取得し鍵+証明書で接続vault CLI サブパスの違い(otp vs sign)
失効・有効期限一回限り・短 TTL。使われた時点で無効化短 TTL が基本。中央失効は困難、キー回転で対応TTL とローテーション前提を理解する
スケーラビリティサーバごとにヘルパ導入・Vault 可用性に依存CA 公開鍵の配布と更新でスケールしやすい大規模は CA が有利
代表的ユースケース踏み台・短期的導入・細かな接続元制御開発者や自動化向けの広域配布・オフライン認証要件に応じた使い分けを説明できる

最小構成レシピ(OTP と CA)

以下は学習・検証向けの最小例です。実運用では TLS 検証、Policy の最小権限化、監査ログを必ず有効化してください。サーバ側の sshd 設定変更はメンテナンスウィンドウで行い、必ず別セッションを残して疎通確認します。

同一の Vault インスタンスで OTP と CA を併用できます。役割ごとに Role を分離し、CIDR、ユーザ、TTL を厳格化します。

  • Vault 側: SSH エンジン有効化、Role 作成(OTP/CA)
  • サーバ側: OTP は PAM 連携導入、CA は TrustedUserCAKeys 設定
  • クライアント側: OTP は password、CA は 鍵+証明書 で接続

手順例: 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]

運用の落とし穴と Associate/Ops 試験の押さえ所

OTP はサーバが認証時に Vault へ到達できないとログインできません。可用性要件に応じて Vault クラスタとネットワーク経路を冗長化します。CA 署名は認証時の到達性を必要としませんが、CA 公開鍵の配布とローテーション手順(ローリング更新と sshd リロード)の整備が肝です。

CA 署名の失効は短 TTL が前提です。個別証明書の中央失効は一般的な OpenSSH ユーザ証明書では難しいため、署名 TTL を短くし、必要に応じて CA 鍵をローテーションします。Vault 側の監査ログで誰がいつどの公開鍵に署名したかを追跡できるようにしておきます。

  • Policy の最小権限化: 署名パス(ssh/sign/role)や Role 管理に不要な write 権限を与えない
  • Role で CIDR・ユーザ・TTL を強制。max_ttl を設定して逸脱を防止
  • 監査ログを有効化し、署名イベントを相関可能にする
  • CA 公開鍵のローテーション手順を標準化。段階的に新旧鍵を併置して切替
  • 試験では「サーバ到達性がない→CA」「サーバにヘルパ導入可・細かな元制御→OTP」と即断できるかが鍵

問題で確認

Associate / Ops

問題 1

社内サーバは外部ネットワークへ出られない設計で、認証時に Vault へアウトバウンドできません。開発者は自端末から Vault に接続可能です。短命証明書で SSH を許可したい場合、正しいアプローチとサーバ側設定はどれですか。

  1. A. OTP モードを使い、サーバに vault-ssh-helper を入れて PAM で検証する
  2. B. OTP モードを使い、sshd_config の TrustedUserCAKeys だけ設定する
  3. C. CA 署名モードを使い、sshd_config の TrustedUserCAKeys に Vault の CA 公開鍵を設定する
  4. D. CA 署名モードを使い、PAM で vault-ssh-helper によるオンライン検証を行う

正解: C

サーバが認証時に Vault へ到達できない条件では、オンライン検証を必要とする OTP は不適。CA 署名モードはクライアントが事前に短命証明書を取得し、サーバは TrustedUserCAKeys で検証するだけでよい。

よくある質問

OTP は複数回使えますか?期限切れの扱いはどうなりますか?

いいえ。OTP は一回限りで、Role で定義した TTL 内に1回使用された時点で無効化されます。期限切れ後は認証に失敗します。

Vault がダウンした場合の影響は?

OTP は認証時に Vault への照会が必要なため影響を受けます。CA 署名は既に発行済みの短命証明書で認証が完結するため、証明書の有効期限内はログイン可能です。

CA 鍵のローテーションはどう行いますか?

Vault で新しい署名鍵を生成し(ssh/config/ca)、新旧の CA 公開鍵をサーバに段階的に配布します。移行期間中は両方を TrustedUserCAKeys で受け入れ、すべてのクライアント証明書が新 CA に切り替わったら旧 CA を削除します。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Vault

Vault のコア概念を最短距離で理解する:Secret / Auth / Policy / Token

HashiCorp Vault Associate レベルで押さえるべきコア概念(Secret Engine、Auth ...

Vault

Vault Operations Professional: 上位資格としての範囲を実務目線で押さえる

HashiCorp Vault Operations Professional(Ops Pro)の出題範囲を、Assoc...

Vault

Vaultにおけるパスベースのルーティング: マウントとAPI構造を読み解く

HashiCorp Vaultのパスベースのルーティングを、マウント設計とAPIパスの観点から整理。Associateレ...

Vault

Vault Tokens の基礎: 認証の起点となる概念

HashiCorp Vault におけるトークンの役割、種類、ライフサイクル、ポリシー連携、設計パターンをAssocia...

Vault

Vault のトークン種類を正しく使い分ける: service / batch 実践

HashiCorp Vault Associate 向けの試験対策と実務運用を両立させた、service トークンと b...

Vaultの記事一覧 (101件)
© 2026 NicheeLab All rights reserved.