- Web应用程序的用途:**用户访问网站,输入数据并选择他们负责的商店,然后点击提交。然后在后端dynamoDB将连接两组数据-用户联系人到商店信息。我使用API网关进行搜索并创建路线-不涉及身份验证,除了iam角色允许lambda与ES和dynamoDB对话。
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
}
}
}
});
答复2)
axios(aws4.sign({
host: process.env.ES_ENDPOINT,
method: "POST",
url: `https://${process.env.ES_ENDPOINT}/indexname/_search`,
path: "/indexname/_search",
}))
2条答案
按热度按时间yxyvkwin1#
最简单的方法是使用AWS JavaScript SDK进行签名,并为其提供有限范围的凭据。
NB:这并不意味着使用AWS SDK ElasticSearch客户端。
当在Lambda中使用AWS SDK时,这是为您完成的,但它也可以在任何JavaScript环境中完成。虽然我会非常仔细地考虑在客户端使用它,但即使这样也有它的用途。
可以在here中找到为JavaScript SDK添加凭据的可能方法。
使用AWS JavaScript SDK向ES发出签名请求的示例见此处。
这里有几个基于资源的访问策略的例子。我想你要找的东西会在那页的下半部分。
ctrmrzij2#
aws4-axios库使这一点变得非常容易。