使用带有AWS KMS的Nodejs在s3中加密和解密文件

时间:2017-02-08 07:23:19

标签: node.js amazon-s3 amazon-kms

我正在使用AWS KMS将文件加密到s3存储桶。我目前正在使用AWS控制台执行此操作,但我想使用Nodejs执行此操作。

我刚刚查看了一些内容,但我对使用nodejs进行KMS加密和解密没有任何明确的想法。

2 个答案:

答案 0 :(得分:5)

您需要查看AWS SDK for javascript。从示例:

(!empty($userId)) { .... }

以下是aws-sdk package on NPM的链接。 以下是main AWS SDK for Javascript documentation page的链接。

希望这有帮助!

答案 1 :(得分:1)

这是有关如何使用AWS KMS进行加密和解密的完整示例

// Imports
const AWS = require('aws-sdk');
const helper = require('./helper');

AWS.config.update({ region: 'eu-west-3' })

// Declare local variables
const kms = new AWS.KMS();

helper.getTextFile('./test.txt')
.then(buffer => encryptData(buffer))
.then(encryptedData => helper.saveBlobToFile(encryptedData))
.then(data => helper.getTextFile('./encryptedTxt.txt'))
.then(buffer => decryptData(buffer))
.then(plainText => helper.saveBlobToFile(plainText)) // plaintext
.catch(console.log);

function encryptData(buffer) {
    const params = {
        KeyId: 'your key id',
        Plaintext: buffer
    }
    return new Promise((resolve, reject) => {
        kms.encrypt(params, (err, data) => {
            if(err) reject(err);
            else resolve(data.CiphertextBlob);
        })
    })
}

function decryptData(buffer) {
    const params = {
        CiphertextBlob: buffer
    }
    return new Promise((resolve, reject) => {
        kms.decrypt(params, (err, data) => {
            if(err) reject(err);
            else resolve(data.Plaintext);
        })
    })
}

辅助方法在这里:

const glob = require('glob')
const fs = require('fs')


function getTextFile(filePath) {
    return new Promise((resolve, reject) => {
        fs.readFile(filePath, (err, data) => {
            if(err) reject(err);
            else {
                resolve(data); 
            }
        });
    })
}


function saveBlobToFile(blob) {
    var buffer = Buffer.from(blob, 'base64'); // decode
    return new Promise((resolve, reject) => {
        fs.writeFile('encryptedTxt.txt', buffer, (err) => {
            if(err) reject(err);
            else resolve('file saved correctly');
        })
    })
}

module.exports = {
    getTextFile,
    saveBlobToFile
}