1

我想通过 POST _security/api_key API 在 elasticsearch 上创建 API 密钥,我可以创建这些,但我想限制对生成的密钥的搜索能力,但我无法做到。

本质上,我想要实现的是假设我的所有记录都有一个类似"username":"username1"或另一个类似的字段,即所有记录都将具有用户名字"username":"username2"的有效值

现在我想要的是能够创建一个键,我在其中指定类似的"username":"username2"内容,然后将其附加到使用该键作为 AND 案例进行的每个搜索查询中,例如该键搜索 (/index_name/_search)

{
    "query": {
        "match": {
            "key_zz":"value_aa"
        }
    }
}

此查询实际上是以下两者的 AND(即,如果存在具有此组合的记录"key_zz":"value_aa"但 username 的值不是username2 则 API 不会返回该对象)

{
    "query": {
        "match": {
            "key_zz":"value_aa"
        }
    }
}

AND

{
    "query": {
        "must": { 
          "match" : {
            "username":"username2"
          } 
        }
    }
} 

我尝试使用以下所有组合创建密钥:

    "name": "key-name",
    "role_descriptors": {
        "role_name": {
            "indices": [
                {
                    "names": [
                        "index_name"
                    ],
                    "privileges": [
                        "read"
                    ],
                    "query": {
                        "match": {
                            "username": "value_custom"
                        }
                    }
                }
            ]
        }
    }
}

在查询字段中,我尝试了以下所有组合:

           "query": {
                        "and": {
                            "username": "value_custom"
                        }
                    }
          "query": {
                        "bool": {
                            "must": {
                                "match": {
                                    "username": "value_custom"
                                }
                            }
                        }
                    }
           "query": {
                        "bool": {
                            "must": {
                                "bool": {
                                    "must": {
                                        "match": {
                                            "username": "value_custom"
                                        }
                                    }
                                }
                            }
                        }
                    }

但以上都没有奏效。另外,之前用户名字段的映射类型是文本,但后来我将其更新为关键字

简而言之,我想要实现的是某种文档级别的安全性。我知道 ElasticSearch 具有某种文档级安全性(https://www.elastic.co/guide/en/elastic-stack-overview/current/document-level-security.html),但在我们的架构中,我们希望实现这使用具有受限搜索功能的 API 密钥。我们目前正在使用 Algolia,并且我们正在使用我上面描述的确切实现来实现这一点。ElasticSearch 文档有关于如何限制角色的参考资料,但没有关于如何限制 API 密钥的参考资料。需要帮助来实现这一目标。

另外,我正在使用 ElasticSearch v7

一些参考链接:

  1. https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html
  2. https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-put-role.html
4

0 回答 0