使用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
这以上的内容。