2017-06-19 97 views
1

我有一個node6中的lambda函數,其中有5個env變量全部用aws kms加密。我有以下方法採用加密密鑰並返回解密密鑰。解密aws kms密鑰時Nodejs異步問題

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

Promisify您decryptKMSPromise.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) 
+0

它的工作就像一個魅力結合起來!謝謝! – NPCRNPCR