如何在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, context, callback) => {
    if (decrypted) {
        console.log('data is already decrypted');
        processEvent(event, context, 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, context, 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的超时和内存,但这只会使其等待更长的时间才能超时。

当我从不告诉应用程序要使用什么解密密钥时,解密应该如何工作?文档decrypt没有提及任何方法来告诉它使用什么解密密钥。而且我没有收到任何错误消息,告诉我它不知道使用什么密钥或什么。

我已经尝试过本教程,但是它只是告诉我要做我已经做过的同样的事情。我还阅读了所有环境变量文档,但它说我在做什么应该可以。

装饰

解密环境变量需要对KMS服务的API调用。为此,您的Lambda函数必须可以访问Internet,因为没有用于KMS的VPC端点。因此,如果Lambda在VPC中运行,请确保已为VPC配置了NAT,以允许Lambda函数调用KMS。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章