node.js - 解密 aws kms key 时出现 Nodejs 异步问题

标签 node.js asynchronous aws-lambda amazon-kms

我在node6中有一个lambda函数,它有5个环境变量,全部用aws kms加密。我有以下方法,它接受加密的 key 并返回解密的 key 。

function decryptKMS(encryptedKey) {
console.log('inside decryptkms');
 const kms = new AWS.KMS();
    kms.decrypt({ CiphertextBlob: new Buffer(encryptedKey, 'base64') }, (err, data) => {
        if (err) {
            console.log('Decrypt error:', err);
            return callback(err);
        }
        var result = data.Plaintext.toString('ascii');
        return result;
});
}

在我的处理程序中,我这样做是为了获取解密的 key 。

decryptedkey1 = decryptKMS(encryptedkey1);
decryptedkey2 = decryptKMS(encryptedkey2);
decryptedkey3 = decryptKMS(encryptedkey3);
decryptedkey4 = decryptKMS(encryptedkey4);
decryptedkey5 = decryptKMS(encryptedkey5);

但是,由于 Node 是异步的,该函数在解密 key 之前移至下一步。无论如何,我是否可以对所有组合的 key 使用 Node promise ,或者有什么方法可以从 kms 一次解密多个 key ?

最佳答案

Promisify 您的 decryptKMS 并与 Promise.all 结合使用

function decryptKMS(key) {
  return new Promise((resolve, reject) => {
    const kms = new AWS.KMS()

    kms.decrypt({}, (err, data) => {
      if(err) {
        reject(err)
      }
      else {
        resolve(data.Plaintext.toString('ascii'))
      }
    }) 
  })
}

const keys = [encryptedkey1, encryptedkey2, encryptedkey3]

Promise.all(keys.map(decryptKMS))
  .then(([decryptedkey1, decryptedkey2, decryptedkey3]) => {
    // use decryptedkeyN here 
  })
  .catch(console.log)

关于node.js - 解密 aws kms key 时出现 Nodejs 异步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44633822/

相关文章:

node.js - react native : Warnings on npm install <library>

c# - 取消所有异步任务

javascript - 我可以在不使用计数变量的情况下解决 asyncMap 吗?

amazon-web-services - AWS Lambda 函数 : Will Different Triggers Reuse an Exection Enviornment?

amazon-web-services - 如何使用 aws codepipeline 和 cloudformation 在 github 中仅部署更改的 lambda 函数?

javascript - 如何访问 JSON 中的数组并在 Jade 中迭代

node.js - 如何通过部署在 Heroku 上的 Nodejs/Nestjs 服务器为我的 Angular 前端提供服务?

java - CreatePlatformSocket() 失败 : Address family not supported by protocol and cannot find chrome binary using WebDriverManager in AWS Lambda

mysql - 在 MySQL 中使用 sequelize 自动递增 id

javascript - 使用 Q/promises/异步函数时,如何将值从一个类方法返回到另一个类方法?