使用Node.js对AWS ElasticSearch的HTTP请求进行签名

首先

在现代社会中,信息保护变得更加困难,因此安全对策变得越来越重要。
由于云技术的进步,部分安全对策变得更容易处理。

我将简要总结一下如何对AWS的ElasticeSearch服务进行HTTP请求签名的方法。

使用AWS SDK库

正如AWS文档所述,您可以发送已签名的请求,但是查询之类的搜索有点麻烦。

请参考以下URL:https://docs.aws.amazon.com/zh_cn/elasticsearch-service/latest/developerguide/es-request-signing.html

var credentials = new AWS.EnvironmentCredentials('AWS');
  var signer = new AWS.Signers.V4(request, 'es');
  signer.addAuthorization(credentials, new Date());

  var client = new AWS.HttpClient();
  client.handleRequest(request, null, function(response) {
    // ....
  }

使用aws-elasticsearch-connector模块。

要访问ElasticSearch,可以使用ElasticSearch客户端进行搜索等操作,这对于Node.js来说非常方便。
使用aws-elasticsearch-connector还可以轻松地进行签名。

2.1 安装AWS Elasticsearch连接器

安装 npm 包 aws-elasticsearch-connector @elastic/elasticsearch aws-sdk 并保存。

2.2 在以下场景下的profile使用示例

const AWS = require('aws-sdk');
const { Client } = require('@elastic/elasticsearch');
const { AmazonConnection } = require('aws-elasticsearch-connector');

// Load AWS profile credentials
AWS.config.update({
  profile: 'my-profile'
});


const client = new Client({
  node: 'my-elasticsearch-cluster.us-east-1.es.amazonaws.com',
  Connection: AmazonConnection
});

2.3 通过.env文件访问访问密钥和秘密密钥的示例

AWS_ACCESS_KEY_ID=foo      # alias: AWS_ACCESS_KEY
AWS_SECRET_ACCESS_KEY=bar  # alias: AWS_SECRET_KEY
AWS_SESSION_TOKEN=xxx  //optional
const { Client } = require('@elastic/elasticsearch');
const { AmazonConnection } = require('aws-elasticsearch-connector');

const client = new Client({
  node: 'my-elasticsearch-cluster.us-east-1.es.amazonaws.com',
  Connection: AmazonConnection,
});

请参考以下网址:https://github.com/compwright/aws-elasticsearch-connector#readme

2.4 搜索结果

let searchResult = await client.search({
    index: 'xxx_index',
    body: {
      //...
    });

// ヒットしたデータ
let hits = searchResult.body.hits.hits;
// ヒットしたデータ数
let hitsCount = searchResult.body.hits.total;

ElasticSearch的客户端API:
https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/client-usage.html

这以上的内容。

广告
将在 10 秒后关闭
bannerAds