当前位置: 首页 > news >正文

Linux - Vault

这里写目录标题

  • 🧭 一、Vault 安装流程
    • 1️⃣ 环境准备
    • 2️⃣ 下载并安装 Vault
    • 3️⃣ 创建配置目录与数据目录
    • 4️⃣ 创建 Vault 配置文件
    • 5️⃣ 创建 systemd 服务(可选)
    • 6️⃣ 初始化 Vault
    • 7️⃣ 解封 Vault
    • 8️⃣ 登录 Vault
    • 9️⃣ 启用 HTTPS 访问(可选)
    • ✅ 验证
  • 二、Vault 配置与管理
    • 1️⃣ 登录与状态检查
    • 2️⃣ 创建管理员策略(Admin Policy)
    • 3️⃣ 启用 UserPass 认证方法
    • 4️⃣ 启用审计日志
    • 5️⃣ 删除 Root Token(推荐)
    • 6️⃣ 紧急恢复(重新生成 Root Token)
  • 三、项目接入与使用
    • 1️⃣ 启用 KV 引擎(v2 版本)
    • 2️⃣ 创建项目专属路径
    • 3️⃣ 为项目创建独立策略
    • 4️⃣ 增删改查密钥
    • 5️⃣ 增删改查策略对应的 token
    • 6️⃣ 增删改查 AppRole
    • 7️⃣ Python 使用示例

🧭 一、Vault 安装流程

1️⃣ 环境准备

适用于:CentOS / RHEL / Ubuntu 等 Linux 系统

系统依赖

sudo yum install -y unzip

2️⃣ 下载并安装 Vault

下载官方二进制包(这里以 Linux x86_64 为例):

wget https://releases.hashicorp.com/vault/1.21.0/vault_1.21.0_linux_amd64.zip

解压并移动到可执行路径:

unzip vault_1.21.0_linux_amd64.zip
sudo mv vault /usr/local/bin/

检查是否安装成功:

vault version

3️⃣ 创建配置目录与数据目录

sudo mkdir -p /etc/vault /opt/vault/data

4️⃣ 创建 Vault 配置文件

编辑配置文件 /etc/vault/vault.hcl

# 存储后端:Raft(推荐用于单机或小集群)
storage "raft" {path    = "/opt/vault/data"node_id = "node1"
}
# 网络监听配置
listener "tcp" {address       = "127.0.0.1:8982"tls_disable   = true
}
cluster_addr = "http://127.0.0.1:8983"
api_addr     = "http://127.0.0.1:8982"
# 启用 Web UI
ui = true
# 允许内存交换(低内存系统建议开启)
disable_mlock = false

5️⃣ 创建 systemd 服务(可选)

文件路径:/etc/systemd/system/vault.service

[Unit]
Description=Vault
After=network.target[Service]
User=root
Group=root
ExecStart=/usr/local/bin/vault server -config=/etc/vault/vault.hcl
Restart=on-failure
LimitNOFILE=65536
LimitMEMLOCK=infinity
CapabilityBoundingSet=CAP_IPC_LOCK
WorkingDirectory=/opt/vault/data[Install]
WantedBy=multi-user.target

加载并启动:

systemctl daemon-reload
systemctl enable vault
systemctl start vault
systemctl status vault

6️⃣ 初始化 Vault

# 可以写入/root/.bashrc
export VAULT_ADDR='http://127.0.0.1:8982'
vault operator init -key-shares=1 -key-threshold=1

输出示例:

Unseal Key 1: uDfw5b...X1u
Initial Root Token: hvs.zA5...6bP

⚠️ 保存好这两个值

  • Unseal Key 用于解封(Vault 重启后必须)
  • Root Token 是最高权限账户

7️⃣ 解封 Vault

vault operator unseal <你的 Unseal Key>

如果只设置了 -key-shares=1,执行一次即可。


8️⃣ 登录 Vault

vault login <Initial Root Token>

验证状态:

vault status

9️⃣ 启用 HTTPS 访问(可选)

如果 Vault 与 Nginx 在同一台机器上:

