Chuyển đến nội dung chính

レッスン 16: SSH シークレット エンジンと TOTP

SSH Secrets Engine — Signed SSH Certificates (CA mode), OTP mode, Certificate authority setup, Host key signing. TOTP Secrets Engine. LDAP Secrets Engine — dynamic LDAP credentials, RACF passphrase support (1.21).

🔒 D​​evSecOps — レッスン 16 レッスン 16: SSH シークレット エンジンと TOTP

HashiCorp Vault の基本から上級まで

パート 4: 高度なシークレット エンジン

xdev.asia

1. SSH Secrets Engine Overview

SSH Secrets Engine は、企業における SSH アクセスの管理の問題を解決します。 SSH キーを手動で配布する (そして決して取り消さない) 代わりに、Vault は 2 つのメカニズムを提供します。

が必要です
モード仕組み推奨
署名付き証明書 (CA)Vault 署名 SSH 公開キー → 短期証明書✅ 推奨
OTPVault は SSHLegacy へのワンタイム パスワードを生成します。vault-ssh-helper

2. SSH CA Mode (Signed Certificates)

アーキテクチャ

┌──────────┐   1. Sign my key     ┌──────────────┐
│   User   │ ───────────────────▶ │    Vault     │
│          │                      │  SSH CA      │
│          │   2. SSH Certificate │              │
│          │ ◀─────────────────── │              │
│          │                      └──────────────┘
│          │
│          │   3. SSH with certificate
│          │ ───────────────────▶ ┌──────────────┐
│          │                      │   Server     │
│          │   4. Verify cert     │  (trusts CA) │
│          │      against CA      │              │
└──────────┘                      └──────────────┘

Setup SSH CA

# Enable SSH secrets engine
vault secrets enable -path=ssh-client-signer ssh

# Sinh CA key pair (hoặc import existing)
vault write ssh-client-signer/config/ca generate_signing_key=true

# Lấy CA public key
vault read -field=public_key ssh-client-signer/config/ca > /etc/ssh/trusted-user-ca-keys.pem

Vault CA を信頼するように SSH サーバーを構成する

# Trên mỗi SSH server — thêm vào /etc/ssh/sshd_config
TrustedUserCAKeys /etc/ssh/trusted-user-ca-keys.pem

# Restart sshd
sudo systemctl restart sshd

役割の作成

# Role cho developers — SSH vào dev servers
vault write ssh-client-signer/roles/dev-ssh \
  key_type=ca \
  default_user=developer \
  allowed_users="developer,deploy" \
  allowed_extensions="permit-pty,permit-port-forwarding" \
  default_extensions='{"permit-pty": ""}' \
  ttl=8h \
  max_ttl=24h \
  allow_user_certificates=true \
  algorithm_signer=rsa-sha2-256

# Role cho admin — SSH vào mọi server
vault write ssh-client-signer/roles/admin-ssh \
  key_type=ca \
  default_user=admin \
  allowed_users="admin,root,ubuntu" \
  allowed_extensions="permit-pty,permit-port-forwarding,permit-agent-forwarding" \
  default_extensions='{"permit-pty": ""}' \
  ttl=2h \
  max_ttl=8h \
  allow_user_certificates=true

Sign SSH key

# Sinh SSH key pair nếu chưa có
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""

# Sign public key
vault write -field=signed_key ssh-client-signer/sign/dev-ssh \
  public_key=@$HOME/.ssh/id_ed25519.pub \
  valid_principals="developer" \
  ttl=8h > ~/.ssh/id_ed25519-cert.pub

# Kiểm tra certificate
ssh-keygen -L -f ~/.ssh/id_ed25519-cert.pub

# SSH với certificate
ssh -i ~/.ssh/id_ed25519 [email protected]

Host Key Signing

# Enable SSH engine cho host keys
vault secrets enable -path=ssh-host-signer ssh

# Sinh host CA
vault write ssh-host-signer/config/ca generate_signing_key=true

# Tạo host role
vault write ssh-host-signer/roles/host-cert \
  key_type=ca \
  ttl=87600h \
  allow_host_certificates=true \
  allowed_domains="company.com,internal.company.com" \
  allow_subdomains=true

