elasticsearch7.8权限控制和规划
由于在版本7开始,x-pack可以免费使用了,但是权限控制免费的不够细,但是控制到索引级别都基本够用了。付费的可以体验更细致的权限控制。本文的基础是已经有了es集群的基础上进行的。
官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/secure-cluster.html
一、集群权限配置
假设你已经安装了elasticsearch7.8的集群,并且能够正常的运行。接下就是来配置权限;
在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
然后在一台节点上运行:
注意:如下操作都统一使用默认的命名:如下内容可参考官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/configuring-tls.html
- ./bin/elasticsearch-certutil ca #创建集群认证机构,需要交互输入密码
- ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 #为节点颁发证书,与上面密码一样
- 执行./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password 并输入第一步输入的密码
- 执行./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password 并输入第一步输入的密码
- 将生成的elastic-certificates.p12、elastic-stack-ca.p12文件移动到config目录下
最后把elastic-certificates.p12、elastic-stack-ca.p12、elasticsearch.keystore三个文件复制到其他的节点的config目录下,启动es。然后去登陆es的时候就需要密码了。接下设置内置用户的密码:
设置内置密码可参考官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/setup-passwords.html
然后./bin/elasticsearch-setup-passwords interactive 配置默认用户的密码:(有如下的交互),可以使用auto自动生成
[test@lgh01 elasticsearch-7.8.1]$ ./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]y Enter 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用户时超级用户,在开发的过程中不建议使用,所以需要自己管理和配置角色和用户,请继续看下文
二、用户和角色管理
权限控制:主要是先把权限赋给角色,该角色就拥有了赋有的权限了,然后指定用户为该角色,这样该用户也就有了该角色的权限。大概可以理解为,权限和用户之间的桥梁就是角色,把不同的权限赋给角色,然后把用户对应什么样子的角色就有该角色的权限。
2.1、Security privileges(权限管理)
可参考官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/security-privileges.html
权限这里分为集群的权限和索引的权限,集群权限有所有的权限,有快照的权限,管理权限,监控权限等。索引权限有创建,删除,读,写等权限。这里我大概列一些出来,更具体还是查看官网比较合适:
部分集群权限如下:
|
集群权限 |
描述 |
|
all |
所有群集管理操作,例如快照,节点关闭/重新启动,设置更新,重新路由或管理用户和角色 |
|
create_snapshot |
为现有存储库创建快照的特权。也可以列出和查看有关现有存储库和快照的详细信息 |
|
manage |
建立monitor并添加更改群集中值的群集操作。这包括快照,更新设置和重新路由。它还包括获取快照和还原状态。此特权不包括管理安全性的能力 |
|
monitor |
所有群集只读操作,例如群集运行状况和状态,热线程,节点信息,节点和群集统计信息以及待处理的群集任务 |
部分索引权限如下:
|
all |
对索引的任何操作 |
|
create |
索引文件的权限。还授予对更新映射操作的访问权限。 |
|
delete |
删除文件的权限 |
|
create_index |
创建索引的权限。创建索引请求可能包含要在创建索引后添加到索引的别名 |
|
delete_index |
删除索引的权限 |
|
manage |
所有monitor特权以及索引管理(别名,分析,缓存清除,关闭,删除,存在,刷新,映射,打开,强制合并,刷新,设置,搜索分片,模板,验证) |
|
monitor |
监视所需的所有操作(恢复,段信息,索引统计信息和状态) |
|
read |
对后面这些操作只读访问(计数,解释,获取,管理,获取索引脚本,诸如此类,多过滤/搜索/术语向量,过滤,滚动,clear_scroll,搜索) |
|
write |
具有对文档执行所有写操作的特权,包括对文档进行索引,更新和删除以及执行批量操作的权限。还授予对更新映射操作的访问权限。 |
2.2、role(角色)介绍和操作
elasticsearch7内置了很多角色,可以查看官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/built-in-roles.html
但是很多内置角色都不是我们想要的,每个公司的需求都是不一样,如果集群很小,则可以简单控制权限就可以,如果集群大,用户多,则需要比较细粒度的控制权限,所以我们要根据自己的需求定义自己的所要的角色 。角色的配置有两种方式,一种是界面的操作(kibana方式),这样就傻瓜式的操作,很简单。还有就是通过API的方式控制权限,这样的话需要花点时间熟悉下,操作相对来说复杂点,但是不需要额外的kibana。这里两种方式都简单介绍下。
方式一(kibana方式):
1、登录kibana
2、点击role

3、点击新建

4、配置权限

到这里为止通过kibana方式配置role的步骤就完了,很简单的,下面介绍API的方式
方式二(API)
可参考官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/security-api-put-role.html
配置语法:
{
"run_as": [ ... ],
"cluster": [ ... ],
"global": { ... },
"indices": [ ... ],
"applications": [ ... ]
}
其实使用基本的配置就可以了,这里我们只用到cluster和indices这两种,其他的可参考官网的配置方式,根据需求配置即可。
例如配置一个名为testb的role,集群权限为monitor,索引只有对test-开头的索引有只读权限:
post _security/role/test1
{
"cluster": [ "monitor" ],
"indices": [
{
"names": [ "test-*" ],
"privileges": [ "read" ]
}
]
}

其实多去试试,也很简单的。
2.3、user(用户)介绍和操作
elasticsearch7内置了很多用户,还记得前面那步设置密码就是给里面的内置用户配置密码,详细的内置用户参考官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/built-in-users.html
在日常es开发中,内置用户基本不使用,所以主要自定义用户,自定义用户也同样有两种方式,同样是kibana和API方式,这两种方式也很简单。
方式一(kibana方式)
1、登录kibana,点击users,然后点击新建

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

