Vault部署
官方文档:
https://developer.hashicorp.com/vault/downloads
软件运行环境
安全加固
安全加固官方文档:https://lonegunmanb.github.io/essential-vault/9.%E5%AE%9E%E9%99%85%E6%A1%88%E4%BE%8B/7.production-hardening.html
部署过程
1 安装vault
# 操作系统Debian
# 安装版本:开源 1.13.1
apt install gpg
wget -O- https://apt.releases.hashicorp.com/gpg | sudo 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" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install vault
2 准备mysql环境
3 建立自己的证书颁发机构 (CA)(server)
openssl genrsa -out ca.key 4096
openssl req -new -x509 -days 36500 -key ca.key -out ca.crt -subj "/C=国家/ST=省份/L=城市/O=公司/OU=组织/CN=域名"
openssl x509 -noout -text -in ca.crt
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr -subj "/C=国家/ST=省份/L=城市/O=公司/OU=组织/CN=域名"
echo subjectAltName=IP:127.0.0.1,IP:10.xxxxx,IP:10.xxxxx > extfile.cnf
echo 01 > ca.srl
openssl x509 -req -extfile extfile.cnf -days 18250 -CA ca.crt -CAkey ca.key -in server.csr -out server.crt
4 服务器证书准备
tls_cert_file = /opt/vault/tls/server.crt
tls_key_file = /opt/vault/tls/server.key
-
-
将ca.crt文件放到服务器/etc/ssl/certs目录下
5 配置文件
ui = true
disable_mlock = false
storage "mysql" {
address = "IP:3306"
username = "vault"
password = "xxxxxxx"
database = "vault"
table = "vault"
ha_enabled = "true"
max_connection_lifetime = "7200"
max_idle_connections = "5"
max_parallel = "128"
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_cert_file = "/opt/vault/tls/server.crt"
tls_key_file = "/opt/vault/tls/server.key"
tls_disable = false
telemetry {
unauthenticated_metrics_access = true
}
}
api_addr = "https://IP:8200"
cluster_addr = "https://ip:8201"
cluster_name = "cluster-name"
log_level = "trace"
log_format = "json"
log_file = "/opt/vault/log/server/"
log_rotate_bytes = "102400"
log_rotate_max_files = "200"
telemetry {
prometheus_retention_time = "300s"
disable_hostname = true
}
在var/log下面,创建目录/var/log/vault,授权目录给vault用
mkdir -p /var/log/vault/
chown vault:vault /var/log/vault/
6 启动服务
# 启动服务
systemctl start vault.service
# 开机自动重启
systemctl enable vault.service
7 初始化(生成的解封密钥通过GPG加密)
vault operator init -key-shares=3 -key-threshold=2
也可以将unseal key进行加密。
8 解封
vault operator unseal
9 创建审计设备
# 在opt/vault下面,创建目录/opt/vault/log,授权目录给vault用户
mkdir -p /opt/vault/log/audit
chown vault:vault /opt/vault/log/audit
# 创建审计设备(需先创建好vault_audit.log,并修改该文件所有者和组)(登录root进去创建)
vault audit enable file file_path=/opt/vault/log/audit/vault-audit.log
# 注意:每个节点需要单独创建独立的日志设备(官方建议)(加入日志轮换)
10 集群部署
# 配置这些参数
api_addr = "https://127.0.0.1:8200"
cluster_addr = "https://<Node-1-IP>:8201"
cluster_name = "vault-XX-cluster"
11 接入LDAP
vault write -f auth/ldap/config
url="ldap://ldap地址"
userfilter:"(&(memberOf=cn=xxx,ou=xxx,ou=xxxx,dc=xxxx,dc=xxx)(uid={{.Username}}))" ........
12 用户MFA二次认证接入
创建一个TOTP方法,并将该方法的强制执行绑定到LDAP身份认证方式
-
-
为每个LDAP用户分配TOTP验证码(通过邮箱等留底的方式)
# 生成该实体的TOTP二维码或者secreet密钥
vault write identity/mfa/method/totp/admin-generate method_id=METHOD_ID entity_id=ENTITY_ID
13 创建实体、分组
先登录,再给每个ldap用户改实体名(实体名字和别名和ldap用户名一样)
注意事项
Vault的不安全机制:
Vault在通过CLI登录后,会在发出命令的用户账户的主目录中创建一个名为 .vault-token 的隐藏文件,该文件记录了当前登录用户的token,且为明文;并且当其他用户登录该服务器之后,仍然可以看到这个隐藏的.vault-token文件,能够直接使用之前用户登录状态操作vault及明文查看它的token。
目前官方在CLI界面没有logout操作指令,故在每次使用完之后,需手动删除自己的 .vault-token文件。
原文始发于微信公众号(安全info):Vault部署保姆级教程
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论