我使用的是es 6.2.4和x-pack。我使用以下角色注册用户:
{
"password" : "changeme",
"roles" : [ "object_basic", "object_ext" ],
"full_name" : "FullName",
"email" : "sample@example.com",
"metadata" : {
"access_group_ids": ["1", "2", "3"]
}
}
我有以下安全角色。
基本对象:
{
"indices": [
{
"names": [ "*cases_*" ],
"privileges": [ "read" ],
"field_security" : {
"grant" : [ "case_id","short_name", "type", "status", "owner_department" ]
},
"query": "{\"template\":{\"source\":\"{\\\"bool\\\":{\\\"should\\\":[{\\\"terms\\\":{\\\"case_access_owner_group_ids\\\": {{#toJson}}_user.metadata.access_group_ids{{/toJson}}}},{\\\"terms\\\":{\\\"case_access_contributor_group_ids\\\": {{#toJson}}_user.metadata.access_group_ids{{/toJson}} }},{\\\"terms\\\":{\\\"case_access_viewer_group_ids\\\": {{#toJson}}_user.metadata.access_group_ids{{/toJson}} }},{\\\"terms\\\":{\\\"case_access_basic_viewer_group_ids\\\": {{#toJson}}_user.metadata.access_group_ids{{/toJson}} }} ]}}\"}}"
}
]
}
对象扩展名:
{
"indices": [
{
"names": [ "*cases_*" ],
"privileges": [ "read" ],
"field_security" : {
"grant" : [ "name", "description" ]
},
"query": "{\"template\":{\"source\":\"{\\\"bool\\\":{\\\"should\\\":[{\\\"terms\\\":{\\\"case_access_owner_group_ids\\\":{{#toJson}}_user.metadata.access_group_ids{{/toJson}}}},{\\\"terms\\\":{\\\"case_access_contributor_group_ids\\\":{{#toJson}}_user.metadata.access_group_ids{{/toJson}}}},{\\\"terms\\\":{\\\"case_access_viewer_group_ids\\\": {{#toJson}}_user.metadata.access_group_ids{{/toJson}}}}]}}\"}}"
}
]
}
两个安全角色查询之间的唯一区别是,object\u ext包含的条件较少(即:case\u access\u basic\u viewer\u group\u id)。
我接收了一些包含如下值的数据:
"case_access_owner_group_ids": [],
"case_access_contributor_group_ids": [],
"case_access_viewer_group_ids": [],
"case_access_basic_viewer_group_ids": ["2"],
当我将两个角色(object\u basic和object\u ext)分配给用户时,所有字段(包括“name”、“description”)都会返回。这不是我所期望的。我希望不会返回“name”、“description”,因为只有case\u access\u basic\u viewer\u group\u id没有包含在object\u ext查询中。
现在,如果我更新了用户的角色,只保留了object\u ext,那么它的行为是正确的,不返回任何内容。
如果我更新了用户的角色,并且只保留了对象\u basic,那么它不会返回“name”、“description”。
当然,我希望将这两个角色都分配给用户,并且仅当适当的数组包含与用户元数据数组相关的有效数据时才返回“name”、“description”。现在看起来,如果obj\u基本角色被触发,它也会自动触发obj\u ext。
我做错什么了?
1条答案
按热度按时间8yoxcaq71#
看起来(至少)对于版本6.2.4来说,文档和字段级别的安全性不可能与这里记录的索引相同。
如果需要限制对文档和字段的访问,请考虑按索引拆分文档。
在特定条件下,这可能是一个真正的问题,因为它可以强制模型的规范化。