傻瓜式的操作,是真的很简单,不过还是要熟悉里面的role到底有什么样子的权限
方式二(API方式)
详情可参考官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/security-api-put-user.html
put _security/user/tony
{
"password": "j@rV1s",
"roles": [
"test1"
],
"full_name": "tony",
"email": "jacknich@example.com",
"metadata": {
"intelligence": 7
}
}

到这里,role和user的基本创建就介绍完了,如果想知道更多role和user相关的操作请见官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/security-api.html
三、简单权限规划
话说知道了集群权限配置、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权限控制和规划的更多相关文章
- <实训|第九天>掌握linux中普通的权限控制和三种特殊的权限(sst),做合格的运维工程师
linux中,权限的学习是必不可少的,不论是作为一名运维工程师或者是单一的管理者,学习好linux中的权限控制,你就可以保护好自己的隐私同时规划好你所管理的一切. 权限的学习是很多的,不要认为自己已经 ...
- 译-BMC Remedy Action Request System权限控制概述
原文链接:Access control overview 说明: BMC Remedy Action Request System是BMC ITSM产品平台,简称AR 或者Remedy,可实现基于IT ...
- Taurus.MVC 2.2.3.4 :WebAPI 实现权限控制认证(及功能增强说明)
前言: 前两天,当我还在老家收拾行旅,准备回广州,为IT连的创业再战365天时, 有网友扣上问:Taurus.MVC中如何实现认证和权限控制,最好能做个小例子. 我一不小心回了句:等回广州我再写篇文章 ...
- chmod a+w . 权限控制 su、sudo 修改文件所有者和文件所在组
对当前目录对所有用户开放读写权限 chmod a+r . $ sudo chmod -R a+w /usr/lib/python2.7 所有用户添加文件的写权限 [linux]su.sudo.sudo ...
- Linux学习总结(14)——Linux权限控制
linux中,权限的学习是必不可少的,不论是作为一名运维工程师或者是单一的管理者,学习好linux中的权限控制,你就可以保护好自己的隐私同时规划好你所管理的一切. 权限的学习是很多的,不要认为自己已经 ...
- 一文读懂 TKE 及 Kubernetes 访问权限控制
你有了解过Kubernetes的认证授权链路吗?是否对TKE的权限控制CAM策略.服务角色傻傻分不清楚?本文将会向你介绍腾讯云TKE平台侧的访问控制.Kubernetes访问控制链路,以及演示如何将平 ...
- chmod a+w . 权限控制 su、sudo 修改文件所有者和文件所在组 添加用户到sudoer列表中 当前用户信息
对当前目录对所有用户开放读写权限 chmod a+r . $ sudo chmod -R a+w /usr/lib/python2.7 所有用户添加文件的写权限 [linux]su.sudo.sudo ...
- 【分布式】ZooKeeper权限控制之ACL(Access Control List)访问控制列表
zk做为分布式架构中的重要中间件,通常会在上面以节点的方式存储一些关键信息,默认情况下,所有应用都可以读写任何节点,在复杂的应用中,这不太安全,ZK通过ACL机制来解决访问权限问题,详见官网文档:ht ...
- 尝试asp.net mvc 基于controller action 方式权限控制方案可行性
微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...
随机推荐
- [ABP教程]第七章 作者:数据库集成
Web开发教程7 作者:数据库集成 关于此教程 在这个教程系列中,你将要构建一个基于ABP框架的应用程序 Acme.BookStore.这个应用程序被用于甘丽图书页面机器作者.它将用以下开发技术: E ...
- 索引失效 -- 使用Between范围查询时
需求说明 产品需要统计一段时间范围内每月用户的注册人数(根据用户信息表中的创建时间),需要我通过SQL导出数据,但是数据量太大,导出需要20多秒,于是我尝试在创建时间字段中加索引,但是发现加了索引后索 ...
- PostgreSQL WAL日志详解
wal日志即write ahead log预写式日志,简称wal日志.wal日志可以说是PostgreSQL中十分重要的部分,相当于oracle中的redo日志. 当数据库中数据发生变更时:chang ...
- 【剑指 Offer】03.数组中重复的数字
题目描述 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中 ...
- Selenium WebDriver 定位之Xpath定位
Selenium 定位之Xpath定位: 1.绝对路径定位:以/开头从根节点一直找到当前节点,不推荐使用决定路径定位方式 2.相对路径定位:使用"//"表示相对路径定位,格式:// ...
- Docker学习笔记之进入容器Bash
我们在创建容器的时候,如果容器的命令(command)不是/bin/bash的时候,使用docker attach命令是会卡住进不去容器的bash shell的.如下图所示: 所以,这里记录一个可以进 ...
- iTerm2 实现 ssh 自动登录,并使用 Zmodem 实现快速传输文件
原文链接:https://fuckcloudnative.io/posts/iterm2-auto-login/ 对于 YAML 工程师来说,我们经常需要 ssh 登录不同的服务器,每次登录时都要经历 ...
- 记一次centos7重启后docker无法启动的问题
问题描述 在重新了centos7系统后,docker突然就启动不了了,查看报错信息 [root@localhost ~]# systemctl status docker.service ● dock ...
- 如何查看U盘的VID和PID
1.将USB插入电脑 2.右键单击[此电脑],选择[管理] 3.在弹出的对话框中选择[设备管理器],选择[USB大容量存储设备] 4.右键单击[USB大容量存储设备],选择[属性],在弹出的对话框中选 ...
- 01-CentOS 8.1安装 Docker
官方参考地址:https://docs.docker.com/install/linux/docker-ce/centos/ 里面包含包下载地址:https://download.docker.com ...