AWS Elasticsearch 未能检测到 Elasticsearch 版本。它给出了 403 禁止
AWS Elasticsearch Failed to detect the Elasticsearch version. It gives 403 forbidden
我正在将 AWS elasticsearch 与休眠和 Spring MVC 结合使用。服务器启动时自动检测elasticsearch的版本,抛出以下异常
Failed to detect the Elasticsearch version running on the cluster.
at org.hibernate.search.elasticsearch.dialect.impl.DefaultElasticsearchDialectFactory.createDialect(DefaultElasticsearchDialectFactory.java:39) ~[hibernate-search-elasticsearch-5.9.0.Final.jar:5.9.0.Final]
at org.hibernate.search.elasticsearch.impl.DefaultElasticsearchService.start(DefaultElasticsearchService.java:100) ~[hibernate-search-elasticsearch-5.9.0.Final.jar:5.9.0.Final]
at org.hibernate.search.engine.service.impl.StandardServiceManager$ServiceWrapper.startService(StandardServiceManager.java:323) ~[hibernate-search-engine-5.9.0.Final.jar:5.9.0.Final]
at org.hibernate.search.engine.service.impl.StandardServiceManager$ServiceWrapper.startVirtual(StandardServiceManager.java:288) ~[hibernate-search-engine-5.9.0.Final.jar:5.9.0.Final]
at org.hibernate.search.engine.service.impl.StandardServiceManager.createAndCacheWrapper(StandardServiceManager.java:225) ~[hibernate-search-engine-5.9.0.Final.jar:5.9.0.Final]
at org.hibernate.search.engine.service.impl.StandardServiceManager.requestService(StandardServiceManager.java:100) ~[hibernate-search-engine-5.9.0.Final.jar:5.9.0.Final]
at org.hibernate.search.elasticsearch.impl.ElasticsearchIndexManager.initialize(ElasticsearchIndexManager.java:153) ~[hibernate-search-elasticsearch-5.9.0.Final.jar:5.9.0.Final]
at org.hibernate.search.indexes.impl.IndexManagerGroupHolder.doCreateIndexManager(IndexManagerGroupHolder.java:195) ~[hibernate-search-engine-5.9.0.Final.jar:5.9.0.Final]
Caused by: org.hibernate.search.exception.SearchException: HSEARCH400007: Elasticsearch request failed.
403 'Forbidden' with body
{
"message": "Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter. Authorization header requires 'SignedHeaders' parameter. Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header."
请注意,如果我使用专用的弹性搜索服务器安装而不是 AWS elasticsearch 服务,一切正常。
您可能在 elasticsearch 配置中设置了以下属性
hibernate.search.default.elasticsearch.username
hibernate.search.default.elasticsearch.password
AWS elasticsearch服务默认使用匿名用户,所以不需要用户名密码。如果您设置这些属性(即使使用空白值),hibernate 将尝试使用基本身份验证对请求进行身份验证,这将失败,因为其他必需的 headers 将丢失。所以在使用AWS elasticsearch服务时不要设置以上属性。
我正在将 AWS elasticsearch 与休眠和 Spring MVC 结合使用。服务器启动时自动检测elasticsearch的版本,抛出以下异常
Failed to detect the Elasticsearch version running on the cluster.
at org.hibernate.search.elasticsearch.dialect.impl.DefaultElasticsearchDialectFactory.createDialect(DefaultElasticsearchDialectFactory.java:39) ~[hibernate-search-elasticsearch-5.9.0.Final.jar:5.9.0.Final]
at org.hibernate.search.elasticsearch.impl.DefaultElasticsearchService.start(DefaultElasticsearchService.java:100) ~[hibernate-search-elasticsearch-5.9.0.Final.jar:5.9.0.Final]
at org.hibernate.search.engine.service.impl.StandardServiceManager$ServiceWrapper.startService(StandardServiceManager.java:323) ~[hibernate-search-engine-5.9.0.Final.jar:5.9.0.Final]
at org.hibernate.search.engine.service.impl.StandardServiceManager$ServiceWrapper.startVirtual(StandardServiceManager.java:288) ~[hibernate-search-engine-5.9.0.Final.jar:5.9.0.Final]
at org.hibernate.search.engine.service.impl.StandardServiceManager.createAndCacheWrapper(StandardServiceManager.java:225) ~[hibernate-search-engine-5.9.0.Final.jar:5.9.0.Final]
at org.hibernate.search.engine.service.impl.StandardServiceManager.requestService(StandardServiceManager.java:100) ~[hibernate-search-engine-5.9.0.Final.jar:5.9.0.Final]
at org.hibernate.search.elasticsearch.impl.ElasticsearchIndexManager.initialize(ElasticsearchIndexManager.java:153) ~[hibernate-search-elasticsearch-5.9.0.Final.jar:5.9.0.Final]
at org.hibernate.search.indexes.impl.IndexManagerGroupHolder.doCreateIndexManager(IndexManagerGroupHolder.java:195) ~[hibernate-search-engine-5.9.0.Final.jar:5.9.0.Final]
Caused by: org.hibernate.search.exception.SearchException: HSEARCH400007: Elasticsearch request failed.
403 'Forbidden' with body
{
"message": "Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter. Authorization header requires 'SignedHeaders' parameter. Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header."
请注意,如果我使用专用的弹性搜索服务器安装而不是 AWS elasticsearch 服务,一切正常。
您可能在 elasticsearch 配置中设置了以下属性
hibernate.search.default.elasticsearch.username hibernate.search.default.elasticsearch.password
AWS elasticsearch服务默认使用匿名用户,所以不需要用户名密码。如果您设置这些属性(即使使用空白值),hibernate 将尝试使用基本身份验证对请求进行身份验证,这将失败,因为其他必需的 headers 将丢失。所以在使用AWS elasticsearch服务时不要设置以上属性。