文章目录

  • 1.概述
  • 2. xpack.security.enabled的作用
    • 2.1 实验一
      • 1.生成ca文件
      • 2.elastisearch.yml中进行相关的配置,开启了node之间transport层面使用ssl
      • 3.访问测试
  • 3.创建用户信息,跳过build-in user的初始化
    • 3.1 配置file realm
    • 3.2 kibana配置
    • 3.3 使用kibana创建用户测试
  • 4.anonymous 用户的测试
    • 4.1 es设置
    • 4.2 访问测试
  • 5. role中的run as 功能
    • 5.1 配置一个更低权限的user
    • 5.1 给run_user 配置一个run as 权限
  • 6.开启http层面是ssl/tsl加密

1.概述

  es 官方有security开启的操作流程,这篇文章的主要是为了搞清楚这些流程中的每一步是否必要,有什么含义。先总结官方步骤如下

  1. 检查使用license,因为不同的license能够使用的权限验证方式也是不一样的。
  2. 检查集群,保证每一个node都进行了设置 xpack.security.enabled: true
    这个会开启security设置,也就开启了node之间使用ssl和基于用户的访问模式
  3. 想要跑在专用的jvm上(这个一般用不到)
  4. 开启node之间的transport层面的ssl/tls
  5. 启动es
  6. 为build-in user设置password
  7. 选择一种realm的管理方式,basic只能使用 file,native两种方式,其他的都是收费的
  8. 创建一些role和user来进行使用
  9. 打开audit功能呢(可选的,实际上这个是收费的,我们也用不了)

2. xpack.security.enabled的作用

  最开始的时候,我以为这个仅仅是开启设置,强制要求进行node间的encrypt通信,实验的时候才发现,xpack.security.enabled会开启集群的node之间的encrypt通信的要求,同时也会开启基于user-password的访问特性。

2.1 实验一

1.生成ca文件

bin/elasticsearch-certutil ca
生成 elastic-stack-ca.p12 文件,中间一路回车,不用设置密码bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
生成 elastic-certificates.p12,中间一路回车,不设置密码mkdir config/certs
mv  elastic-stack-ca.p12   elastic-certificates.p12 config/certs/

2.elastisearch.yml中进行相关的配置,开启了node之间transport层面使用ssl

## security 相关
xpack.security.enabled: true### 1. tcp层配置
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12

3.访问测试

这个时候集群的启动是正常的,但是使用curl访问的时候

curl 10.76.3.145:12200 |jq '.'
{"status": 401,"error": {"header": {"WWW-Authenticate": "Basic realm=\"security\" charset=\"UTF-8\""},"reason": "failed to authenticate user [elastic]","type": "security_exception","root_cause": [{"header": {"WWW-Authenticate": "Basic realm=\"security\" charset=\"UTF-8\""},"reason": "failed to authenticate user [elastic]","type": "security_exception"}]}
}

发现需要用户信息,必须使用用户才能够正常的访问。
使用默认的用户信息

curl -u 'elastic:changeme'  10.76.3.145:12200 |jq '.'

访问发现也是不行的,通过文档查找知道es已经取消了这些用户的默认密码,只有手动修改激活之后才是可以正常使用的。

3.创建用户信息,跳过build-in user的初始化

  因为上面的讨论中认为xpack.security.enabled会开启集群的node之间的encrypt通信的要求,同时也会开启基于user-password的访问特性,初步思考,认为build-in user只是user中的一个很小的部分,是为了让user使用更加方便的,并不算是一个独立的功能,所以步骤6并不是必须的。

为了验证一下,这里并没有进行build-in user的初始化过程。直接在每个node上配置了file realm

3.1 配置file realm

es 目录下执行

./bin/elasticsearch-users  useradd  chencc -p chencc -r superuser
bin/elasticsearch-users listchencc         : superuser

这个命令会在config下的 users_roles, users文件下生成了role和user信息,用户为checc, password 为chencc, role为bulid-in role superuser,这个role默认拥有所有的权限,
参照这里,这里和这里

es配置


## security 相关
xpack.security.enabled: true### 1. tcp层配置
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12xpack.security.authc.realms.file.file1.order: 0

3.2 kibana配置


server.name: dev-log
server.port: 45601
server.host: 10.76.0.129
elasticsearch.hosts: ["http://10.76.0.98:12200"]
elasticsearch.username: chencc
elasticsearch.password: chenccxpack.monitoring.kibana.collection.enabled: true
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.hosts: ["http://10.76.0.98:12200"]
xpack.monitoring.elasticsearch.username: chencc
xpack.monitoring.elasticsearch.password: chencc

注意两个地方都要配置user,password才行。
然后使用 chencc登录kibana发现还都是好使的,哈哈哈。

