node.js - Lambda 中的 NodeJS AWS KMS 解密

标签 node.js aws-lambda aws-sdk aws-kms

首先让我说,感觉这个问题被问了很多,但问题中的答案似乎都不能解决我遇到的问题。

我正在用 NodeJS 编写一个 lambda 函数。除了尝试解密加密的环境变量外,它的一切都很好。

为了让它发挥作用,我已经将有关我的 Lambda 的所有其他内容都注释掉了,但我仍然没有得到任何结果。这是我现在正在使用的代码:

const aws = require('aws-sdk')
exports.handler = async (event, context, callback) => {
    const kms = new aws.KMS()

    let params = {
      //CiphertextBlob: Buffer.from(process.env.SECRET_KEY, 'base64')
      CiphertextBlob: process.env.SECRET_KEY
    }

    console.log('before decrypt')
    console.log('SECRET_KEY', process.env.SECRET_KEY)

    kms.decrypt(params, function (err, data) {
      console.log('decrypt')
      if (err) console.log(err, err.stack) // an error occurred
      else     console.log(data)           // successful response
    })

    console.log('after decrypt')
}

Lambda 运行成功,没有遇到任何错误。这是此代码的输出:

START RequestId: c3a83ca7-0f7a-11e9-84f1-a5f7503df368 Version: $LATEST
2019-01-03T17:12:36.726Z    c3a83ca7-0f7a-11e9-84f1-a5f7503df368    before decrypt
2019-01-03T17:12:36.763Z    c3a83ca7-0f7a-11e9-84f1-a5f7503df368    SECRET_KEY Encoded key string that I'm not putting in here
2019-01-03T17:12:36.765Z    c3a83ca7-0f7a-11e9-84f1-a5f7503df368    after decrypt
END RequestId: c3a83ca7-0f7a-11e9-84f1-a5f7503df368
REPORT RequestId: c3a83ca7-0f7a-11e9-84f1-a5f7503df368  Duration: 699.51 ms Billed Duration: 700 ms     Memory Size: 128 MB Max Memory Used: 40 MB  

如您所见,解密回调中的控制台日志都没有实际显示,我不知道为什么。

使用 key 的缓冲版本(第 6 行)而不是 key 的明文版本(第 7 行)对输出也没有任何影响。

有人可以帮我弄清楚我错过了什么吗?

最佳答案

这是我的同事帮助我的解决方案。

const aws = require('aws-sdk')
const kms = new aws.KMS()
exports.handler = async (event, context, callback) => {
  let params = {
    CiphertextBlob: Buffer.from(process.env.SECRET_KEY, 'base64')
  }

  let secret = null
  try {
    const decrypted = await kms.decrypt(params).promise()
    secret = decrypted.Plaintext.toString('utf-8')
  }
  catch (exception) {
    console.error(exception)
  }
}

关于node.js - Lambda 中的 NodeJS AWS KMS 解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54026891/

相关文章:

email - AWS SES 处理延迟

mysql - 使用 Sequelize 排除空关联数组

node.js - 如何调试 Node.JS 子 fork 进程?

node.js - 排队异步任务

node.js - Aws lambda 描述实例超时

android - 为 MQTT 连接 AWS 服务器时出现异常

javascript - JOIN 查询在 Node-postgres 中不起作用

java - 在 AWS lambda 中使用 Spring data jpa 部署 Spring boot

node.js - 如何将 DynamoDB Streams 对象映射到 Javascript 对象?

node.js - AWS SDK v3 无法从配置文件获取区域