Расшифровка NodeJS AWS KMS в Lambda - PullRequest
0 голосов
/ 03 января 2019

Позвольте мне начать с того, что мне кажется, что этот вопрос задают много, но ни один из ответов на вопросы, похоже, не решает проблему, с которой я сталкиваюсь.

Я пишу лямбда-функциюв NodeJS.Все в нем прекрасно работает, за исключением попытки расшифровать зашифрованную переменную окружения.

Пытаясь заставить это работать, я прокомментировал все остальное, касающееся моей 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')
}

Лямбда работает успешно, ошибок нет.Вот вывод этого кода:

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  

Как видите, ни один из журналов консоли внутри обратного вызова расшифровки фактически не отображается, и я не знаю, почему.

ИспользованиеБуферная версия секретного ключа (строка 6) вместо незашифрованной версии ключа (строка 7) также не влияет на вывод.

Может кто-нибудь помочь мне разобраться, что я?м отсутствует?

1 Ответ

0 голосов
/ 04 января 2019

Это решение, с которым мне помог мой коллега.

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)
  }
}
...