HashiCorp Vault火山引擎Secrets插件
背景
在企业实践中,HashiCorp Vault 作为密钥管理的事实标准,官方及社区已经提供了 AWS、AliCloud、TencentCloud 等主流云厂商的 Secrets Engine 插件。然而,当我试图为火山引擎(Volcengine)寻找类似方案时,发现市面上并没有现成的插件可用。
既然没有轮子,而且现在有AI了,那咱就自己Vibe一个。
插件能做什么
这个插件(vault-plugin-secrets-volcengine)为 Vault 提供了火山引擎的动态凭证管理能力,支持两种模式:
STS 临时凭证 — 通过 AssumeRole 签发短期临时 AK/SK + SecurityToken,适合短生命周期的作业场景,凭证到期自动失效,无需主动回收。
IAM 动态用户 — 按需创建 IAM 子用户并挂载策略,生成长期 AK/SK。Vault 负责完整的生命周期管理:创建、续期、到期自动回收(删除 AccessKey → 解绑策略 → 删除用户)。
核心设计
凭证链
插件本身需要一组"根凭证"来调用火山引擎 API,通过 config 路径配置:
vault write volcengine/config \
access_key="AK..." \
secret_key="SK..." \
region="cn-beijing"
角色定义
角色决定了凭证的签发方式:
# STS 模式 — 指定 role_trn
vault write volcengine/role/readonly \
role_trn="trn:iam::200000000:role/ReadOnlyRole"
# IAM 模式 — 指定策略
vault write volcengine/role/deploy \
remote_policies="name:ReadOnlyAccess,type:System" \
inline_policies='[{"Statement":[{"Effect":"Allow","Action":["ecs:*"],"Resource":["*"]}]}]' \
ttl="2h" \
max_ttl="24h"
凭证签发
vault read volcengine/creds/readonly
# 返回临时 AK/SK/Token,不可续期
vault read volcengine/creds/deploy
# 返回 IAM 用户 AK/SK,可续期,到期自动销毁
故障容错
IAM 凭证的创建过程涉及多个 API 调用(创建用户 → 创建策略 → 挂载策略 → 生成密钥),任何一步失败都会触发 defer 链逐步回滚,避免留下孤儿资源。
撤销时则采用 best-effort 策略:即使某个资源已被手动删除(返回 NotExist),也不会阻断整个回收流程。
技术栈
- Go + HashiCorp Vault SDK
- 火山引擎官方 Go SDK(volcengine-go-sdk)
- STS 服务:AssumeRole
- IAM 服务:User / Policy / AccessKey CRUD
使用方式
项目地址:https://github.com/Yullin/vault-plugin-secrets-volcengine
# 编译
make build
# 注册插件
vault plugin register \
-sha256="$(shasum -a 256 vault/plugins/vault-plugin-secrets-volcengine | cut -d ' ' -f1)" \
-command="vault-plugin-secrets-volcengine" \
secret volcengine
# 启用
vault secrets enable -path=volcengine volcengine
总结
造这个轮子的过程其实挺顺畅的——火山引擎的 IAM/STS 体系和 AWS 高度相似,SDK 的设计风格也一脉相承,参考 vault-plugin-secrets-alicloud 的架构很容易就对接上了。
如果你也在用火山引擎并且有 Vault 体系,欢迎试用或贡献代码。