はじめに
情報保護を難しくなっている現代社会では、セキュリティ対応はますます重要になってきています。
Cloud技術の進化によって、セキュリティ対応しやすくなる部分もあります。
AWSのElasticeSearchサービスへのHTTP リクエストの署名方法を簡単にまとめてみます。
1. AWS SDKのライブラリを使う
AWSのドキュメントにある通り、署名したリクエストを送信できますが、検索のクエリなどはちょっと手間ですね。
node.js
varcredentials=newAWS.EnvironmentCredentials('AWS');varsigner=newAWS.Signers.V4(request,'es');signer.addAuthorization(credentials,newDate());varclient=newAWS.HttpClient();client.handleRequest(request,null,function(response){// ....}
2. aws-elasticsearch-connectorモジュールを使う
Node.jsからElasticSearchへアクセスするには、ElasticSearchクライアントを使うと検索などに便利です。
aws-elasticsearch-connectorを利用して署名も簡単にできます。
2.1 aws-elasticsearch-connectorインストール
npm install --save aws-elasticsearch-connector @elastic/elasticsearch aws-sdk
2.2 profile利用例
node.js
constAWS=require('aws-sdk');const{Client}=require('@elastic/elasticsearch');const{AmazonConnection}=require('aws-elasticsearch-connector');// Load AWS profile credentialsAWS.config.update({profile:'my-profile'});constclient=newClient({node:'my-elasticsearch-cluster.us-east-1.es.amazonaws.com',Connection:AmazonConnection});
2.3 .envにアクセスキー、シークレットキー利用例
AWS_ACCESS_KEY_ID=foo # alias: AWS_ACCESS_KEYAWS_SECRET_ACCESS_KEY=bar # alias: AWS_SECRET_KEYAWS_SESSION_TOKEN=xxx //optional
node.js
const{Client}=require('@elastic/elasticsearch');const{AmazonConnection}=require('aws-elasticsearch-connector');constclient=newClient({node:'my-elasticsearch-cluster.us-east-1.es.amazonaws.com',Connection:AmazonConnection,});
参考URL:https://github.com/compwright/aws-elasticsearch-connector#readme
2.4 検索結果
node.js
letsearchResult=awaitclient.search({index:'xxx_index',body:{//...});// ヒットしたデータlethits=searchResult.body.hits.hits;// ヒットしたデータ数lethitsCount=searchResult.body.hits.total;
ElasticSearchのクライアントAPI:
https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/client-usage.html
以上