Можно ли создать secret_id для автоматического использования в утверждении без помощи администратора или кубернетов при использовании хранилища? - PullRequest
1 голос
/ 07 августа 2020

Недавно просматривая inte rnet, я нашел хорошую альтернативу для управления секретами моего приложения, созданного в node js, с помощью хранилища hashicorp. Я исследовал, как это работает, и среди возможных способов, которыми этот инструмент должен войти, я нашел одобрение, которое считаю адекватной формой аутентификации через мое приложение. Эта форма аутентификации требует role_id и secret_id. Последнему, как я вижу в примерах официальной страницы хранилища, нужен объект для своего создания, а затем он передает его приложению, и таким образом приложение может получить токен для входа в хранилище. В настоящее время у меня есть этот код в node 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, и идея состоит в том, что процесс получения секретов происходит автоматически c, поэтому я хотел бы знать, если при создании токена, который существует достаточно долго, у вас есть только возможность получить secret_id роли и сохранить его как переменную среды уместно в этом случае или если есть какая-либо другая альтернатива, которая может помочь мне в автоматизации этого случая.

Примечание: я не планирую развертывать в aws в в этом случае.

...