【问题标题】:ElasticSearch X-Pack Security Roles and Field SecurityElasticSearch X-Pack 安全角色和字段安全
【发布时间】:2020-10-10 16:40:43
【问题描述】:

我正在使用 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"]
    }
}

我有以下安全角色。

Object_basic

{
  "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}}  }} ]}}\"}}"
    }
  ]
}

Object_ext

{
  "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_ext 包含少一个 term(s) 条件(即:case_access_basic_viewer_group_ids)。

我提取了一些包含以下值的数据:

 "case_access_owner_group_ids": [],
  "case_access_contributor_group_ids": [],
  "case_access_viewer_group_ids": [],
  "case_access_basic_viewer_group_ids": ["2"],

当我将两个角色(object_basic 和 object_ext)分配给用户时,所有字段(包括“名称”、“描述”)都会返回。 这不是我所期望的。我希望不会返回“名称”、“描述”,因为只有 case_access_basic_viewer_group_ids 不包含在 object_ext 查询中。

现在,如果我更新用户的角色并且只保留 object_ext,那么它的行为正确且不返回任何内容。

如果我更新了用户的角​​色并且只留下了 object_basic,那么它不会返回“名称”、“描述”。

我当然希望同时为用户分配两个角色,并仅在足够的数组包含有效数据以及用户的元数据数组时才返回“名称”、“描述”。现在看起来,如果触发了 obj_basic 角色,它也会自动触发 obj_ext。

我做错了什么?

【问题讨论】:

    标签: elasticsearch elasticsearch-x-pack


    【解决方案1】:

    看起来(至少)对于 6.2.4 版本,文档和字段级别的安全性与记录在 here 的索引相同。

    如果您需要限制对文档和字段的访问,请考虑 而是按索引拆分文档。

    这在特定条件下可能是一个真正的问题,因为它可以强制模型的规范化。

    【讨论】:

      猜你喜欢
      • 2016-06-21
      • 2021-07-25
      • 2014-10-22
      • 2016-06-20
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多