【问题标题】:Making base64 encoded string as document key in Elasticsearch在 Elasticsearch 中将 base64 编码的字符串作为文档键
【发布时间】:2021-05-24 20:07:52
【问题描述】:

我对 elasticsearch 数据库非常陌生。

我正在开发一个文档存储应用程序,其中上传到应用程序的所有文档都转到 S3。基于 S3 文件密钥(S3 存储桶中的文件路径),我生成了一个 Base64 编码字符串,我们将其用作 Elasticsearch 中的文档 ID。

Elasticsearch 文档包含与上传文件相关的数据,例如从用于搜索的文件中提取的一些内容以及与该文件相关的一些附加元数据。

现在我的问题是:就性能和安全性而言,使用 Base64 编码的字符串作为 elasticsearch 中的文档 ID 是否安全。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    通过文档ID,如果您的意思是将_id 字段值作为base64 编码字符串,那么它是完全允许的。由于弹性搜索在内部以字符串类型存储_id,因此无论您传递什么类型的值都将被视为字符串。唯一需要注意的是,它有 512 个字节的限制。 (参考-link)

    由于 _id 是一个索引字段,可用于基于精确匹配的搜索,因此从性能角度来看应该没问题。

    关于安全,有几件事可以决定它是否安全:

    1. 调用 ES 的应用程序/服务是公开的还是组织内部的
    2. 为 S3 配置的安全和访问策略

    对于#1:如果应用程序是组织内部的,那么大多数内部 api 和机器都在 VPN 内部。所以,应该是安全的。

    对于 #2:如果您的应用程序是外部的并且对您的 S3 的访问是非公开的,那么即使有人能够获取 documentIds 并解码 base64 字符串以获取 S3 文件密钥,那么由于访问策略您的数据将是安全的。

    【讨论】:

      【解决方案2】:

      您可以查看this link 了解可用于文档和其他操作的基本字段数据类型。

      有一个binary filed type 接受二进制和 Base64 编码的字符串,但根据文档,该字段不可搜索。所以我建议使用其他字段作为搜索文档的键,或者为每个文档创建一些唯一 ID。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-28
        • 2011-09-10
        • 1970-01-01
        • 1970-01-01
        • 2010-09-19
        • 2015-06-04
        • 1970-01-01
        相关资源
        最近更新 更多