javascript - 如果我不使用 cognito,如何使用 Nodejs 在 axios 中准确签署 AWS elasticsearch 搜索请求?
问题描述
Web App的目的:用户访问网站,输入他们的数据并选择他们负责的商店并点击提交。然后在后端 dynamoDB 将连接两组数据 - 用户联系人来存储信息。我正在使用 api 网关进行搜索并创建路由 - 除了允许 lambda 与 ES 和 dynamoDB 对话的 iam 角色之外,不涉及身份验证。
1)我没有使用 Cognito 或进行身份验证 - 我不需要它用于这个用例,这是一个调查应用程序。但是,我正在使用 Elasticsearch 来帮助我的自动完成下拉/搜索字段。
2) 我能够进行正常的非签名 axios 调用以获取搜索结果(参见下面的代码 (A1))。Params.url 有 {endpoint}/indexname/_search。这是有效的,因为现在我的端点是敞开的。
我想要完成的事情:我想锁定我的 ES 域,这样它就更安全了。虽然 IAM 角色允许我的 lambda 与 ES 对话,但除非 ES 完全开放,否则我无法执行 (A1) 中显示的搜索功能。我知道我必须签署我的请求,但我对如何使用 aws4 之类的包来完成这一点有点困惑。AWS 站点上显示的示例有点令人困惑,我没有任何运气可以复制它。
我已经用 aws4(见 A2)开始了这个过程,但我不清楚如何让它工作。有人可以给一些指导吗?总结..:a)我如何使用 aws4 或任何其他方法实现签名请求,b)ES 域的策略应该是什么样的?
A1)
axios({
method: "post",
url: params.url,
headers: {
"Content-Type": "application/json"
},
data: {
query: {
query_string: {
default_field: "Building Description",
query: params.data
}
}
}
});
A2)
axios(aws4.sign({
host: process.env.ES_ENDPOINT,
method: "POST",
url: `https://${process.env.ES_ENDPOINT}/indexname/_search`,
path: "/indexname/_search",
}))
解决方案
推荐阅读
- android-studio - 进入另一个使用 getSupportActionbar 的活动时应用程序崩溃?
- c++ - 类范围的“使用”类型别名:[何时]方法中的用法可以在类型别名之前使用吗?
- amazon-web-services - 组中用户的 IAM 策略可以创建、删除和修改 Amazon Ec2 实例
- python - 在使用漂亮的汤在python中抓取时在表格tr标签之间获取html结束标签
- c# - Point vs MCvPoint2D64f,它们有什么区别?
- python - django 形式的“简单动态”下拉菜单
- unity3d - Unity 2D,获取操纵杆方向
- php - 解码加密的恶意脚本
- python - 如何为元素解析(并创建行)数据框?
- javascript - 浏览器调整大小上的Jquery反向功能