我们正在 AWS lambda 函数中加密环境变量“dbPassword”,并尝试在打字稿文件中解密该加密值。
import * as AWS from 'aws-sdk';
const kmsClient = new AWS.KMS({region: 'us-east-1'});
class EncryptionUtility
{
static async decryptEnvironmentVariable(encryptedValue: string): string {
try
{
console.log("function decryptEnvironmentVariable() input value => ",encryptedValue);
const req = {
CiphertextBlob: Buffer.from(encryptedValue, 'base64'),
EncryptionContext: { LambdaFunctionName: 'ioh_reference_data_service' },
};
const decryptResult = await kmsClient.decrypt(req).promise();
if (Buffer.isBuffer(decryptResult.Plaintext)) {
return Buffer.from(decryptResult.Plaintext).toString();
}
else
{
throw new Error('We have a problem');
}
}
catch(e)
{
console.log("Exception Generated while executing decryptEnvironmentVariable() => ",e);
}
}
}
export abstract class Config {
static dbPassword: string = await EncryptionUtility.decryptEnvironmentVariable(process.env.dbPassword);
}
在上面的代码中,我希望 Config 类的 dbPassword 静态变量应该具有解密的值。
当我在控制台中打印 Config.dbPassword 时,我得到 undefined。
另外,我收到错误,await 不能在抽象类中使用。
Config 类正在许多其他地方使用,我希望在 Config 类本身中拥有解密的值,以便其他地方完好无损。
您能否为我提供解决方案,例如如何在我的 Config 静态变量中实现此解密值?
任何人领导将不胜感激!
您面临的问题是您不能在类字段初始化中使用await,尤其是在静态上下文中。相反,您可以在单独的静态方法中或在 Lambda 初始化期间设置 dbPassword。
你需要做类似的事情:
import * as AWS from 'aws-sdk';
const kmsClient = new AWS.KMS({ region: 'us-east-1' });
class EncryptionUtility {
static async decryptEnvironmentVariable(encryptedValue: string): Promise<string> {
try {
console.log("function decryptEnvironmentVariable() input value => ", encryptedValue);
const req = {
CiphertextBlob: Buffer.from(encryptedValue, 'base64'),
EncryptionContext: { LambdaFunctionName: 'ioh_reference_data_service' },
};
const decryptResult = await kmsClient.decrypt(req).promise();
if (Buffer.isBuffer(decryptResult.Plaintext)) {
return Buffer.from(decryptResult.Plaintext).toString();
} else {
throw new Error('We have a problem');
}
} catch (e) {
console.log("Exception Generated while executing decryptEnvironmentVariable() => ", e);
throw e;
}
}
}
export abstract class Config {
static dbPassword: string;
static async initializeConfig() {
try {
Config.dbPassword = await EncryptionUtility.decryptEnvironmentVariable(process.env.dbPassword);
} catch (e) {
console.error("Error initializing Config:", e);
}
}
}
Config.initializeConfig();
但是,为什么不使用 ParameterStore,而不是使用加密的环境变量呢?这会大大简化事情。