# Sign host key
vault write -field=signed_key ssh-host-signer/sign/host-cert \
  cert_type=host \
  public_key=@/etc/ssh/ssh_host_ed25519_key.pub \
  valid_principals="server1.company.com" \
  > /etc/ssh/ssh_host_ed25519_key-cert.pub

# Cấu hình server sử dụng host certificate
# /etc/ssh/sshd_config
# HostCertificate /etc/ssh/ssh_host_ed25519_key-cert.pub

3. SSH OTP Mode

# Enable
vault secrets enable -path=ssh-otp ssh

# Tạo role
vault write ssh-otp/roles/otp-role \
  key_type=otp \
  default_user=ubuntu \
  cidr_list="10.0.0.0/8"

# Sinh OTP
vault write ssh-otp/creds/otp-role \
  ip=10.0.1.50 \
  username=ubuntu
# key: 1a2b3c4d-5e6f-7g8h

# SSH với OTP
ssh [email protected]
# Password: 1a2b3c4d-5e6f-7g8h  (one-time use)

注: OTP モードでは、Vault で OTP を検証するためにターゲット サーバーに vault-ssh-helper をインストールする必要があります。 CA モードでは、サーバー上で追加の設定は必要ありません。

4. TOTP Secrets Engine

TOTP Secrets Engine により、Vault は RFC 6238 に従って TOTP (時間ベースのワンタイム パスワード) コードを生成および検証できます。

TOTP Generator Mode

# Enable TOTP
vault secrets enable totp

# Tạo key từ URL (khi setup 2FA cho service)
vault write totp/keys/github \
  url="otpauth://totp/GitHub:john.doe?secret=JBSWY3DPEHPK3PXP&issuer=GitHub"

# Hoặc tạo key thủ công
vault write totp/keys/aws-console \
  generate=true \
  issuer="AWS" \
  account_name="[email protected]" \
  period=30 \
  digits=6 \
  algorithm=SHA1

# Sinh TOTP code
vault read totp/code/github
# code: 123456

# Validate code
vault write totp/code/github code=123456
# valid: true

Use case: Centralized 2FA Management

各従業員が各自の電話機で 2FA コードを管理する代わりに、Vault を TOTP キーの中央保管場所として使用できます。これにより、チームのローテーションが可能になり、電話機を変更するときにコードを失うことがなくなります。

5. LDAP Secrets Engine

LDAP シークレット エンジン (LDAP 認証方法とは異なります) 動的 LDAP 資格情報 を生成します — LDAP サービス アカウントを自動的に作成および管理します。

# Enable LDAP secrets engine
vault secrets enable ldap

# Cấu hình kết nối
vault write ldap/config \
  binddn="cn=admin,dc=company,dc=com" \
  bindpass="adminpassword" \
  url="ldaps://ldap.company.com" \
  schema="openldap"

# Tạo dynamic role
vault write ldap/role/dynamic-svc \
  [email protected] \
  [email protected] \
  [email protected] \
  default_ttl=1h \
  max_ttl=24h

# Tạo static role (password rotation)
vault write ldap/static-role/svc-account \
  dn="cn=svc-app,ou=services,dc=company,dc=com" \
  username="svc-app" \
  rotation_period=24h

# Lấy dynamic credentials
vault read ldap/creds/dynamic-svc

RACF Passphrase Support (Vault 1.21)

Vault 1.21 では、メインフレーム環境に RACF パスフレーズのサポートが追加され、従来の 8 文字より長いパスフレーズが許可されます:

vault write ldap/config \
  schema="racf" \
  password_policy="racf-passphrase-policy"

6。概要

  • SSH CA モード — 推奨、短期署名証明書、サーバーにエージェントは不要

  • SSH OTP モード — ワンタイム パスワード、vault-ssh-helper

  • が必要
  • TOTP Engine — sinh/validate TOTP codes, centralized 2FA management

  • LDAP Secrets Engine — dynamic LDAP credentials, static role rotation

  • RACF パスフレーズ (1.21) — メインフレーム環境サポート

次の記事では、変換とトークン化 — PCI DSS、PII、およびコンプライアンス要件のデータ保護について説明します。