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

Bài 16: SSH Secrets Engine và 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).

🔒 DevSecOps — Bài 16 Bài 16: SSH Secrets Engine và TOTP

HashiCorp Vault từ Cơ bản đến Nâng cao

Phần 4: Secrets Engines nâng cao

xdev.asia

1. SSH Secrets Engine Overview

SSH Secrets Engine giải quyết bài toán quản lý SSH access trong enterprise. Thay vì phân phối SSH keys thủ công (và không bao giờ revoke), Vault cung cấp hai cơ chế:

ModeCách hoạt độngRecommendation
Signed Certificates (CA)Vault sign SSH public key → certificate ngắn hạn✅ Recommended
OTPVault sinh one-time password để SSHLegacy, cần vault-ssh-helper

2. SSH CA Mode (Signed Certificates)

Kiến trúc

┌──────────┐   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

Cấu hình SSH Server tin tưởng Vault CA

# 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

Tạo roles

# 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)

Lưu ý: OTP mode yêu cầu cài đặt vault-ssh-helper trên target server để verify OTP với Vault. CA mode không cần cài đặt gì thêm trên server.

4. TOTP Secrets Engine

TOTP Secrets Engine cho phép Vault sinh và validate TOTP (Time-based One-Time Password) codes theo RFC 6238.

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

Thay vì mỗi nhân viên tự quản lý 2FA codes trên điện thoại cá nhân, Vault có thể là nơi lưu trữ trung tâm cho các TOTP keys — cho phép team rotation và không mất codes khi đổi điện thoại.

5. LDAP Secrets Engine

LDAP Secrets Engine (khác với LDAP Auth Method) sinh dynamic LDAP credentials — tạo và quản lý LDAP service accounts tự động.

# 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 thêm hỗ trợ RACF passphrases cho mainframe environments — cho phép passphrases dài hơn 8 ký tự truyền thống:

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

6. Tổng kết

  • SSH CA Mode — recommended, sign certificates ngắn hạn, không cần agent trên server

  • SSH OTP Mode — one-time passwords, cần vault-ssh-helper

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

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

  • RACF Passphrase (1.21) — hỗ trợ mainframe environments

Bài tiếp theo sẽ tìm hiểu Transform và Tokenization — data protection cho PCI DSS, PII, và compliance requirements.