3

我在 node6 中有一个 lambda 函数,它有 5 个 env 变量,所有变量都用 aws kms 加密。我有以下方法,它采用加密密钥并返回解密密钥。

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;
});
}

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

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

但是,由于节点是异步的,因此该函数在解密密钥之前移至下一步。无论如何我可以对所有组合的密钥使用节点承诺,或者有没有办法从kms一次解密多个密钥?

4

1 回答 1

7

承诺你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)
于 2017-06-19T15:18:32.427 回答