如何将 HashiCorp Vault 与 Node.js 集成:安全管理敏感数据

277 阅读3分钟

在处理密码、API 密钥或个人用户信息等敏感数据时,安全存储它们至关重要。在源代码中硬编码机密或将其保存在纯文本文件中是一种危险的方法。这就是 HashiCorp Vault 发挥作用的地方。 Vault 是一个用于管理机密(例如凭证、API 密钥和敏感配置)的开源工具。
在本教程中,我将引导您完成以下过程:
在 Windows 上安装 HashiCorp Vault
将其与 Node.js 应用程序集成
使用 Vault 中存储的电子邮件密码对执行基本 CRUD 操作(创建、读取、更新、删除)。

先决条件
在我们深入之前,请确保您具备以下条件:
Node.js 安装在您的系统上。
对 JavaScript 和 Node.js 有基本了解。
已安装 HashiCorp Vault。


第 1 步:在 Windows 上安装 HashiCorp Vault
让我们首先在本地计算机上设置 Vault。
下载保险库
转到官方 Vault 下载页面并下载 Windows 二进制文件。
解压下载的文件并将Vault.exe 文件移动到某个目录(例如C:\vault)。

将保险柜添加到路径
打开“开始”菜单并搜索环境变量。
在系统变量中,找到路径并单击编辑。
将vault.exe 所在目录(C:\vault) 添加到列表中。
打开新的命令提示符并通过运行以下命令验证安装:

保险库--版本
在开发模式下启动 Vault
使用以下命令在开发模式下启动 Vault 服务器:
保管库服务器-dev
此命令将在本地启动 Vault,您应该会看到终端中显示一个根令牌。保存起来供以后使用;你需要它来进行身份验证。


第 2 步:设置 Node.js 项目
现在 Vault 正在运行,我们将设置一个 Node.js 项目来与 Vault 交互。
初始化一个新的 Node.js 项目
为您的项目创建一个新目录并导航到其中:

mkdir 保管库节点应用程序 cd 保管库节点应用程序

  1. 初始化一个新的 Node.js 项目:npm init -y
  2. 安装所需的依赖项: npm install node-vault dotenv node-vault:这是 Vault 的官方 Node.js 客户端。 dotenv:管理环境变量。

第 3 步:将 Vault 与 Node.js 集成
配置环境变量
在项目根目录中创建一个 .env 文件来存储 Vault 配置:

替换为在开发模式下启动 Vault 时显示的根令牌。
创建 Node.js 脚本
在项目目录中创建一个新的index.js文件并粘贴以下代码:

require('dotenv').config();
const vault = require('node-vault')({
apiVersion: 'v1',
endpoint: process.env.VAULT_ADDR,
token: process.env.VAULT_TOKEN
});
const SECRET_PATH = 'secret/data/users'; // Path to store user secrets
// Save email and password
async function saveCredentials(email, password) {
try {
const result = await vault.write(SECRET_PATH, {
data: {
[email]: { password }
}
});
console.log(Credentials saved for ${email}:, result);
} catch (error) {
console.error('Error saving credentials:', error);
}
}
// Update credentials by email
async function updateCredentials(email, newPassword) {
try {
const result = await vault.write(SECRET_PATH, {
data: {
[email]: { password: newPassword }
}
});
console.log(Credentials updated for ${email}:, result);
} catch (error) {
console.error('Error updating credentials:', error);
}
}
// Get credentials by email
async function getCredentials(email) {
try {
const result = await vault.read(SECRET_PATH);
const userData = result.data.data[email];
if (userData) {
console.log(Retrieved credentials for ${email}:, userData);
} else {
console.log(No credentials found for ${email});
}
} catch (error) {
console.error('Error retrieving credentials:', error);
}
}
// Delete credentials by email
async function deleteCredentials(email) {
try {
const result = await vault.delete(SECRET_PATH);
console.log(Credentials deleted for ${email});
} catch (error) {
console.error('Error deleting credentials:', error);
}
}
// Example Usage
(async () => {
await saveCredentials('test@example.com', 'password123');
await getCredentials('test@example.com');
await updateCredentials('test@example.com', 'newpassword456');
await getCredentials('test@example.com');
await deleteCredentials('test@example.com');
})();

我们使用Vault中的secret/data/users路径来存储和管理用户数据。


第 4 步:运行应用程序
要运行该应用程序,请使用以下命令:

node index.js

该脚本将:
将电子邮件和密码保存到保管库。
使用电子邮件检索凭据。
更新密码。
检索更新的凭据。
删除存储的凭据。


结论
通过遵循本教程,您现在拥有一个与 HashiCorp Vault 集成的功能齐全的 Node.js 应用程序。此设置为您提供了一种安全且可扩展的方式来管理应用程序中的敏感信息,例如电子邮件密码对。
HashiCorp Vault 是一个用于存储机密的强大工具,并且使用 node-vault 库与 Node.js 的集成相对简单。您可以扩展此设置以存储其他机密,例如 API 密钥、令牌等。
如果您正在构建任何需要敏感数据管理的应用程序,强烈建议采用Vault等安全存储机制来降低安全风险。