【问题标题】:Protecting data in elastic search在弹性搜索中保护数据
【发布时间】:2018-05-27 13:21:03
【问题描述】:

我有一个在本地运行的弹性搜索引擎,其索引包含来自多个客户的数据。当客户进行查询时,是否有办法在过滤条件中动态添加客户 ID,以便客户无法访问其他客户的记录。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    是的,您可以使用filtered aliases 来实现。因此,您可以像这样为每个客户创建一个别名:

    POST /_aliases
    {
        "actions" : [
            {
                "add" : {
                     "index" : "customer_index",
                     "alias" : "customer_1234",
                     "filter" : { "term" : { "customer_id" : "1234" } }
                }
            }
        ]
    }
    

    然后您的客户可以简单地查询别名customer_1234,并且只会返回他的数据。

    【讨论】:

    • 虽然这通常会起作用,但请注意,由于 TF/IDF 和 BM25 的工作方式,它允许侧信道攻击:people.cs.uchicago.edu/~davidcash/sp17stress.pdf
    • @xeraa 当然,这不是保护数据的正确方式。如果安全是一个真正的问题,您应该使用XPack Security 或等效的开源替代方案,例如SearchGuard
    • IMO 即使您使用 X-Pack 安全性,侧通道攻击也有效。词条统计信息未过滤,因此共享索引并不能提供良好的隔离。
    • 感谢您的回复。但是客户不能猜出别名吗? Kibana/Xpack 安全控制“服务级别”的访问。不确定是否有办法在别名级别定义用户名密码?另一个选项是将 Elastic Search Rest Service 隐藏在实现自定义安全选项的自定义服务后面。但是,在这种情况下,我们可能没有搜索灵活性。
    • customer_1234 只是一个示例,您可以使用 UUID 作为别名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 2019-01-08
    • 2021-12-12
    • 1970-01-01
    相关资源
    最近更新 更多