1

我想在弹性中应用文档级别的安全性,但是一旦我在用户元数据中提供了多个值,我就找不到匹配项。

我正在弹性创建一个角色和一个用户,并将用户元数据中的值传递给应该在其基础上进行搜索的角色。如果我给出一个值,它就可以正常工作。

创建角色:

PUT _xpack/security/role/my_policy

{ 
    "indices": [{
        "names": ["my_index"],
        "privileges": ["read"],
        "query": {
            "template": {
                "source": "{\"bool\": {\"filter\": [{\"terms_set\": {\"country_name\": {\"terms\": {{#toJson}}_user.metadata.country_name{{/toJson}},\"minimum_should_match_script\":{\"source\":\"params.num_terms\"}}}}]}}"
            }
        }
    }]
}

对于用户:

PUT _xpack/security/user/jack_black

{
    "username": "jack_black",
    "password":"testtest",
    "roles": ["my_policy"],
    "full_name": "Jack Black"
    "email": "jb@tenaciousd.com",
    "metadata": {
        "country_name": ["india" , "japan"]
    }
}

我希望输出仅是印度和日本的结果。如果用户搜索其他任何内容,他们应该不会得到任何结果。

但是,我根本看不到任何结果:

{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 0,
        "max_score": null,
        "hits": []
    }
}
4

0 回答 0