AWS Elasticsearch授权标头

时间:2017-07-09 00:52:16

标签: amazon-web-services elasticsearch hash

我试图向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期望这个主体的哈希值与我生成的哈希值不同。是否需要进行一些编码才能生成正确的哈希?

1 个答案:

答案 0 :(得分:2)

几个月前我一直在寻找类似的东西。我找到了一个回购并做了一些小调整。此代码向AWS ES服务提交正确签名的请求。请在https://github.com/dy10/aws-elasticsearch-query-java

找到来源

如果你试图自己实施V4,很难让V4正确签名!