Elasticsearch:如何让匿名的用户访问受限的资源
2021年1月9日 | by mebius
我们都知道安全是一个非常重要的话题。没有安全,就像我们的家里没有锁一样,任何人可以随意进出。近一些年来,我们也看到很多 Elasticsearch 数据泄露的情况。如果你想给你的 Elasticsearch 配置上安全,那么请阅读我之前的文章 “Elasticsearch:设置 Elastic 账户安全”。
但是在实际的使用中,我们有时候也希望有一些匿名的访问,这个就像我们去一个公司开会,我们有时也想得到免费的 guest WiFi 进行访问一些。我们也学希望我们的tgcode一些数据能够被一些人进行访问,具有只读的权限,从而进行数据的展示。在今天的文章中,我将介绍如何使得一个已经配置安全的 Elasticsearch 集群来开发一个资源让匿名的用户来进行访问。
启用匿tgcode名访问
如果无法从传入请求中提取身份验证令牌,则传入请求被视为匿名。 默认情况下,匿名请求将被拒绝,并返回身份验证错误(状态码401)。
要启用匿名访问,你可以在 config/elasticsearch.yml 配置文件中为匿名用户分配一个或多个角色。 例如,以下配置为匿名用户分配 role1 和 role2:
xpack.security.authc:
anonymous:
username: anonymous_user (1)
roles: role1, role2 (2)
authz_exception: true (3)
在这里:
(1) 处定义了匿名用户的 username/principal。默认值为_es_anonymous_user
(2)与匿名用户关联的角色。 如果未指定任何角色,则会禁用匿名访问-匿名请求将被拒绝并返回身份验证错误。在上面,我定义了 role1 以及 role2 两个角色
(3)设置为 true 时,如果匿名用户不具有执行请求的操作所需的权限,并且不会提示用户提供访问请求的资源的凭据,则返回 403 HTTP 状态代码。 设置为 false 时,如果匿名用户没有必要的权限,并且提示用户输入访问所需资源的凭据,则返回 401 HTTP 状态代码。 如果将匿名访问与 HTTP 结合使用,并且如果客户端不支持抢占式基本身份验证,则可能需要将 authz_exception 设置为 false。 默认为 true。
动手实践
为Elasticsearch 配置安全
在今天的动手实践中,我们首先需要参考我之前的文章 “Elasticsearch:设置 Elastic 账户安全” 为自己的 Elasticsearch 配置好安全。等我们配置好安全后,我们需要使用用户名及密码登录 Kibana。
准备数据
接下来,我们来准备数据:
点击上面的 Add data:
这样我们就把kibana_sample_data_logs 索引导入到 Elasticsearch 中了。
创建 role
接下来,我们在 Kibana 中创建一个 kibana_data_analyst这样的一个 role。
点击 Create role。这样我们就创建了一个叫做 kibana_data_analyst 的角色。请注意上面的配置:它只可以操作于kibana_samptgcodele_data_logs,并只有 read 的权限。
从上面,我们看出来 kibana_data_analyst 角色已经创建好了。
配置 Elasticsearch
我们接下来配置 Elasticsearch。打开 config/elasticsearch.yml 文件:
我们添加在上面红色框中显示的内容:
xpack.security.authc:
anonymous:
username: anonymous_user
roles: kibana_data_analyst
authz_exception: true
配置完毕后,我们需要重新启动 Elasticsearch。
测试
接下来我们来测试一下是否成功。打开 Kibana:
我们在 Kibana 中打入命令:
GET kibana_sample_data_logs/_search?pretty&size=1
然后,如上所示选择 Copy as cURL,然后粘贴到一个 terminal 中:
如上图所示,我们可以看到即使我们在没有使用密码的情况下,我们也可以访问这个索引,并进行搜索。
我们接下来做另外一个实验:
上面的命令是想索引kibana_sample_data_logs 添加一个文档。从上面的输出可以看出来在 Kibana 中是成功的,这是因为我们是以 elastic 这个超级用户登录的。我们把拷贝的内容粘贴到 terminal 中:
从上面的输出中,我们可以看到这种访问不被允许,这是因为我们只为 anonymous 用户配置了 read 的权限。
我们接下来创建一个新的 索引 twitter:
按照同样的方法,我们来在 terminal 中访问 twitter:
curl -XGET "http://localhost:9200/twitter/_search"
从上面的输出中,我们可以看到 twitter 不能被访问,这是因为我们的 kibana_data_analyst 只配置了对于kibana_sample_data_logs 的访问。其它的任何索引都不能被访问。
好了。今天的分享就到这里了。希望小伙伴们学到东西了。
文章来源于互联网:Elasticsearch:如何让匿名的用户访问受限的资源
在可视化中,我们经常会用到个性化的货币单位来表示金额的大小。如果我们只单纯地显示一个数字,看报表的人很难知道当前的金额是多少。在今天的教程中,我来教大家如何显示人民币单位在可视化中。 准备数据 我们来创建一个很简单的索引 shop: PUT shop/_doc…