引用 HashiCorp Vault 中的密钥
HashiCorp Vault 是一个集中式平台,用于管 理跨不同环境和应用程序的密钥和加密。它为存储和访问(例如 API 密钥、密码、证书等)提供了统一的密钥管理。
本教程演示了如何将 API7 企业版与 HashiCorp Vault 集成,使你能够从 Vault 中安全地存储和引用消费者凭证及插件配置。
下面是一个交互式演示,提供了将 API7 企业版与 HashiCorp Vault 集成存储和检索 key-auth 密钥的动手实践。
前置条件
- 安装 API7 企业版。
- 在你的网关组中至少有一个网关实例。
- 安装 Docker。
- 安装 cURL 以向服务发送请求进行验证。
- 安装 ZIP 以解压来自官方发布的压缩文件中的 Vault 二进制文件。
配置 Vault 服务器
在 Docker 中以开发模式启动一个名为 api7-quickstart-vault 的 Vault 实例,并使用令牌api7-quickstart-vault-token。暴露的端口将映射到主机的 8200 端口上:
docker run -d --cap-add=IPC_LOCK \
-e 'VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200' \
-e 'VAULT_ADDR=http://127.0.0.1:8200' \
-e 'VAULT_DEV_ROOT_TOKEN_ID=api7-quickstart-vault-token' \
-e 'VAULT_TOKEN=api7-quickstart-vault-token' \
--name api7-quickstart-vault \
-p 8200:8200 vault:1.13.0
在 Vault 中启用 kv 密钥引擎,作为 API7 SSL 证书的存储路径。
docker exec api7-quickstart-vault vault secrets enable -path=kv -version=1 kv
API7 网关需要有权访问 Vault 并检索密钥。你需要使用 HashiCorp Configuration Language (HCL) 创建一个策略文件,从而为 API7 网关生成一个 Vault 访问令牌。
在 Vault 实例中创建一个名为 api7-policy.hcl 的 Vault 策略文件,以授予 API7 网关对路径 kv/ 的读取权限。你可以将密钥放在 kv/ 路径下以允许 API7 网关读取它们:
docker exec api7-quickstart-vault /bin/sh -c "echo '
path \"secret/data/*\" {
capabilities = [\"read\"]
}
' > /etc/api7-policy.hcl"
将该策略文件应用到 Vault 实例中:
docker exec api7-quickstart-vault vault policy write api7-policy /etc/api7-policy.hcl
接下来,生成附加到新定 义的策略的访问令牌,以供 API7 网关访问 Vault:
docker exec api7-quickstart-vault vault token create -policy="api7-policy"
每次执行上述命令都会生成一个不同的令牌。如果成功,输出应类似于以下内容:
Key Value
--- -----
token hvs.CAESIHUznrV4wgcifUia0FROd6iprK7NjipAiHBYwiZDQP9TGh4KHGh2cy5ndHc5dzBPbXd5Y1pzblZXd2ZuQXA3ZHI
token_accessor YY4iCj2lICDNd50ZJDsBjvZK
token_duration 768h
token_renewable true
token_policies ["api7-policy" "default"]
identity_policies []
policies ["api7-policy" "default"]
在网关组中添加密钥提供商
- Dashboard
- ADC
- Ingress Controller
- 从侧边导航栏选择你的网关组下的 Secret 提供商,然后点击 新增 Secret 提供商。
- 在弹出的对话框中,执行以下操作:
- 在 Secret 提供商 ID 字段中,输入
my-vault。 - 在 Secret 管理服务 字段中,选择
HashiCorp Vault。 - 在 KV 版本 字段中,选择
KV 版本 1。 - 填写 Vault 服务器 URL字段。例如:
127.0.0.1:8200。