我试图向AWS elasticsearch上的搜索API发出请求。群集打开时我的请求有效。当我限制对群集的访问并尝试生成签名请求时,它会因403 Forbidden错误而失败。我已将错误缩小到我的请求生成的有效负载哈希值。我的要求机构如下:
{
"query" : {
"bool" : {
"must" : [
{
"exists" : {
"field" : "part3",
"boost" : 1.0
}
}
],
"filter" : [
{
"term" : {
"part1" : {
"value" : "v",
"boost" : 1.0
}
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
"aggregations" : {
"uniqueLabels" : {
"terms" : {
"field" : "labelKeyword",
"size" : 20,
"min_doc_count" : 1,
"shard_min_doc_count" : 0,
"show_term_doc_count_error" : false,
"order" : [
{
"_count" : "desc"
},
{
"_term" : "asc"
}
]
},
"aggregations" : {
"pageViews" : {
"sum" : {
"field" : "count"
}
},
"count" : {
"value_count" : {
"field" : "labelKeyword"
}
}
}
}
}
}
我使用ElasticSearch SearchSourceBuilder.toString()
获取此JSON
如何生成有效负载哈希?我正在使用:
Hashing.sha256().hashString(data, StandardCharsets.UTF_8).toString();
来自番石榴图书馆。
AWS期望这个主体的哈希值与我生成的哈希值不同。是否需要进行一些编码才能生成正确的哈希?
答案 0 :(得分:2)
如果你试图自己实施V4,很难让V4正确签名!