如何预防 Elasticsearch 服务器入侵事件的发生

如果您身在技术圈,很可能在某个时刻已经正面遭遇过“服务器入侵”。即使您身处圈外,也可能会对致使私密个人数据最终落入不法之手的服务器/数据入侵和安全漏洞有所耳闻。此类数据可能包括信用信息、社会安全号码,以及其他您想要保密且不希望落入暗网的信息。

所有软件都必须应对可能出现的入侵或攻击。Elasticsearch,这个由 Elastic 开发的开源软件项目也不例外。未在 Elasticsearch 中安全存储的数据也曾发生过泄露、丢失或被盗的情况。

如何预防 Elasticsearch 服务器入侵事件的发生

本文将带您了解数据入侵的发生途径,以及用户如何在 Elasticsearch 环境中周全地保护数据。我们将由浅入深,先从一些基础知识开始讲解,您也可以直接跳到以下章节: 如何保护 Elasticsearch?

Elasticsearch 简介

Elasticsearch 是一个开源搜索和分析引擎,同时也是一个数据存储库,而且它的下载量数以亿计,受欢迎程度由此可见一斑。我们虽然对它的速度、规模和搜索相关性不惜溢美之词,但它的广泛采用在很大程度上得益于其以下特点:易于使用;能够处理任何类型的数据(文本、数字、地理空间等);拥有一系列强大的功能;并且任何人都可以提交 bug 修复或改进建议(因为它是开源的)。

说得直白一点,它就像一个包含数十亿行的电子表格,尽管体量庞大,但您仍然能够在瞬间找到或计算其中的任何内容。Elasticsearch 就是如此,其功能非常出色,所以众多组织使用 Elasticsearch 来执行各种事务 — 例如,支持其电子商务网站上的搜索分析来自火星探测器的数据,或确保拼车准时到达

Elastic 是谁?另外,你们有我的数据吗?

Elastic 是一家开发 Elasticsearch 以及 Elastic Stack 其他系列产品(Kibana、Beats 和 Logstash 等)的公司,而 Elasticsearch 是包括搜索可观测性安全性等在内的各种解决方案的基础。

对于您提的问题,简短回答是“没有”。我们开发了 Elasticsearch,然后其他公司可以在本地或云基础设施中运行。 

稍长点的回答是“可能有”。这是因为一些公司会使用 Elastic Cloud,这是我们托管的 Elasticsearch 产品。我们负责维护客户存储在 Elastic Cloud 中的任何数据,包括确保数据安全。因此,我们所有的 Elasticsearch Service 部署本身都是安全的

Elasticsearch 将数据保存在何处?

由于 Elasticsearch 是开源软件,任何人都可以免费下载和安装,因此它几乎可以安装在任何地方。有些公司下载后会将其安装在自己的内部服务器上,而有些公司下载后会将其安装在自选的提供商的云中。此外,也有一些云服务公司提供托管版本的 Elasticsearch,也就是为客户托管和管理我们所说的 Elasticsearch 集群。 

事实上,Elastic 在 Elastic Cloud 上也提供了我们自己托管的 Elasticsearch Service。我们提供了全面的管理服务(包括默认的安全服务),并支持您从几个不同的云服务提供商中选择基础设施。

入侵 Elasticsearch 服务器的方式有哪些?

数据存储库被入侵的方式多种多样,从密码被盗到黑客攻入,再到心怀不满的员工恶意报复等不一而足。对于 Elasticsearch,最常见的入侵类型是由于某个集群在互联网上不够安全所致,也就是说,任何人都可以在不需要用户名或密码的情况下连接并访问数据。这些开放集群通常是由安全研究人员发现的,随后他们会公布这些发现,这样全世界都会发现遗留在互联网上的这些数据。

如果保护得当,Elasticsearch 集群受到入侵的风险并不会比任何其他数据库高。鉴于此,我们免费默认提供了保护 Elasticsearch 集群所需要的功能,只要下载并使用 Elastic Stack 即可实现安全。为此,让我们来看看 Elasticsearch 用户可以做些什么,以确保他们用到这些功能并保证集群安全。

如何保护 Elasticsearch?

我们在免费、默认的(基本层)发行版中纳入了 Elasticsearch 安全功能,这就是说,任何人都可以为其 Elasticsearch 集群配置安全性并防止意外数据泄露。不过,在研究如何使用这些功能之前,我们先来看看如何判断您的集群是否安全。

如何知道我有不安全的 Elasticsearch 集群?

如果您是 Elasticsearch 的用户或管理员,则可以通过几个简单的步骤来检查安全功能是否已启用且运行正常。 

确定这一点的最佳方法是查询设置 API。发出以下查询:

GET _xpack/usage?filter_path=security

如果安全功能禁用,就会看到类似以下的结果:

{ 
  "security" : { 
    "available" : true,
    "enabled" : false, // 安全功能关闭时,此设置为“false” 
    "ssl" : { 
      "http" : { 
        "enabled" : false 
      },
      "transport" : { 
        "enabled" : false 
      } 
    } 
  } 
}

或者,如果安全功能按预期工作,则会显示如下信息

{ 
  "security" : { 
    "available" : true,
    "enabled" : true, // 安全功能开启时,此设置为“true”
    "realms" : { ... },
    "roles" : { ... },
    "role_mapping" : { ... },
    "ssl" : { 
      "http" : { 
        "enabled" : true 
      },
      "transport" : { 
        "enabled" : true 
      } 
  },
  "token_service" : { ... },
  "api_key_service" : { ... },
  "audit" : { ... },
  "ipfilter" : { ... },
  "anonymous" : { ... } 
  } 
}

您可以看到,结果大相径庭。根据您部署的版本和许可级别,结果也会略有不同。

如何确保我的 Elasticsearch 集群安全?

要确保外人无法访问您的 Elasticsearch 集群,最简单的两个方法是:

  1. 启用身份验证,不登录 Elasticsearch 就无法访问。
  2. 启用 TLS,防止他人窃取通过网络传输的 Elasticsearch 数据。

我们提供了很多非常棒的资源(已在底部列出)来解释如何确保 Elasticsearch 的安全,包括如何轻松实施上面的两个建议。但是,要想获得安全,最快捷方法莫过于查看我们的 Elasticsearch 安全入门(TLS 和 RBAC)博客及其附带的视频 — 7 分钟完成 Elasticsearch 安全保护

在 Elastic Cloud 的 Elasticsearch Service 中,我们还为所有这些设置了快捷键。在使用我们的 Elasticsearch Service 时,您可以肯定的是,它为每个集群都自动配置了安全功能。

安全离不开团队合作

如果您有任何问题,可以随时联系我们。我们提供了多种加入 Elastic 社区的途径,比如论坛、本地活动和大量文档(比上文链接的多得多)。我们也一直在努力让保护 Elasticsearch 的安全比以前更加容易。请务必关注我们的博客,了解未来动态,以及我们当前正在做些什么。如果您酷爱蜘蛛侠,一定很熟悉这句话:“能力越大,责任越大”,对于 Elastic 和任何使用 Elasticsearch 来存储数据的人来说都是如此。

确保 Elasticsearch 安全性的更多相关资源:

博客

视频

文档

培训