Vault 密钥管理系统部署教程

HashiCorp Vault 是一款企业级的密钥管理工具,用于安全地存储和访问密码、API 密钥、证书等敏感数据。Vault 提供了统一的接口来管理密钥,支持动态凭据生成、加密即服务、密钥轮换等功能。本文将介绍如何在搬瓦工 VPS 上部署和使用 Vault。

一、Vault 核心概念

  • Secret Engine:密钥存储引擎,支持 KV、数据库动态凭据、PKI 等多种类型。
  • Auth Method:认证方式,决定谁可以访问 Vault。
  • Policy:策略,控制 Token 可以访问哪些路径。
  • Token:访问 Vault 的凭证。
  • Seal/Unseal:Vault 启动后处于封印状态,需要解封后才能使用。

二、安装 Vault

2.1 包管理器安装

wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hashicorp.list
apt update
apt install vault -y

2.2 验证安装

vault version

2.3 Docker 安装

docker run -d \
  --name vault \
  --restart=always \
  --cap-add=IPC_LOCK \
  -p 8200:8200 \
  -v vault_data:/vault/data \
  -e VAULT_ADDR=http://0.0.0.0:8200 \
  hashicorp/vault:latest server -config=/vault/config

三、配置与启动

3.1 创建配置文件

mkdir -p /etc/vault.d /opt/vault/data

cat > /etc/vault.d/vault.hcl <<EOF
ui = true

storage "file" {
  path = "/opt/vault/data"
}

listener "tcp" {
  address     = "0.0.0.0:8200"
  tls_disable = 1
}

api_addr = "http://127.0.0.1:8200"
cluster_addr = "https://127.0.0.1:8201"
EOF

3.2 配置系统服务

cat > /etc/systemd/system/vault.service <<EOF
[Unit]
Description=HashiCorp Vault
After=network.target

[Service]
ExecStart=/usr/bin/vault server -config=/etc/vault.d/vault.hcl
ExecReload=/bin/kill -HUP \$MAINPID
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

systemctl enable vault
systemctl start vault

3.3 设置环境变量

export VAULT_ADDR='http://127.0.0.1:8200'
echo 'export VAULT_ADDR="http://127.0.0.1:8200"' >> ~/.bashrc

四、初始化与解封

4.1 初始化 Vault

vault operator init

此命令会输出 5 个解封密钥和 1 个 Root Token。务必安全保存这些密钥,丢失将无法恢复 Vault 数据。

4.2 解封 Vault

需要使用 3 个(默认阈值)解封密钥:

vault operator unseal KEY_1
vault operator unseal KEY_2
vault operator unseal KEY_3

4.3 登录

vault login ROOT_TOKEN

4.4 查看状态

vault status

五、KV 密钥存储

5.1 启用 KV v2 引擎

vault secrets enable -version=2 -path=secret kv

5.2 存储密钥

# 写入密钥
vault kv put secret/myapp/database \
  host=192.168.1.20 \
  port=3306 \
  username=admin \
  password=secure_password

# 写入 API 密钥
vault kv put secret/myapp/api \
  key=sk-xxxxxxxxxxxx \
  endpoint=https://api.example.com

5.3 读取密钥

# 读取所有字段
vault kv get secret/myapp/database

# 读取特定字段
vault kv get -field=password secret/myapp/database

# JSON 格式输出
vault kv get -format=json secret/myapp/database

5.4 版本管理

# 查看密钥版本历史
vault kv metadata get secret/myapp/database

# 读取特定版本
vault kv get -version=2 secret/myapp/database

# 删除特定版本(软删除)
vault kv delete -versions=3 secret/myapp/database

# 恢复删除的版本
vault kv undelete -versions=3 secret/myapp/database

六、策略管理

6.1 创建策略

cat > myapp-policy.hcl <<EOF
# 允许读取 myapp 下的密钥
path "secret/data/myapp/*" {
  capabilities = ["read", "list"]
}

# 允许读取数据库凭据
path "database/creds/myapp-role" {
  capabilities = ["read"]
}
EOF

vault policy write myapp myapp-policy.hcl

6.2 查看策略

vault policy list
vault policy read myapp

6.3 创建关联策略的 Token

vault token create -policy=myapp -ttl=24h

七、认证方式

7.1 AppRole 认证(适合应用程序)

# 启用 AppRole
vault auth enable approle

# 创建 Role
vault write auth/approle/role/myapp \
  token_policies="myapp" \
  token_ttl=1h \
  token_max_ttl=24h

# 获取 Role ID
vault read auth/approle/role/myapp/role-id

# 生成 Secret ID
vault write -f auth/approle/role/myapp/secret-id

应用程序使用 Role ID 和 Secret ID 登录:

vault write auth/approle/login \
  role_id=YOUR_ROLE_ID \
  secret_id=YOUR_SECRET_ID

7.2 Token 认证

# 创建有限权限的 Token
vault token create \
  -policy=myapp \
  -ttl=8h \
  -use-limit=10 \
  -display-name="cicd-token"

八、应用集成

8.1 Shell 脚本中使用

#!/bin/bash
export VAULT_ADDR='http://127.0.0.1:8200'
export VAULT_TOKEN='your-token'

DB_PASS=$(vault kv get -field=password secret/myapp/database)
API_KEY=$(vault kv get -field=key secret/myapp/api)

echo "Database password retrieved"
echo "API key retrieved"

8.2 在 Docker 中使用

version: '3.8'

services:
  app:
    image: myapp:latest
    environment:
      - VAULT_ADDR=http://vault:8200
      - VAULT_TOKEN=${VAULT_TOKEN}
    networks:
      - app-net

  vault:
    image: hashicorp/vault:latest
    cap_add:
      - IPC_LOCK
    ports:
      - "8200:8200"
    volumes:
      - vault_data:/vault/data
    networks:
      - app-net

networks:
  app-net:

volumes:
  vault_data:

九、Web UI

访问 http://你的IP:8200/ui 可以使用 Vault Web 界面进行密钥管理。建议在生产环境中通过反向代理启用 HTTPS。

十、常见问题

Vault 处于 Sealed 状态

每次 Vault 重启都需要重新解封。可以使用 vault operator unseal 解封,或配置自动解封(需额外配置 KMS)。

Token 过期

# 查看 Token 信息
vault token lookup

# 续期 Token
vault token renew

权限不足

# 检查当前 Token 的策略
vault token lookup
vault policy read POLICY_NAME

总结

Vault 为应用程序和基础设施提供了集中化的密钥管理方案,避免了在配置文件和环境变量中明文存储敏感数据。搭配 Consul 可以构建完整的服务发现和配置管理平台。选购搬瓦工 VPS 请参考 全部方案,使用优惠码 NODESEEK2026 享受 6.77% 折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。