我刚刚在Ubuntu 18.04后端服务器上从Hashicorp设置了Vault。它运行一个node.js后端服务器,该服务器用于使用环境变量来存储MySQL数据库的数据。但是,我认为这是不安全的,因此为什么我改为使用保险柜。现在,我已将所有机密存储在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文件中并没有太大区别。
答案 0 :(得分:0)
您不应使用根密钥访问机密。保险柜提供了多个authentication methods。例如-用户通行对,github身份验证(使用令牌),LDAP,k8s等...
使用一种身份验证方法,您将获得带有policy的保管库令牌。此政策将只允许您访问您的相关机密。
另一个了解保险柜的好地方:Learn Vault
如果您正在使用kubernetes,则可以阅读this guide和此one
edit:关于第一个问题,这取决于您决定如何加载机密-您可以从文件,从process.env加载机密或使用node-vault软件包直接设置机密。我亲自将它们从其他process写到文件中,并使用dotenv包将它们加载到process.env。