如何在@aws-crypto/client-node节点js加密客户端中传递代理服务器

Dha*_*ngh 1 amazon-s3 amazon-web-services node.js amazon-kms aws-sdk-nodejs

我正在使用@aws-crypto/client-nodenpm 模块使用KMS密钥加密解密文件。但是当我运行以下代码时。我收到错误“配置中缺少凭据”

const {
  KmsKeyringNode,
  encrypt,
  decrypt
} = require("@aws-crypto/client-node");
const encryptData = async (plainText, context) => {
  try {
    const {
      result
    } = await encrypt(keyring, plainText, {
      encryptionContext: context
    });
    return result;
  } catch (e) {
    console.log(e);
  }
};

encryptData('hello world', {
  stage: "test",
  purpose: "poc",
  origin: "us-east-1"
})
Run Code Online (Sandbox Code Playgroud)

coo*_*ool 5

我可以看到这段代码有几个问题:

  1. 您正在尝试直接从模块导入加密和解密函数。这不是 aws-crypto 的工作原理。您需要使用构建客户端来创建将保存这些方法的实例。
  2. 您正在使用密钥环变量,但从未声明密钥环?您需要使用 .KmsKeyringNode 方法创建密钥环。

为了正确使用 AWS/KMS 来加密和解密数据,请查看下面的示例。(请注意,为了简单起见,此示例没有使用上下文,也没有使用您可以添加的其他密钥。此外,此示例还假设您也使用相同的密钥进行加密和解密)

const {
  AMAZON_ENCRYPTION_KEY_ARN
} = process.env;

const awsCrypto = require('@aws-crypto/client-node');

const awsEncryptionClient = awsCrypto.buildClient(
  awsCrypto.CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
);
const keyring = new awsCrypto.KmsKeyringNode({
  generatorKeyId: AMAZON_ENCRYPTION_KEY_ARN
});


const encrypt = async (data) => {
  try {
    const { result } = await awsEncryptionClient.encrypt(keyring, data);
    return result.toString('base64');
  }
  catch(err) {
    console.log('Encryption error: ', err);
    throw err;
  }
};

const decrypt = async (encryptedData) => {
  try {
    const encryptedBuffer = Buffer.from(encryptedData, 'base64');
    const { plaintext } = await awsEncryptionClient.decrypt(keyring, encryptedBuffer);
    return plaintext.toString('utf8');
  }
  catch(err) {
    console.log('Decryption error: ', err);
    throw err;
  }
};

module.exports = {
  encrypt,
  decrypt
};
Run Code Online (Sandbox Code Playgroud)

您可以使用上面的代码创建一个文件,并通过在其他地方导入该文件来调用函数。您将需要添加加密/解密密钥 arn。除了加密和解密之外,还添加了base64的编码和解码,因此最终结果适合存储(例如数据库)

有关其他代码示例,请查看此处