我的任务是对elasticsearchAPI进行POST API调用,
https://search-test-search-fqa4l6ubylznt7is4d5yxlmbxy.us-
west-2.es.amazonaws.com/klove-ddb/recipe/_search
我以前没有对AWS服务进行API调用的经验。
所以,我尝试了-
axios.post('https://search-test-search-fqa4l6ubylznt7is4d5yxlmbxy.us-west-2.es.amazonaws.com/klove-ddb/recipe/_search')
.then(res => res.data)
.then(res => console.log(res));
但是我收到了{“ Message”:“ User:匿名用户无权执行:es:ESHttpPost”}
我还签出了一些IAM角色,并将AWSESFullAccess策略添加到我的配置文件中。
我仍然无法解决任何问题。
请帮我。
您看到此错误的原因User: anonymous is not authorized to perform: es:ESHttpPost
是因为您在发出数据请求时没有让ElasticSearch知道您是谁-这就是为什么它说“匿名”的原因。
身份验证有两种方式,最简单的方法是使用elasticsearch库。使用此库,您将为IAM角色/用户提供一组凭据(访问密钥,秘密密钥)。它将使用它来创建签名的请求。签名的请求将使AWS知道是谁在实际发出请求,因此不会以匿名方式接收,而是您自己。
使它起作用的另一种方法是将访问策略调整为基于IP:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "es:*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"AAA.BBB.CCC.DDD"
]
}
},
"Resource": "YOUR_ELASTICSEARCH_CLUSTER_ARN"
}
]
}
对于您在此处提供的ip(范围)的任何人,此特定策略将是开放的。但是,这将使您免于必须签署请求的麻烦。
这elasticsearch-js
是一个有助于设置AWS
ES的库
一个有效的示例如下:
const AWS = require('aws-sdk')
const elasticsearch = require('elasticsearch')
const awsHttpClient = require('http-aws-es')
let client = elasticsearch.Client({
host: '<YOUR_ES_CLUSTER_ID>.<YOUR_ES_REGION>.es.amazonaws.com',
connectionClass: awsHttpClient,
amazonES: {
region: '<YOUR_ES_REGION>',
credentials: new AWS.Credentials('<YOUR_ACCESS_KEY>', '<YOUR_SECRET_KEY>')
}
});
client.search({
index: 'twitter',
type: 'tweets',
body: {
query: {
match: {
body: 'elasticsearch'
}
}
}
})
.then(res => console.log(res));
问题内容: 我正在尝试从外部PHP文件将JavaScript函数调用为JavaScript脚本。我的代码又大又不同,所以我在这里编写示例代码。 这是我的PHP代码: 这是我的JavaScript代码: 这就是我想要做的。 我 原来的 PHP文件不包含这些数学函数,但是想法是相同的。 如果一些它怎么没有一个妥善的解决办法,那么可能你 请 提出一种替代,但它应该从外部PHP调用值。 问题答案: 是的,
问题内容: 我目前正在使用HTTP方法来调用一些URL,这将导致JIRA问题。 现在,我想使用Apache Camel,该如何使用? 我需要通过骆驼调用以下链接: 由于我是Camel的新手,因此也请提出一些解决方案和示例。 谢谢 问题答案: 您可以轻松使用CXFRS组件;如果出于某种原因需要使用HTTP组件进行操作,则也可以轻松地使用它: 当然,在到达路由的这一部分之前,您将需要使用标头来丰富您的
问题是Netbeans的默认配置无法在调试模式下正确启动Spring,并且当您在internet上搜索时,您只能在Spring文档中找到过时的信息,而这些信息将不起作用。 如果你知道怎么做,解决方法很简单。请在下面找到正确的设置说明。
问题内容: 我正在尝试通过NodeJS子进程在Windows上运行命令: 当它调用时,它将其写入描述符,但是此时我如何触发响应?当您实际在命令提示符下键入命令时,如何发送“输入”键信号?目前我没有收到任何回应。 问题答案: 发送换行符将执行该命令。将退出外壳。 我在OSX上修改了该示例以使其与bash一起使用。 输出将是:
我已经尝试了。所有的失败都表明协议必须是HTTP或HTTPS。 Node有可用的FTP客户端(在npmjs上可用)。但是,根据他们的文档,他们需要创建一个到FTP服务器的连接,更改目录,然后下载它。 有什么简单的解决方法吗?
问题内容: 我有一个通常从命令行启动的Java程序。从命令行启动后,Java程序将一直运行直到被按下Ctrl + C退出或杀死另一个脚本中的命令为止。Java程序向控制台输出错误消息(如果有)。 现在,我想开发基于Express的NodeJs Web应用程序。当用户单击链接(运行)时,单击处理程序将调用Ajax请求,这将导致后端NodeJs脚本运行该Java程序(如果尚未运行)。另一个链接(停止)