热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ElasticSearch7.17权限控制和规划实战

0、背景由于在版本7开始,x-pack可以免费使用了,但是权限控制免费的不够细,但是控制到索引级别都基本够用了。付费的可以体验更细致的权

0、背景

由于在版本7开始,x-pack可以免费使用了,但是权限控制免费的不够细,但是控制到索引级别都基本够用了。付费的可以体验更细致的权限控制。本文的基础是已经有了es集群的基础上进行的。

官网:Secure the Elastic Stack | Elasticsearch Guide [7.17] | Elastic



一、集群权限配置

假设你已经安装了elasticsearch7.17的集群,并且能够正常的运行。接下就是来配置权限;

在elasticsearch.yml配置文件中新增(每个节点):

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

然后在一台节点上运行,注意:如下操作都统一使用默认的命名:如下内容可参考官网:

Set up basic security for the Elastic Stack | Elasticsearch Guide [7.17] | Elastic

实施步骤如下:


  1. ./bin/elasticsearch-certutil ca #创建集群认证机构,需要交互输入密码
  2. ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 #为节点颁发证书,与上面密码一样
  3. 执行./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password 并输入第一步输入的密码 
  4. 执行./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password 并输入第一步输入的密码 
  5. 将生成的elastic-certificates.p12、elastic-stack-ca.p12文件移动到config目录下

 最后把elastic-certificates.p12、elastic-stack-ca.p12、elasticsearch.keystore三个文件复制到其他的节点的config目录下,启动es。

然后去登陆es的时候就需要密码了,接下设置内置用户的密码:

设置内置密码可参考官网:elasticsearch-setup-passwords | Elasticsearch Guide [7.8] | Elastic 

然后./bin/elasticsearch-setup-passwords interactive 配置默认用户的密码:(有如下的交互),可以使用auto自动生成

[test@lgh01 elasticsearch-7.17.4]$ ./bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]yes
Did not understand answer 'yes'
Please confirm that you would like to continue [y/N]yEnter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana_system]:
Reenter password for [kibana_system]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]

做完如上的操作就完成了一些特定账号的密码设置:比如elastic超级管理员的密码,这样就可以对权限进行管理了,到这里为止,就可以去通过elastic用户去登陆es集群了,elastic用户时超级用户,在开发的过程中不建议使用,所以需要自己管理和配置角色和用户。

若在Kibana上操作需要在Kibana的根目录下修改文件夹config的kibana.yml

server.host: "192.168.29.54"
elasticsearch.hosts: ["http://ip1:9200","http://ip2:9200","http://ip3:9200"]
elasticsearch.username: "elastic"
elasticsearch.password: "123456"

重启kibana后浏览器访问,需要用户名密码登陆


二、用户和角色管理

权限控制:主要是先把权限赋给角色,该角色就拥有了赋有的权限了,然后指定用户为该角色,这样该用户也就有了该角色的权限。大概可以理解为,权限和用户之间的桥梁就是角色,把不同的权限赋给角色,然后把用户对应什么样子的角色就有该角色的权限。


2.1 权限管理

可参考官网:Security privileges | Elasticsearch Guide [7.8] | Elastic

权限这里分为集群的权限和索引的权限。

集群权限:有所有的权限,有快照的权限,管理权限,监控权限等,部分集群权限如下:


集群权限

描述

all

所有群集管理操作,例如快照,节点关闭/重新启动,设置更新,重新路由或管理用户和角色

create_snapshot

为现有存储库创建快照的特权。也可以列出和查看有关现有存储库和快照的详细信息

manage

建立monitor并添加更改群集中值的群集操作。这包括快照,更新设置和重新路由。它还包括获取快照和还原状态。此特权不包括管理安全性的能力

monitor

所有群集只读操作,例如群集运行状况和状态,热线程,节点信息,节点和群集统计信息以及待处理的群集任务

索引权限:有创建,删除,读,写等权限,部分索引权限如下:


all

对索引的任何操作

create

索引文件的权限。还授予对更新映射操作的访问权限。

delete

删除文件的权限

create_index

创建索引的权限。创建索引请求可能包含要在创建索引后添加到索引的别名

delete_index

删除索引的权限

manage

所有monitor特权以及索引管理(别名,分析,缓存清除,关闭,删除,存在,刷新,映射,打开,强制合并,刷新,设置,搜索分片,模板,验证)

monitor

监视所需的所有操作(恢复,段信息,索引统计信息和状态)

read

对后面这些操作只读访问(计数,解释,获取,管理,获取索引脚本,诸如此类,多过滤/搜索/术语向量,过滤,滚动,clear_scroll,搜索)

write

具有对文档执行所有写操作的特权,包括对文档进行索引,更新和删除以及执行批量操作的权限。还授予对更新映射操作的访问权限。


2.2 role介绍和操作

