Недавно просматривая 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 в в этом случае.