mysql - 如何使用 Hashicorp Vault 访问 node.js 中的 secret

标签 mysql node.js hashicorp-vault

我刚刚在我的 Ubuntu 18.04 后端服务器上设置了来自 Hashicorp 的 Vault。它运行一个 node.js 后端服务器,该服务器过去使用环境变量为 MySQL 数据库存储数据。但是,我认为这是不安全的,因此我改为使用 Vault。我现在已将所有 secret 存储在 Vault 中,我可以在我的 node.js 应用程序中访问它,如下所示:

const rootKey = "hidden"
const unsealKey = "alsohidden"

var options = {
    apiVersion: 'v1',
    endpoint: 'https://url.com:8200',
    token: rootKey
};

var vault = require("node-vault")(options);
vault.unseal({ key: unsealKey })
    .then(() => {
        vault.read('secret/db_host')
          .then((res) => console.log("result:",res.data.value))
          .catch((err) => console.error("error:",err));
    });

这导致在我的控制台日志中打印出正确的主机地址。然而,这给我留下了两个问题:

<强>1。如何在我的 MySQL 连接中使用检索到的信息?我目前使用环境变量执行此操作:

var pool = mysql.createPool({
    connectionLimit: 100,
    host: process.env.DB_HOST, // how can I call the vault variables here?
    user: process.env.DB_USER,
    password: process.env.DB_PASS,
    database: process.env.DB_BASE,
    ssl      : {
          ca   : fs.readFileSync('hidden'),
          key  : fs.readFileSync('hidden'),
          cert : fs.readFileSync('hidden'),
    },
    dateStrings: true
});

<强>2。如果我将 rootKey 和 unsealKey 作为常量存储在我的 node.js 应用程序中,保密的意义何在?我认为应该有一种方法可以正确处理这个问题,因为现在直接将凭据存储在我的 .js 文件中并没有太大不同。

最佳答案

您不应该使用您的根 key 来访问 secret 。 Vault 提供了几个 authentication methods .例如 - 用户密码对、github 身份验证(使用 token )、LDAP、k8s 等等......

使用其中一种身份验证方法,您将获得带有 policy 的保险库 token .此政策将只允许您访问您的相关 secret 。

阅读 Vault 的另一个好地方:Learn Vault

如果您使用的是 kubernetes,您可以阅读 this guide还有这个one

编辑:关于第一个问题,这取决于您决定如何加载 secret - 您可以从文件、process.env 加载它们,或者使用 node-vault 包直接设置它们。我亲自将它们写入不同的文件 process并使用 dotenv 将它们加载到 process.env包。

关于mysql - 如何使用 Hashicorp Vault 访问 node.js 中的 secret ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54652683/

相关文章:

mysql - "IN"语句的更快替代方案?

javascript - JS - 异步函数的解析错误

node.js - 意外的保留字 : import - Webpack, Babel、Node、React

active-directory - 如何在 Hashicorp Vault 中对成员资格搜索进行分组

java - 如何在实时服务器上使用mysql上传java网站

php - 将 pdf 从 blob 嵌入到 html/php 页面

javascript - 进程间的 NodeJs 共享对象

docker - 作为 alpine 容器中的非 root 用户的 Vault 开发模式初始化错误 :/dev/null/. Vault 不是目录

kubernetes - Hashicorp Vault - 代理注入(inject)器 - 这有意义吗?

php - 检索 twitter 之类的用户名链接 php