我试图在Node.js 4.3中运行的AWS Lambda函数中使用加密的环境变量,但是在尝试解密变量时代码会挂起.我没有得到任何错误消息,它只是超时.这是我尝试过的:
我在与Lambda相同的区域中创建了加密密钥,并确保Lambda运行的角色可以访问密钥. (我甚至试过让角色完全掌控钥匙.)
创建Lambda时,我启用加密助手,选择我的加密密钥,并加密环境变量:
接下来,我单击“代码”按钮,它给出了我应该在运行时处理解密的javascript代码.这是代码 – 我做的唯一更改是添加console.log语句,我添加了一个try / catch:
"use strict"; const AWS = require('aws-sdk'); const encrypted = process.env['DBPASS']; let decrypted; function processEvent(event,context,callback) { console.log("Decrypted: " + decrypted); callback(); } exports.handler = (event,callback) => { if (decrypted) { console.log('data is already decrypted'); processEvent(event,callback); } else { console.log('data is NOT already decrypted: ' + encrypted); // Decrypt code should run once and variables stored outside of the function // handler so that these are decrypted once per container const kms = new AWS.KMS(); console.log('got kms object'); try { var myblob = new Buffer(encrypted,'base64'); console.log('got blob'); kms.decrypt({ CiphertextBlob: myblob },(err,data) => { console.log('inside decrypt callback'); if (err) { console.log('Decrypt error:',err); return callback(err); } console.log('try to get plaintext'); decrypted = data.Plaintext.toString('ascii'); console.log('decrypted: ' + decrypted); processEvent(event,callback); }); } catch(e) { console.log("exception: " + e); callback('error!'); } } };
这是我运行函数时得到的结果:
data is NOT already decrypted: AQECAH..... got kms object got blob END RequestId: 9b7af..... Task timed out after 30.00 seconds
当我运行该功能时,它会超时.我看到它将所有日志语句打印到“got blob”然后它就会停止.除超时之外没有错误消息.我已经尝试增加Lambda的超时和内存,但它只是让它在超时之前等待更长时间.
当我从未告诉应用程序使用什么解密密钥时,如何解密? documentation for decrypt
没有提及任何方式告诉它使用什么解密密钥.而且我没有收到任何错误消息,告诉我它不知道使用什么密钥或任何东西.
我已经尝试过this tutorial,但它只是告诉我做我已经做过的同样的事情.我也阅读了所有的environment variables documentation,但它说我正在做的应该只是工作.