1

最近在互联网上搜索,我发现了一个很好的替代方法,可以在 hashcorp vault 的帮助下管理我在 node js 中创建的应用程序的秘密。我研究了它的工作原理以及该工具必须输入的可能方式,我发现了 approle,我认为这是通过我的应用程序进行的适当的身份验证形式。这种形式的身份验证需要一个role_id 和一个secret_id。后者,正如我在官方保险库页面的示例中看到的那样,需要一个实体来创建它,然后将其传递给应用程序,这样应用程序就可以接收到进入保险库的令牌。目前我在节点 js 中有这个代码,它接收一个用 secret_id 包装的令牌,以实现对具有应用程序角色的秘密的访问:

//get the wrap token from passed in parameter
var wrap_token = process.argv[2];

if(!wrap_token){
    console.error("No wrap token, enter token as argument");
    process.exit();
}
 
var options = {
    apiVersion: 'v1', // default
    endpoint: 'http://127.0.0.1:8200',
    token: wrap_token //wrap token
  };

console.log("Token being used " + process.argv[2]);

// get new instance of the client
var vault = require("node-vault")(options);

//role that the app is using
const roleId = '27f8905d-ec50-26ec-b2da-69dacf44b5b8';

//using the wrap token to unwrap and get the secret
vault.unwrap().then((result) => {

  var secretId = result.data.secret_id;
  console.log("Your secret id is " + result.data.secret_id);

  //login with approleLogin
  vault.approleLogin({ role_id: roleId, secret_id: secretId }).then((login_result) => {       
    var client_token = login_result.auth.client_token;
    console.log("Using client token to login " + client_token);
    var client_options = {
        apiVersion: 'v1', // default
        endpoint: 'http://127.0.0.1:8200',
        token: client_token //client token
    };

    var client_vault = require("node-vault")(client_options);

    client_vault.read('secret/weatherapp/config').then((read_result) => {
        console.log(read_result);
    });
  });
}).catch(console.error);

问题是我计划使用 docker 将应用程序上传到云中,这个想法是获取秘密的过程是自动的,所以我想知道在创建一个持续时间足够长的令牌时是否只有你才有可能在这种情况下,获取角色的 secret_id 并将其保存为环境变量是合适的,或者如果有任何其他替代方法可以帮助我自动化这种情况。

注意:在这种情况下,我不打算在 aws 中部署。

4

0 回答 0