как передать прокси-сервер в @aws-crypto / клиент-узловой клиент шифрования узла js

#node.js #amazon-web-services #amazon-s3 #aws-kms #aws-sdk-nodejs

#node.js #amazon-веб-сервисы #amazon-s3 #amazon-kms #aws-sdk-nodejs

Вопрос:

Я использую @aws-crypto/client-node модуль npm для шифрования расшифровки файла с помощью 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 resu<
  } catch (e) {
    console.log(e);
  }
};

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

Ответ №1:

Я вижу пару проблем с этим кодом:

  1. Вы пытаетесь импортировать функции шифрования и дешифрования непосредственно из модуля. Это не так, как работает aws-crypto. Вам необходимо использовать build client для создания экземпляра, который будет содержать эти методы.
  2. Вы используете переменную keyring, но keyring никогда не объявляется? Вам необходимо создать связку ключей, используя метод .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
};
  

Вы можете создать файл, используя приведенный выше код, и вызывать функции, импортируя этот файл в другое место. Вам нужно будет добавить ключ шифрования / дешифрования arn. Помимо шифрования и дешифрования, добавляется кодирование и декодирование в base64, поэтому конечный результат подходит для хранения (например, базы данных)

Дополнительные примеры кода смотрите здесь.