Elasticsearch npm:传递AWS凭证
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch npm:传递AWS凭证相关的知识,希望对你有一定的参考价值。
所以我试图使用Elasticsearch npm客户端,但我遇到了身份验证问题。我目前正在使用基于IAM用户身份的身份验证。出于显而易见的原因,我不想转向开放安全性,我也宁愿使用IAM用户的身份而不是基于IP的身份验证。
IAM为用户提供用户名和密码,在请求时用作凭据。我不确定如何传递它们,我的Elasticsearch服务器会保持超时。这是我到目前为止所尝试的。 documentation说它将它作为客户端配置对象中的auth
密钥传递。我可以确认用户名和密码正确,并且端点是AWS提供的端点。
aws.js
const elasticsearch = require('elasticsearch');
const envs = require('dotenv').config();
module.exports = function () {
return new elasticsearch.Client({
host: [{
apiVersion: '2.3',
protocol: 'https',
auth: `${envs.username}:${envs.password}`,
host:`${envs.endpoint}`
}]
})
}
index.js
const client = require('./aws')();
client.ping({
// ping usually has a 3000ms timeout
requestTimeout: Infinity
}, function(error) {
console.log('pass')
if (error) {
console.trace(error);
} else {
console.log('All is well');
}
});
任何问题或评论将不胜感激。
谢谢!
想出这个。为了供将来参考,elasticsearch JS没有签署AWS的方法。它只支持SSL signed and basic authentication。因此你可以使用名为this NPM的http-aws-es
。它使用AWS SDK使用您的IAM访问密钥ID和秘密访问密钥签署Elasticsearch。以下是我最终为我的Elasticsearch客户端所做的事情
const elasticsearch = require('elasticsearch');
const AWSConnector = require('http-aws-es'),
const envs = require('dotenv').config();
module.exports = function () {
return new elasticsearch.Client({
connectionClass: AWSConnector,
apiVersion: '2.3',
port: 443,
protocol: 'https',
host:`${envs.endpoint}`,
amazonES: {
region: 'us-east-1',
accessKey: envs.accessKeyId,
secretKey: envs.secretAccessKey
}
})
}
另外需要注意的是,我必须将端口设置为443
。如果协议是http,它将是80
端口。由于显而易见的原因,Elasticsearch JS库默认为端口9200
。如果您未指定端口,则无论您添加哪个主机,它都将始终默认为9200
。
这是适合我的代码。
const elasticsearch = require('elasticsearch');
var AWS = require('aws-sdk');
var options = {
host: 'host',
port:443,
protocol:'https',
connectionClass: require('http-aws-es'),
awsConfig:new AWS.Config({
credentials: new AWS.Credentials('aws_access_key', 'aws_secret_key'),
region: 'us-east-1'
})
};
var client = require('elasticsearch').Client(options);
client.ping({
// ping usually has a 3000ms timeout
requestTimeout: 3000
}, function (error) {
if (error) {
console.trace('elasticsearch cluster is down!');
} else {
console.log('All is well');
}
});
以上是关于Elasticsearch npm:传递AWS凭证的主要内容,如果未能解决你的问题,请参考以下文章
Terraform:传递 AWS 系统管理器参数存储变量时,Terraform AWS 提供商凭证无效
aws 创建基于vpc的elasticsearch service
使用谷歌传输服务将文件从 AWS 传输到 GCP 时出现凭证错误