Vault Hands-on

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。
本文缩写(英文全称与中文含义)
缩写 英文全称/名称 中文含义
API Application Programming Interface 应用程序编程接口
CA Certificate Authority 证书颁发机构
CLI Command-Line Interface 命令行接口
CRL Certificate Revocation List 证书吊销列表
HA High Availability 高可用
KV Key-Value 键值存储模型
OCSP Online Certificate Status Protocol 在线证书状态协议
PKI Public Key Infrastructure 公钥基础设施
SAN Subject Alternative Name 证书主题备用名称,用于声明域名或 IP
SHA256 Secure Hash Algorithm 256-bit 256 位安全散列算法,常写为 SHA-256
TLS Transport Layer Security 传输层安全协议

1. 本机实验#

准备 Vault CLI、jq、Bash。macOS 可使用官方 tap,或从 发行站 下载二进制并核对签名与 SHA256:

brew tap hashicorp/tap
brew install hashicorp/tap/vault jq
vault version

终端 A 启动仅监听本机的临时 dev server:

vault server -dev -dev-listen-address=127.0.0.1:8200 -dev-root-token-id=lab-only-root -dev-no-store-token

dev 模式无持久性、不使用生产 TLS,也不代表 HA。只放合成数据,终端日志包含实验管理凭据。

终端 B:

export VAULT_ADDR=http://127.0.0.1:8200
export VAULT_TOKEN=lab-only-root
umask 077
VAULT_LAB_DIR=$(mktemp -d)
cd "$VAULT_LAB_DIR"
vault status

2. KV v2:版本与恢复#

vault secrets enable -path=kv kv-v2
vault kv put -mount=kv prod/orders/config api_token=EXAMPLE_ONLY_v1
vault kv put -mount=kv -cas=1 prod/orders/config api_token=EXAMPLE_ONLY_v2

vault kv get -mount=kv -version=1 prod/orders/config
vault kv metadata get -mount=kv prod/orders/config

# 软删除最新版本;版本 2 可恢复。
vault kv delete -mount=kv prod/orders/config
vault kv undelete -mount=kv -versions=2 prod/orders/config

-cas=1 要求当前版本为 1,避免覆盖并发更新;当前版本不同应重新读取并决策。destroy 永久删除指定版本,metadata delete 删除整条记录及版本历史,不用作普通回滚。

生产通过受限文件输入,避免把真实 secret 直接写入命令历史:vault kv put -mount=kv prod/orders/config @secret.json。文件权限、临时留存与删除需受控。KV v2

3. 最小 Policy 与 AppRole#

保存 orders-read.hcl:

path "kv/data/prod/orders/config" {
  capabilities = ["read"]
}

以管理员身份创建策略和一次性登录凭据:

vault policy write orders-read orders-read.hcl
vault auth enable approle
vault write auth/approle/role/orders-lab token_policies=orders-read token_ttl=10m token_max_ttl=30m secret_id_ttl=5m secret_id_num_uses=1

vault read -field=role_id auth/approle/role/orders-lab/role-id > role-id.txt
vault write -wrap-ttl=2m -format=json -f auth/approle/role/orders-lab/secret-id > wrapped.json

真实交付中由不同受控路径分发 RoleID 和 wrapping token;应用只 unwrap 一次。实验在同目录演示交接:

VAULT_TOKEN="$(jq -r '.wrap_info.token' wrapped.json)" vault unwrap -format=json > secret-id.json
jq -r '.data.secret_id' secret-id.json | tr -d '\n' > secret-id.txt

vault write -format=json auth/approle/login role_id=@role-id.txt secret_id=@secret-id.txt > login.json

用应用 token 验证,只输出版本号:

(
  export VAULT_TOKEN="$(jq -r '.auth.client_token' login.json)"
  vault kv get -format=json -mount=kv prod/orders/config | jq '.data.metadata.version'
  vault token capabilities kv/data/prod/payments/config
  vault token revoke -self
)

预期订单可读、payments 返回 deny,撤销后 token 不可再使用。一次性 SecretID 不能支持 Agent 无限重新登录;长期服务优先使用平台身份,或设计受控的 SecretID 重新交付机制。AppRole

4. Transit:加密与密钥轮换#

vault secrets enable transit
vault write -f transit/keys/orders-pii

printf '%s' 'synthetic-customer-data' | base64 | tr -d '\n' > plaintext.b64
vault write -format=json transit/encrypt/orders-pii plaintext=@plaintext.b64 > encrypted.json
jq -r '.data.ciphertext' encrypted.json | tr -d '\n' > ciphertext.txt

vault write -format=json transit/decrypt/orders-pii ciphertext=@ciphertext.txt > decrypted.json

vault write -f transit/keys/orders-pii/rotate
vault write -format=json transit/rewrap/orders-pii ciphertext=@ciphertext.txt > rewrapped.json

应用保存密文和业务数据,Vault 保存密钥;Base64 只是 API 编码。轮换不会自动改写现有密文,rewrap 将旧密文转换到新密钥版本。收紧最小解密版本前先完成数据迁移和备份验证。

生产分别给加密、解密和轮换身份授权,不把 transit/* 全部交给应用。Transit

5. PKI:短期服务证书#

仅在实验 Vault 生成内部测试根 CA;生产根 CA 通常离线保管,Vault 使用经过企业 CA 签名的 intermediate。

vault secrets enable -path=pki-lab pki
vault secrets tune -max-lease-ttl=8760h pki-lab
vault write -format=json pki-lab/root/generate/internal common_name='Vault Lab CA' ttl=8760h > ca.json

vault write pki-lab/roles/orders allowed_domains=orders.internal allow_subdomains=true allow_bare_domains=false allow_ip_sans=false max_ttl=24h

vault write -format=json pki-lab/issue/orders common_name=api.orders.internal ttl=1h > certificate.json

验收证书 SAN、有效期和信任链;请求 api.payments.internal 应被拒绝。certificate.json 包含私钥,权限保持 0600。生产另配置 CA 发布、CRL/OCSP、撤销策略与服务证书热更新,证书签发不等于服务自动加载。PKI

6. 完成与清理#

终端 A 按 Ctrl+C,dev server 的实验数据随进程消失。终端 B 清除 VAULT_TOKEN,返回原目录后删除本次临时目录。不要把 role/token、证书私钥或报告提交到 Git。

下一步:部署生产集群,再使用 动态数据库凭据。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