最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何使用Hashicorp Vault访问node.js中的机密

IT培训 admin 9浏览 0评论

如何使用Hashicorp Vault访问node.js中的机密

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

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

var options = {
    apiVersion: 'v1',
    endpoint: ':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文件中即可。

回答如下:

您不应该使用您的根密钥来访问机密。保险柜提供了几个authentication methods。例如 - 用户传递对,github认证(使用令牌),LDAP,k8s等......

使用其中一种身份验证方法,您将获得带有policy的文件库令牌。此政策将允许您仅访问您的相关秘密。

关于金库的另一个好地方:Learn Vault

如果你正在使用kubernetes,你可以阅读this guide和这个one

编辑:关于第一个问题,它取决于您决定加载秘密的方式 - 您可以从文件,process.env加载它们或使用node-vault包直接设置它们。我个人用不同的process将它们写入文件,并用dotenv包加载到process.env。

如何使用Hashicorp Vault访问node.js中的机密

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

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

var options = {
    apiVersion: 'v1',
    endpoint: ':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文件中即可。

回答如下:

您不应该使用您的根密钥来访问机密。保险柜提供了几个authentication methods。例如 - 用户传递对,github认证(使用令牌),LDAP,k8s等......

使用其中一种身份验证方法,您将获得带有policy的文件库令牌。此政策将允许您仅访问您的相关秘密。

关于金库的另一个好地方:Learn Vault

如果你正在使用kubernetes,你可以阅读this guide和这个one

编辑:关于第一个问题,它取决于您决定加载秘密的方式 - 您可以从文件,process.env加载它们或使用node-vault包直接设置它们。我个人用不同的process将它们写入文件,并用dotenv包加载到process.env。

发布评论

评论列表 (0)

  1. 暂无评论