curl -u 'chencc:chencc'  10.76.3.145:12200 |jq '.'
{"tagline": "You Know, for Search","version": {"minimum_index_compatibility_version": "6.0.0-beta1","number": "7.3.0","build_flavor": "default","build_type": "tar","build_hash": "de777fa","build_snapshot": false,"lucene_version": "8.1.0","minimum_wire_compatibility_version": "6.8.0"},"cluster_uuid": "aT2wHdDBQDSguyDjgAzHzw","cluster_name": "dev-log","name": "ES02"
}

  这也是说明了并不一定绝对依赖build-in user,他是es的提供的方便,但是实际使用中肯定还是建议激活的,这些用户都对应了一些特定的场景,可以更加方便快捷的进行权限划分。但是在kibana的管理页面是看不到这个用户的存在的,应该是无法通过api修改权限的
但是我们可以将file realm定义的用户合并到native ,参考这里

To migrate file-based users to the native realm, use the migrate tool.

但是这个工具在7.2的时候已经过期了,官方建议是直接使用native realm即可

  同时,对于file-realm的使用,es官方的建议是配置一个高级别的管理员用户,在其他用户都被lock的时候用户重置其他用户。参考这里

3.3 使用kibana创建用户测试

  既然chencc可以拥有所有的权限,不妨索性创建两个用户试试,在kibana的管理页面创建了一个role为superuser的用户chen_test,但是用这个用户来登录kibana的时候,发现不行。使用curl访问的时候也报没有权限。

curl -u 'chen_super:chen_super'  10.76.3.145:12200 |jq '.'{"status": 401,"error": {"header": {"WWW-Authenticate": "Basic realm=\"security\" charset=\"UTF-8\""},"reason": "unable to authenticate user [chen_super] for REST request [/]","type": "security_exception","root_cause": [{"header": {"WWW-Authenticate": "Basic realm=\"security\" charset=\"UTF-8\""},"reason": "unable to authenticate user [chen_super] for REST request [/]","type": "security_exception"}]}
}

  这个时候想到有可能额因为每个es node中显式的配置了file realm ,导致了native-realm被禁用了(kibana创建的属于native realm)。所以创建的用户没有办法使用了。参考这里

The file realm is added to the realm chain by default.
You don’t need to explicitly configure a file realm.

and 这里

The native realm is available by default when no other realms are configured.
If other realm settings have been configured in elasticsearch.yml,
you must add the native realm to the realm chain.

所以所显式的打开native试试


## security 相关
xpack.security.enabled: true### 1. tcp层配置
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12xpack.security.authc.realms.file.file1.order: 0
xpack.security.authc.realms.native.native1.order: 1

果然,打开native之后就可以了,无论是kibana登录还是curl访问,啊啊啊。
如何进行带有user-password的请求参考这里

curl -u 'chen_super:chen_super'  10.76.3.145:12200 |jq '.'
{"tagline": "You Know, for Search","version": {"minimum_index_compatibility_version": "6.0.0-beta1","number": "7.3.0","build_flavor": "default","build_type": "tar","build_hash": "de777fa","build_snapshot": false,"lucene_version": "8.1.0","minimum_wire_compatibility_version": "6.8.0"},"cluster_uuid": "aT2wHdDBQDSguyDjgAzHzw","cluster_name": "dev-log","name": "ES02"
}

这里说明了即使关掉了native,使用kibana和响应的api都是还是可以创建用户的,但是不能正常使用。必须在开启了native之后这些用户才是可以使用的。

4.anonymous 用户的测试

  es还允许你配置一个匿名用户来进行访问,你可以对这个用户进行role的设置,决定了如果一个访问没有携带用户信息的话,就使用配置的匿名用户来进行鉴权,后面的测试发现,如果请求携带的用户权限不够,也会尝试使用配置的anonymous用户来代替鉴权。

4.1 es设置


## security 相关
xpack.security.enabled: true### 1. tcp层配置
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12## 2. realm 配置
xpack.security.authc.realms.file.file1.order: 0
xpack.security.authc.realms.native.native1.order: 1## 3. 匿名配置
xpack.security.authc:anonymous:username: anonymous_userroles: superuser,kibana_userauthz_exception: true

4.2 访问测试


curl  10.76.3.145:12200 |jq '.'
{"tagline": "You Know, for Search","version": {"minimum_index_compatibility_version": "6.0.0-beta1","number": "7.3.0","build_flavor": "default","build_type": "tar","build_hash": "de777fa","build_snapshot": false,"lucene_version": "8.1.0","minimum_wire_compatibility_version": "6.8.0"},"cluster_uuid": "aT2wHdDBQDSguyDjgAzHzw","cluster_name": "dev-log","name": "ES02"
}

可以看到,不带用户信息进行访问,也能够通过,但是假如你携带了用户的信息,但是这个用户不存在,或者密码错误,这还是会返回失败的哦。

5. role中的run as 功能

