2017-07-09 12 views
1

私は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がこのボディに期待しているハッシュは、私が生成しているものとは異なります。適切なハッシュを生成するために必要なエンコーディングがありますか?

答えて

1

私は数ヶ月前に同様のものを探していました。私はレポを見つけ、少し微調整をしました。このコードは、適切に署名されたリクエストをAWS ESサービスに送信します。ソースを見つけてくださいhttps://github.com/dy10/aws-elasticsearch-query-java

あなた自身で実装しようとしている場合は、V4署名を取得するのは難しいです!

+0

私はhttps://github.com/inreachventures/aws-signing-request-interceptorを使用して終了しました。 ESのためにJestクライアントライブラリを使用していたので、これはうまくいきました。 –