server {listen 443 ssl;server_name xxx.xxx.com;ssl_certificate     /usr/local/web/server/cert/xxx.xxx.com.crt;ssl_certificate_key /usr/local/web/server/cert/xxx.xxx.com.key;location /vault/ {proxy_pass http://127.0.0.1:8982/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}

然后在系统环境变量中指定:

export VAULT_ADDR='https://xxx.xxx.com/vault'
export VAULT_CACERT='/usr/local/web/server/cert/xxx.xxx.com.crt'

✅ 验证

curl http://127.0.0.1:8982/v1/sys/health

二、Vault 配置与管理

1️⃣ 登录与状态检查

# 确认 Vault 状态
vault status# 确认你已经使用 root token 登录
vault token lookup

2️⃣ 创建管理员策略(Admin Policy)

cat > /tmp/admin-policy.hcl <<'EOF'
# 管理所有密钥
path "secret/*" {capabilities = ["create", "read", "update", "delete", "list"]
}path "secret/data/*" {capabilities = ["create", "read", "update", "delete", "list"]
}path "secret/metadata/*" {capabilities = ["list", "read", "delete"]
}# 管理认证方法
path "auth/*" {capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}path "sys/auth" {capabilities = ["read", "list", "sudo"]
}path "sys/auth/*" {capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}# 管理策略
path "sys/policies/*" {capabilities = ["create", "read", "update", "delete", "list"]
}# 管理 Secrets Engines
path "sys/mounts/*" {capabilities = ["create", "read", "update", "delete", "list"]
}# 管理 Token
path "auth/token/*" {capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}# 管理审计设备
path "sys/audit" {capabilities = ["read", "list", "sudo"]
}path "sys/audit/*" {capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}# 系统状态与能力查看
path "sys/health" { capabilities = ["read"] }
path "sys/capabilities-self" { capabilities = ["read"] }
path "sys/seal-status" { capabilities = ["read"] }# 管理租约
path "sys/leases/*" {capabilities = ["create", "read", "update", "delete", "list"]
}
EOF

💡 说明:此策略允许管理员对密钥、认证方法、策略、租约、审计、系统状态等拥有完全控制权限。

写入 Vault:

vault policy write admin /tmp/admin-policy.hcl
vault policy read admin

3️⃣ 启用 UserPass 认证方法

vault auth enable userpass

创建管理员用户(安全方式输入密码):

read -s -p "请输入管理员密码: " ADMIN_PASSWORD
vault write auth/userpass/users/admin password="$ADMIN_PASSWORD" policies=admin
unset ADMIN_PASSWORD

验证登录:

vault login -method=userpass username=admin

测试创建 token:

vault token create -policy=default -ttl=1h

查看当前策略:

vault policy list

4️⃣ 启用审计日志

mkdir -p /var/log/vault
chmod 750 /var/log/vault# 确认当前用户为管理员
vault token lookup | grep display_name# 启用审计日志
vault audit enable file file_path=/var/log/vault/audit.log# 查看启用的审计设备
vault audit list

⚙️ 说明:审计日志默认写入 /var/log/vault/audit.log,重启 Vault 后会自动加载,无需重复启用。


5️⃣ 删除 Root Token(推荐)

# 撤销 root token
vault token revoke <root-token># 验证 root token 是否失效
vault login <root-token>  # 应该失败

6️⃣ 紧急恢复(重新生成 Root Token)

当 root token 丢失或被删除时,可以通过已保存的 Unseal Key 恢复:

# 初始化 Root Token 生成过程
vault operator generate-root -init
# 输出:
# Nonce: 1a2b3c4d-5678-90ab-cdef-1234567890ab
# OTP: W3DFkR1qZApG9WzLmfVt# 使用 Unseal Key 继续生成
vault operator generate-root -nonce=1a2b3c4d-5678-90ab-cdef-1234567890ab <unseal-key>
# 输出:
# Encoded root token: DxhHaVUGYQZBLQYyPTEfcSlkJxIXLyFhACohBw# 解码生成 Root Token
vault operator generate-root -decode=DxhHaVUGYQZBLQYyPTEfcSlkJxIXLyFhACohBw -otp=W3DFkR1qZApG9WzLmfVt
# 输出:
# Root Token: hvs.xxxxxxx....

三、项目接入与使用

1️⃣ 启用 KV 引擎(v2 版本)

在项目开始前,我们为项目启用一个独立的 KV v2 密钥引擎,用于管理配置或密钥。

vault secrets enable -path=secret kv-v2

💡 说明

  • -path=secret 表示在 secret/ 路径启用 KV 引擎。
  • 如果之前已经存在 secret/,会提示已启用,可跳过此步骤。

2️⃣ 创建项目专属路径

假设项目名称为 test,我们约定存储结构如下:

  • 密钥路径:secret/test/config
# 创建项目路径
vault kv put secret/test/config username=admin password=123456
# 列出根目录
vault list secret/metadata/       
# 列出 test 下的路径
vault list secret/metadata/test/  

3️⃣ 为项目创建独立策略

# 创建策略文件 test-policy.hcl
cat > test-policy.hcl <<'EOF'
path "secret/data/test/*" {capabilities = ["create", "read", "update", "delete", "list"]
}
EOF# 写入策略
vault policy write test test-policy.hcl
# 查询所有策略
vault policy list
# 查看策略
vault policy read <policy_name>
# 删除策略
vault policy delete <policy_name>

4️⃣ 增删改查密钥

# 创建/更新
vault kv put secret/test/config password=abc123# 查询最新版本
vault kv get secret/test/config# 查询指定版本
vault kv get -version=2 secret/test/config# 查询指定key
vault kv get -field=password secret/test/config# 删除(软删除,保留历史版本)
vault kv delete secret/test/config# 元数据删除(metadata delete)
vault kv metadata delete secret/test/config

5️⃣ 增删改查策略对应的 token

# 创建 token
vault token create -policy=test -ttl=1h# 查看 token
vault list auth/token/accessors
vault token lookup <token>
vault token lookup -accessor <accessors># 删除 token
vault token revoke <token>
vault token revoke -accessor <accessors>

6️⃣ 增删改查 AppRole

AppRole 常用于服务器端程序安全访问 Vault,无需人工交互。

启用 AppRole 认证:

vault auth enable approle
# 创建 AppRole 并绑定策略
vault write auth/approle/role/test token_policies="test" token_ttl=30m token_max_ttl=1h token_num_uses=3 secret_id_ttl=24h secret_id_num_uses=10
# 查看 AppRole 信息
vault read auth/approle/role/test
# 获取 role_id
vault read auth/approle/role/test/role-id
# 生成 secret_id
vault write -f auth/approle/role/test/secret-id
# 通过 role_id + secret_id 获取 token
vault write auth/approle/login role_id="<role_id>" secret_id="<secret_id>"
# 删除 AppRole
vault delete auth/approle/role/test

7️⃣ Python 使用示例

使用 Token 方式

import hvacclient = hvac.Client(url='https://wycl.ggjtfw.com/vault',token='hvs.YourTokenHere',verify='/usr/local/web/server/cert/wycl.ggjtfw.com.crt'
)secret = client.secrets.kv.v2.read_secret_version(path='test/dev')
print(secret['data']['data'])

使用 AppRole 动态获取 Token

import hvacVAULT_ADDR = "https://wycl.ggjtfw.com/vault"
ROLE_ID = "your-role-id"
SECRET_ID = "your-secret-id"
CA_CERT = "/usr/local/web/server/cert/wycl.ggjtfw.com.crt"# 初始化客户端
client = hvac.Client(url=VAULT_ADDR, verify=CA_CERT)# 登录 Vault
login = client.auth.approle.login(role_id=ROLE_ID, secret_id=SECRET_ID)
client.token = login['auth']['client_token']# 读取密钥
secret = client.secrets.kv.v2.read_secret_version(path='test/dev')
print(secret['data']['data'])

💡 建议

  • 在生产环境中,不直接将 ROLE_IDSECRET_ID 写入代码;
  • 可以通过环境变量、Vault Agent 注入等安全方式传入。

http://www.dtcms.com/a/578124.html

相关文章:

  • VSCode+Cline部署本地爬虫fetch-mcp实战
  • 使用python-pandas-openpyxl编写运营查询小工具
  • Label Studio 安装与简单使用指南
  • 宁波正规网站seo公司php网站开发机试题目
  • 牛客小白月赛122 D题x_to_y_2
  • 生态环境影响评价图件制作:融合ArcGIS与ENVI,掌握土地利用、植被覆盖、土壤侵蚀、水系提取等专题制图技术!
  • 深入理解 Vue3 Vapor 模式:从原理到实践
  • leeCode hot 100 !!!持续更新中
  • 想学网站建设选计算机应用技术还是计算机网络技术哪个专业啊网站建设工单系统护语
  • WordPress魔方格子做网站优化费用
  • 高校实验室建设方案解析:从规划到落地的全流程指南
  • javaweb前端基础
  • 从“会烧开水”到“知其所以然”:扩散模型文生图的理论基石
  • SQL注入之二次、加解密、DNS等注入
  • 网站开发速成班免费可商用的图片素材网站
  • 打破智能家居生态壁垒,乐鑫一站式Matter解决方案实现无缝互联
  • 用 CdcUp CLI 一键搭好 Flink CDC 演练环境
  • 【云运维】zabbix管理(续)
  • centos安装ES
  • 网站子目录是什么南通制作公司网站
  • 怎样设计网站或网页怎么样在百度做网站
  • SELinux 布尔值详解:灵活调整安全策略的开关
  • 李宏毅机器学习笔记41
  • 1-GGML:看ctx是个什么东西
  • 【Java SE 基础学习打卡】02 计算机硬件与软件
  • SDIO(Secure Digital Input Output,安全数字输入输出)
  • wordpress批量下载外链图片长春网站推广优化公司
  • 在 Ubuntu 上安装 Ollama 并通过 Open WebUI 运行本地大语言模型
  • 用Python来学微积分34-定积分的基本性质及其应用
  • 如何做网站代码荥阳市城乡建设规划网站