在es的权限中中还有一种是run as 权限,也就是允许你run as另一个用户。
这个时候,另一个用户其实也就成了一种权限,类似一个role一样。
这个功能的解释我看了半天没有看懂,最后竟然还是借助google翻译看懂的,大哭。

01.elasticsearch-security_es鉴权机制相关推荐

  1. 技术分享|明源云天际集成开放平台接口中心基于IdentityServer4的鉴权机制

    源宝导读:企业数字化生态建设中为解决集成多样性和资源统一管理的痛点引入企业级网关,网关作为资源访问的大门,身份认证鉴权是其业务的重中之重,本文将介绍企业级网关-天际集成开放平台是如何通过Identit ...

  2. 可能是全网首个支持阿里云Elasticsearch Xapck鉴权的Skywalking

    可能是全网首个支持阿里云Elasticsearch Xapck鉴权的Skywalking 对Skywalking有兴趣的同学参见:年轻人的第一个APM-Skywalking 之前在搭建Skywalki ...

  3. aka鉴权 ims_IMS的AKA鉴权机制

    摘要: IP 多媒体子系统 ( IMS ) 作为 3G 网络的核心控制平台,其安全问题正面临 着严峻的挑战. IMS 的 接入 认证机制的实现作为整个 IMS 安全方案实施的第一步, 是保证 IMS ...

  4. Amazon S3和Swift鉴权机制分析

    基于Base64编码的HTTP Basic Authentication由于安全问题,已经不再广泛使用了.在云存储中,数据的安全性一直被广泛关注.亚马逊的AWS S3和Openstack Swift分 ...

  5. 声网 Token 鉴权机制,以及常见的问题

    Token鉴权是什么? Token也称为动态密钥,是在加入频道时用于校验用户权限的一组字符串:鉴权是指在用户访问你的系统前,对其进行身份校验.用户在使用声网服务,如加入音视频通话或登录信令系统时,声网 ...

  6. 云存储的两种鉴权机制(转载)

    1.AWS S3(Amazon Web Services)(Storage Area Network,简称SAN). AWS是亚马逊公司旗下云计算服务平台,为全世界范围内的客户提供云解决方案.AWS面 ...

  7. 我的token鉴权机制hanhan

  8. 原创|对接三方服务商回调鉴权的程序代码设计

    文章目录 一.背景 二.详细设计 1.UML设计 2.程序设计 2.1.AuthenticateActionEnum 2.2.AuthenticateDispatcher 2.3.BaseAuthen ...

  9. aka鉴权 ims_ims 注册鉴权认证过程

    移动通信的安全问题正越来越多地受到关注.2G网络主要传输语音业务,采用的是单向的用户认证方案,即网络能够验证用户身份是否合法,而用户无法确认其所连接的网络服务是否可靠.然而,3G网络将会演变成一个覆盖 ...

最新文章

  1. Android如何客制化adb shell进去后显示shell@xxxx的标识
  2. ARP欺骗防御工具arpon
  3. (译)cocos2d-x跨androidios平台开发入门教程
  4. 从零开始学习docker(二)网络
  5. linux apt-get dpkg,linux的sudo apt-get install 和dpkg -i package.deb命令
  6. 程序包android.support.annotation不存在_efcore技巧贴也许有你不知道的使用技巧
  7. oracle xsql详解(二)
  8. 设计了一个JavaScript的源代码混淆器
  9. /usr/bin/ld: reader.o: Relocations in generic ELF (EM: 62)
  10. 最小二乘求解与正则化
  11. 北京优质农产品入驻苏宁小店 实现“农超对接”
  12. udp buffer 和reassemble buffer
  13. 2022年上海落户最快方式!本科2年落户上海!硕士1年落户上海!
  14. 《千字文细谈》2021神级程序员都在用什么工具?-09-02
  15. bugku never give up
  16. C语言校园家教管理系统
  17. 计算机word的常用功能技巧,word一些实用小技巧
  18. 安装node.js(‘npm‘ 不是内部或外部命令,也不是可运行的程序)
  19. WPF无弹窗打印_se7en3_新浪博客
  20. 用cxf开发一个可以被安卓调用的接口

热门文章

  1. C++ STL 一般总结
  2. 如何用ELK搭建TB级的日志监控系统?
  3. 看我如何作死 | 网络延迟、网络丢包、网络中断一个都没落下过
  4. Python中的协程
  5. shell编程之随机数和嵌套循环
  6. 对话美摄科技侯康:提升技术,拓展场景 美摄智能汽车视频处理方案已就位
  7. 对话RTP作者Ron Frederick: 我非常期待QUIC的发展
  8. Google调查了人们过去24小时的观看记录,发现了这些......
  9. 孙学京:我的大学在编程,练琴,听摇滚乐和专业课中度过
  10. 11.25个推TechDay X 中生代技术全国巡回沙龙北京站