gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 22:23:28 26 4
gpt4 key购买 nike

我正在尝试在 Node.js 4.3 中运行的 AWS Lambda 函数中使用加密的环境变量,但在尝试解密变量时代码挂起。我没有收到任何错误消息,它只是超时。这是我尝试过的:

我在与 Lambda 相同的区域创建了加密 key ,并确保运行 Lambda 的角色可以访问该 key 。 (我什至尝试过让角色完全控制 key 。)

在创建 Lambda 时,我启用了加密助手,选择了我的加密 key ,并对环境变量进行了加密:

enter image description here

接下来,我单击“代码”按钮,它会为我提供应该在运行时处理解密的 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 的超时和内存,但这只会让它在超时前等待更长时间。

当我从未告诉应用程序使用什么解密 key 时,解密应该如何工作? documentation for decrypt没有提到任何方式来告诉它使用什么解密 key 。而且我没有收到任何错误消息,告诉我它不知道要使用什么 key 或任何东西。

我试过 this tutorial但它只是告诉我做我已经做过的同样的事情。我还阅读了所有 environment variables documentation但它说我正在做的应该会起作用。

最佳答案

解密环境变量需要调用 KMS 服务的 API。为此,您的 Lambda 函数必须能够访问互联网,因为 KMS 没有 VPC 终端 Node 。因此,如果您的 Lambda 在 VPC 中运行,请确保为 VPC 配置了 NAT,以允许您的 Lambda 函数调用 KMS。

关于node.js - 如何在 AWS Lambda 中使用加密的环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42114619/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com