【问题标题】:How to handle "private" data in Elastic Search如何在 Elastic Search 中处理“私有”数据
【发布时间】:2018-06-06 00:19:16
【问题描述】:

我需要任何可能对 ElasticSearch 的工作原理和 API 有经验/知识的人提供一些意见。 我有一个(非常大的)数据库,其中包含许多不同项目的大量数据。

我需要通过公共 API 使所有这些数据可搜索,以便任何人都可以使用它并查询 API 以获取特定项目的数据。我已经启动并运行了 ElasticSearch,并在 ElasticSearch 中填充了数据库中的所有数据的索引。 ElasticSearch 运行良好,API 也运行良好。

我现在面临的挑战是,我们数据库中的某些数据是“私人”数据,不得公开搜索。同时,这些私有数据必须在内部是可搜索的,这意味着我需要让 API 在公共模式和私有模式(用户认证)下运行。当未通过身份验证的客户端向 API 查询某些数据时,客户端应仅获取公共项目,而私有(用户身份验证)客户端应获取所有可能的结果。 我对一个项目的所有数据不得公开的项目没有任何问题。我可以简单地用一个标志标记它们,并确保当我通过 API 向客户端返回数据时,ElasticSearch 不会返回它们。

当某项数据的一部分是私有数据而部分数据是公开的时,就会出现挑战。在将数据返回给(公共)客户端之前,我考虑过剥离私有数据。这样,私有数据不能直接通过 API 获得,而是间接/隐式地获得。例如,如果客户端搜索了一些具有私有性质的数据,在这种情况下,我将在将其返回给用户之前从搜索结果中“剥离”私有数据,那么客户端将获得返回的文档,表明该文档是特定查询的“命中”。但是,在我返回的文档中找不到来自客户端的特定查询字符串,因此表明查询字符串以某种方式与文档相关联,并且该关联具有敏感/私有性质。

我考虑过创建两个不同的索引。一个包含所有对象的所有数据(私有索引),一个只包含公开可用数据(我已经剥离了敏感数据部分的所有文档)。这将是可行的,并且是一个相当容易实施的解决方案,但缺点是我现在在两个索引中复制了数据。

有什么想法吗?

【问题讨论】:

标签: api elasticsearch


【解决方案1】:

根据您的描述,您显然需要两个不同的数据视图

  • PUBLIC:集合中文档的子集,某些字段不应被搜索或返回。

  • PRIVATE:整个集合,所有字段均可搜索且可见。


您可以通过以下任一方式完成两个不同的数据视图

  1. 一个索引/两个查询、一个公共和一个私有(您可以自己实现,也可以让 Shield 为您不透明地管理它) .
  2. 两个索引/两个查询(一个公开,一个私有

在第一种情况下,您的公开查询将过滤您提到的私人文档,并且只搜索/返回公开可见的字段。而私人查询将不过滤,并将搜索/返回所有字段。

在第二种情况下,您实际上会将您的数据索引到 两个单独的索引,并明确地让 公共查询针对 公共索引(仅包含公共字段),私有查询针对私有索引运行。


确实,您可以构建一种机制(或使用 Shield)来在单个索引之上完成您所需要的。但是,在以下情况下,您可能需要考虑 (2) 公共/私有索引选项:

  • 您希望通过疏忽或配置更改来降低无意中暴露敏感数据的风险。
  • 您希望减少应用程序的公共功能与应用程序的私有功能之间的耦合。
  • 您预计 公共 使用的扩展特征将显着偏离 私人 使用。

作为最后一点的一个例子,大多数免费增值网站的付费用户和非付费用户的分布非常不平衡(为了争论,说十分之一)。

您不仅可能需要大规模地复制您的公共索引,而且还需要通过剥离私有字段的公共文档,您将成比例地减少管理公共分片(和副本)所需的资源


这就提出了数据重复的问题。在大多数系统中,搜索索引不是“记录系统”(参见discussion)。搜索索引更典型地用作外部数据库索引,或者可能是物化视图。当存在代表最新状态的持久后备存储时,在这种情况下重复数据就不成问题了。

如果出于某种原因,您依赖 Elasticsearch 作为“记录系统”,那么双索引路由会有些棘手(因为您需要选择一个,可能是 私有索引 表示真实情况,然后将另一个(公共索引)视为私有数据的下游视图。)

【讨论】:

  • 感谢您的回复彼得。所有好点都需要考虑。我将看看通过弹性的 Shield 机制有什么可能,看看这个解决方案是否可行。
猜你喜欢
  • 1970-01-01
  • 2019-06-13
  • 1970-01-01
  • 2012-02-15
  • 2021-10-08
  • 2017-12-29
  • 2019-09-28
  • 1970-01-01
  • 2023-03-17
相关资源
最近更新 更多