elasticsearch7内置了很多角色,可以查看官网:Built-in roles | Elasticsearch Guide [7.8] | Elastic

但是很多内置角色都不是我们想要的,每个公司的需求都是不一样,如果集群很小,则可以简单控制权限就可以,如果集群大,用户多,则需要比较细粒度的控制权限,所以我们要根据自己的需求定义自己的所要的角色 。

角色的配置有两种方式,一种是界面的操作(kibana方式),这样就傻瓜式的操作,很简单。还有就是通过API的方式控制权限,这样的话需要花点时间熟悉下,操作相对来说复杂点,但是不需要额外的kibana。


2.2.1 kibana方式

1、登录kibana

2、点击role

 3、点击新建

 4、配置权限

  到这里为止通过kibana方式配置role的步骤就完了,很简单的,下面介绍API的方式


2.2.2 API方式

可参考官网:Create or update roles API | Elasticsearch Guide [7.8] | Elastic

配置语法:

{"run_as": [ ... ],"cluster": [ ... ],"global": { ... },"indices": [ ... ],"applications": [ ... ]}

 其实使用基本的配置就可以了,这里我们只用到cluster和indices这两种,其他的可参考官网的配置方式,根据需求配置即可。

例如配置一个名为testb的role,集群权限为monitor,索引只有对test-开头的索引有只读权限:

post  _security/role/testb{"cluster": [ "monitor" ],"indices": [{"names": [ "test-*" ],"privileges": [ "read" ]}]}

   

  其实多去试试,也很简单的。


2.3 user介绍和操作

elasticsearch7内置了很多用户,还记得前面那步设置密码就是给里面的内置用户配置密码,详细的内置用户参考官网:Built-in users | Elasticsearch Guide [7.8] | Elastic

在日常es开发中,内置用户基本不使用,所以主要自定义用户,自定义用户也同样有两种方式,同样是kibana和API方式,这两种方式也很简单。


2.3.1 kibana方式

1、登录kibana,点击users,然后点击新建

   2、配置用户的基本信息和指定配置的角色

傻瓜式的操作,是真的很简单,不过还是要熟悉里面的role到底有什么样子的权限


2.3.2 API方式

详情可参考官网:Create or update users API | Elasticsearch Guide [7.8] | Elastic

put _security/user/tony{"password": "j@rV1s","roles": ["test1"],"full_name": "tony","email": "jacknich@example.com","metadata": {"intelligence": 7}}

到这里,role和user的基本创建就介绍完了,如果想知道更多role和user相关的操作请见官网:Security APIs | Elasticsearch Guide [7.8] | Elastic

回到顶部


 三、简单权限规划

话说知道了集群权限配置、role和user的基本用法,那如何根据需求控制权限呢?这些都是根据实际情况确定的,因为用户配置有很多,也支持ldap,这里只是用了最简单的方式,若想超级细粒度或者ldap方式或者其他方式对权限进行控制,最好去研究下官网,本文说的很简单,只是对基本的权限的控制。

设计都是基于现有的业务场景或者用户的数量,或者是集群的规模确定权限是否细粒度。所以这里仅提供下个人的思考。

背景:这里是一个比较小的集群,10+个数据节点,用户数量很少,也没有多种业务,一个集群就一种,所以控制起来也很简单,这里对索引做了一个强制的命名规范:{开头:固定的写方}-{业务种类}-{业务名称}-{版本},这些都可以体现在权限控制里面。

根据如上情况,相关角色规划如下:


角色

描述

超级管理员角色(superuser)

集群索引全部权限

索引管理角色(indexrole)

只负责test开头的索引全部权限,还有集群的读权限

读写角色(writerole)

只有读写test开头的全部索引权限,还有集群的读权限

只读角色(readrole)

只读test开头的全部索引权限,还有集群的读权限

备份角色(snapshotrole)

负责所有索引的快照创建,进行备份

相关用户规划如下:


用户

角色

描述

elastic

superuser

超级管理员:正常情况下不允许使用

snapshot

snapshotrole

负责所有索引的快照备份

es_index

indexrole

只负责test开头的索引全部权限,还有集群的读权限

es_write

writerole

只有读写test开头的全部索引权限,还有集群的读权限

es_read

readrole

只读test开头的全部索引权限,还有集群的读权限

建议大家多去看官网,毕竟那里才是更全更详细的,写博客很难面面俱到,只能说仅供参考

参考资料:

elasticsearch7.8权限控制和规划 



推荐阅读
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 该大学网站采用PHP和MySQL技术,在校内可免费访问某些外部收费资料数据库。为了方便学生校外访问,建议通过学校账号登录实现免费访问。具体方案可包括利用学校服务器作为代理,结合身份验证机制,确保合法用户在校外也能享受免费资源。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
author-avatar
f蓝色基因__987
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有