私はAWS elasticsearchで検索APIにリクエストを作成しようとしています。私の要求は、クラスタが開いているときに機能します。クラスタへのアクセスを制限し、署名付きリクエストを生成しようとすると、403 Forbiddenエラーが発生して失敗します。私は私の要求によって生成されたペイロードハッシュにエラーを絞り込んだ。次のように私のリクエストボディは、次のとおりです。AWS弾性検索承認ヘッダー
{
"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();
からGuavaライブラリ。
AWSがこのボディに期待しているハッシュは、私が生成しているものとは異なります。適切なハッシュを生成するために必要なエンコーディングがありますか?
私はhttps://github.com/inreachventures/aws-signing-request-interceptorを使用して終了しました。 ESのためにJestクライアントライブラリを使用していたので、これはうまくいきました。 –