POST 从应用程序模拟用户角色(例如经理、承包商等...)向 Amazon Elastic Search 发出请求

POST request to Amazon Elastic Search from application impersonating user role (e.g. manager, contractor, etc...)

我正在 Spring 启动依赖于 Amazon Elastic Search 的搜索微服务。

我的用例如下:

GIVEN an authenticated user
   AND the user has been authorized with the role Contractor by an In-House access management system;
WHEN the user searches through my service
THEN only the relevant documents are shown as per his/her privileges;

该请求(我猜 POST)看起来如何才能起作用?

只要您的请求没有更改任何内容,您就应该使用 GET 而不是 POST,但是 POST 将支持无法使用 GET 发送请求正文的客户端。

为了显示允许用户查看的文档,您需要按照此处所述为您的角色设置文档级安全性:https://opendistro.github.io/for-elasticsearch-docs/docs/security/access-control/document-level-security/

elastic 的 elasticsearch 用户应该看看:https://www.elastic.co/guide/en/elasticsearch/reference/current/document-level-security.html

我最终在 Open Distro ElasticSearch 文档中找到了关于 User Impersonation here.

的答案

简而言之,诀窍是按以下方式将 opendistro_security_impersonate_as 添加到 header 中:

curl -XGET -u 'admin:admin' -k -H "opendistro_security_impersonate_as: user_1" https://localhost:9200/_opendistro/_security/authinfo?pretty

你可以在哪里替换:

  • admin:admin 与您的服务用户
  • user_1 与您要模拟的用户和
  • https://localhost:9200/_opendistro/_security/authinfo?与您的 GET 请求的 URL 相得益彰。

这对我来说很有用。