node.js – 如何在AWS Lambda中使用加密环境变量?

前端之家收集整理的这篇文章主要介绍了node.js – 如何在AWS Lambda中使用加密环境变量?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在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,但它说我正在做的应该只是工作.

解决方法

@H_403_25@ 解密环境变量需要对KMS服务进行API调用.为此,您的Lambda函数必须能够访问Internet,因为KMS没有VPC端点.因此,如果您的Lambda在VPC中运行,请确保为VPC配置了NAT,以允许您的Lambda函数调用KMS.
原文链接:https://www.f2er.com/nodejs/241065.html

猜你在找的Node.js相关文章