elk入门,ELK实战
elk note 18-保护集群简介1 es secure 1.1概述1.2安全配置1.3 es安全工作原理2常见安全功能2.1用户认证2.2在弹性堆栈上配置SAMLs单点登录2.3使用OpenID Connect配置弹性堆栈的单点登录2.4用户授权2.5审核安全事件2.6加密通信2.7跨集群搜索,客户端, 和集成3案例及注意事项3.1教程:安全入门3.2教程:加密通信3.3故障排除3.4限制4描述1 es Secure介绍本文主要用于介绍ES安全机制,以及实际操作步骤和注意事项; 目前已更新部分,后续将在此基础上继续补充完善相关内容。
1.1概述ES通过以下三种方式保护集群的安全:
1)通过密码保护、角色访问控制和IP过滤防止未经认证的访问;
2)通过SSL/TLS加密保持数据完整性
3)维护审计跟踪,以便知道哪些用户在集群上做了哪些操作,存储了哪些数据。
1.2安全配置弹性栈安全特性让用户保护集群的安全变得非常容易。用户可以通过密码保护数据,也可以通过加密通信、基于角色的访问控制、IP过滤和审计等高级安全策略保护集群安全。
es的安全配置包括以下常见步骤:
1)确认所使用的许可证包含所需的特定安全功能;
2)验证每个节点上的xpack.security.enabled设置为true,并且基本或试用许可证中的此参数为false默认情况下;
3)验证您是否计划在联邦信息处理标准(FIPS) 140-2启用的JVM中运行ES;
4)用于内部节点通信的TLS/SSL;
5)如果es没有运行,先启动ES;
6)设置所有内置用户的密码;
7)选择用于验证用户身份的领域类型;
8)设置角色和用户以控制对专家系统的访问;
9)启用审核功能来跟踪与es群集的尝试或成功交互(可选)。
1.3 es安全工作原理es集群通常由许多移动组件组成。通常,多个es节点、logstash实例、kibana实例、Beadts代理和客户机都与集群通信。因此,要保护这样一个集群的安全,需要考虑内容的许多方面和层次,这并不奇怪。
弹性堆栈安全功能提供了以下方法,从不同级别保护es集群的安全:
1)用户认证;
2)用户认证和访问控制;
3)节点/客户端认证和通信信道加密;
4)审计。
2常见安全功能2.1用户身份验证身份验证用于识别个人身份。当用户需要访问受限资源时,他们必须以某种方式证明自己的身份,比如密码、证书或其他方式(身份验证令牌)。
Es可以使用原生支持管理和认证用户,也可以继承外部用户管理系统实现认证,进入LDAP或Active Directory。
弹性堆栈安全功能提供了许多内部认证域,如本机、LDAP、Active _ Directory、PKI、文件、SAML和OIDC。如果以上都不能满足用户需求,用户还可以创建自己唯一的认证域,集成到Elastic Stack中。
2.2在elastic stack上配置SAML单点登录使用Elasticsearch作为后端服务,在es中可以配置SAML SSO,支持将SAML单点登录(SSO)导入到Kibana中。用SAML的话来说,Elastic Stack将作为一个服务提供商来运营。
启用SAML单点登录所需的另一个组件是身份提供者,它处理身份验证并执行用户的实际身份验证。
2.3使用OpenID连接配置单点登录到弹性栈也支持OpenID和kibana结合登录,将es作为保留大部分功能的后端服务。这样,kibana和es一起代表了一个OpenID Connect依赖方(RP),它支持OpenID Connect规范中定义的授权代码流。
2.4用户授权弹性栈特性提供认证功能,认证过程决定了即将发出请求的用户是否被允许执行请求。当用户被识别和认证时,相应的请求将被执行。
es的安全特性提供了一种基于用户访问控制的机制,它允许用户授权角色并将角色分配给指定的用户和组。其架构图如下:
认证过程包括以下六个部分:
安全资源
受保护的资源是指访问受限的资源。索引、别名、文档、字段、用户和es集群本身都是受保护的对象。特权
特权是指在受保护资源上执行的一个或多个操作的命名组。在es中,每个受保护的资源都有自己的一组可用特权。例如,read是一个索引特权,这意味着允许读取索引/存储数据的所有操作。有关这些功能的完整信息,请参考7.2/安全-权限。许可
权限是指可以在受保护资源上执行的一个或多个特权的集合。例如:
对产品索引的读取权限;
特定集群的管理权限;
授予用户Run _ as权限;
对匹配查询X的所有文档的读取权限;
对credit_card字段的读取权限;作用
角色是指多个权限的命名集合;用户
用户是指被授权认证的用户。组
组是指用户所属的一个或多个组;7.2版组暂时不支持本地、文件或PKI等身份验证字段。2.5审计安全事件SES可以跟踪与安全相关的事件,如身份验证失败、连接拒绝等。通过允许审计功能。记录这些事件使集群管理员能够监控集群的可疑活动,并在攻击发生时提供证据。
默认情况下,es不打开审计日志,用户需要在elasticsearch.yml中配置xpack . security . audit . enabled:true
2.6加密通信Selasticsearch节点存储的数据可能是机密的,可能会受到网络攻击。这些攻击可能包括嗅探数据、操纵数据和试图访问服务器,从而访问存储数据的文件。因此,保护群集中的节点有助于降低基于网络的攻击的风险。
在es中设置SSL/TLS可以实现加密通信。包括生成节点证书、配置集群加密通信、配置监控特性、配置kibana安全、配置logstash安全、配置Beats安全、java客户端安全、ES for hadoop安全等。
有关具体的配置指导信息,请参见在群集上设置TLS,或者参考本文中的3.2节来配置群集的加密通信。
2.7跨集群搜索、客户端和集成配置跨集群搜索后,需要对互连的集群进行一些额外的配置。
方法一:两个集群使用同一个认证证书(实际业务中建议使用该方法);
方法二:在两个集群中创建同一个用户,在远程集群配置中配置该用户的访问权限;
有关相关配置方法,请参考7.2/跨集群配置。
3案例及注意事项3.1教程:安全入门这里用的是单个节点,用一个综合案例让自己熟悉es的安全配置,从最基本的节点属性配置到生成用户密码、配置kibana用户和角色、配置logstash输出。
停止kibana和es,设置在elasticsearch.yml:
Xpack.security.enabled: true设置发现。type: single-node为内置用户创建密码。
重启es,开始创建密码。这时候会要求用户逐个输入密码。作者使用弹性作为密码:/bin/elastic search-setup-密码交互
注:7.2.1预约用户包括六种类型:Elastic、APM _ system、Kibana、Logstash _ system、Beats _ system、Remote _ monitoring _ user。在kibana . yml:elastic search . username中输入用户和密码信息:“ki Bana”
elastic search . password: elastic 还可以用非明文的方式保存密码信息:/bin/kibana-keystore create(在Docker版本中,将在/usr/share/ki Bana/data/ki Bana . keystore文件中创建)。/bin/kibana-keystore添加elasticsearch.username(将提示您输入用户名kibana)。/bin/kibana-keystore添加elastic search.password(会提示您输入密码elastic)成功设置用户名和密码后,登录kibana时需要输入用户名和密码:
在此输入用户名:elastic和密码:elastic即可正常登录。效果如下:
同样,在使用curl时,也需要输入用户名和密码。一般可以使用-u参数加上用户名和密码,例如:curl-u elastic:elastic 10 . 120 . 75 . 102:9204。
创建身份验证
正常情况下,需要在elasticsearch.yml中添加xpack.security.authc.realms设置,但是当没有配置其他认证领域时,默认使用原生认证领域,因此不需要额外配置。创造用户
在管理/安全/用户页面可以创建用户,也可以看到当前的用户信息,如下图所示:
在这里创建一个jdoe用户,密码为11111;创建一个logstash_internal用户,密码为11111;此时没有登录权限,因为用户暂时没有设置相关角色;设置角色
将jdoe设置为kibana_user角色,则jdoe可以正常登录;此时,它的base拥有除安全中的用户和角色之外的所有kibana使用权。
添加metricbeat_writer角色,具有集群的manage _ index _ templates和monitor集群权限,以及metric beat-* indice;上的write、delete和create _ index权限。将logstash_internal用户授权给此角色;
添加metricbeat_reader角色,该角色对度量beat-*指示器具有读取和查看_ index _ metadata权限;将jdoe授权给此角色;
8)在logstash中添加用户信息
添加认证后,如果不设置用户和密码,logstash的输出无法正常访问es,因此logstash的认证信息可以配置如下:
输出{
弹性搜索{
Hosts=localhost:920 #这里的端口需要根据实际业务进行调整。
manage _ template=false
index= % {[@ metadata][beat]}-% {[@ metadata][version]}-% { YYYY。 MM.dd}
user=logstash_internal
密码=111111
}
} 3.2教程:加密通信这里用三个节点组成一个延续。集群之间一方面需要加密通信,另一方面需要用户认证;这里的案例更符合实际的生产配置,所以不完全按照官方的步骤来。
生成认证机构
bin/elasticsearch-certutil ca
请输入所需的输出文件[elastic-stack-ca.p12]:空白
输入elastic-stack-ca.p12的密码:空白,生成的目录是es的根目录,为集群中的每个节点生成一个证书私钥。
bin/elastic search-certutil cert-ca elastic-stack-ca . p12
输入ca的密码(elastic-stack-ca.p12):空白
请输入所需的输出文件[elastic-certificates.p12]:空白
输入弹性证书的密码。p12:空白
这里生成的证书没有dns和ip的限制,可以直接复制到集群中的所有节点上统一使用。将节点证书复制到指定位置。
将步骤2中生成的文件复制到另外两个节点。
在mkdir-pconfig/certselastic search . yml中添加xpack.security相关配置。
es节点添加了以下内容:
Xpack.security.enabled: true #如果将这一步注释掉,集群可以加密通信,但是需要用户认证才能登录,也就是步骤5,Xpack中生成密码的步骤。security . transport . SSL . enabled:true设置用户加密身份验证。
这里只需要设置在h01上,不需要三个节点都设置。
bin/弹性搜索-设置-密码交互
作者直接把所有输入密码的地方都设为弹性。
身份验证后,重新启动集群的所有节点,以更新kibana中的es用户密码。
Kibana节点添加如下:x
elasticsearch .用户名:" elastic "
elastic search . password:“elastic”(此处的密码是在步骤4中输入的密码)
重启kibana3.3故障排除以添加
3.4要添加的限制
4参考文件描述
7.2/安全集群加密弹性搜索Docker Elk 7.8实际弹性搜索安全配置和kibana匹配修改环境描述
测试环境是es 7.2.1。
版权归作者所有:原创作品来自博主广信xg,转载授权请联系作者,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。