【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

在 Open Distro for Elasticsearch 中设置多租户 Kibana 访问权限

  • 2019-09-27
  • 本文字数:3733 字

    阅读完需:约 12 分钟

在 Open Distro for Elasticsearch 中设置多租户 Kibana 访问权限

Elasticsearch 已经成为存储和分析日志数据的默认选择,以提供有关应用程序性能、您的安全性状况以及用户与应用程序之间互动的见解。它是如此有用,以至于许多团队在开发周期的初期就采用 Elasticsearch 来支持开发运营。这种自发性的采用往往会迅速成长,在大型组织中形成纷繁混杂的集群和用户。在某个时刻,您需要集中管理日志,从而可以更严密地管理您的支出和使用情况。


集中式日志记录架构的缺点在于,您必须管理数据的访问权限。您希望支付处理部门的数据保持私有,对(例如)您的前端开发人员不可见。借助 Open Distro for Elasticsearch 安全性插件,您可以按照文档和字段级别的粒度来管理数据访问权限。您会创建角色,为这些角色分配操作组,并将用户映射到角色以控制他们对索引的访问权限。


Kibana 的访问控制更加难以实现。通常,Kibana 的可视化项目和控制面板会共享一个通用的索引 .kibana。如果您的用户拥有该索引的访问权限,则他们将可以访问其中的所有可视化项目。Open Distro for Elasticsearch 安全性插件允许您定义租户(将可视化项目和控制面板隔离起来),实现了多租户 Kibana 体验,从而解决了此问题。在本博文中,我将演示如何为两个假象的部门设置多租户环境,一个为支付部门,另一个为前端部门。

先决条件

Open Distro for Elasticsearch 已经默认启用 Kibana 多租户功能。如果您禁用了多租户功能,则我们的文档将引导您启用它。您需要有一个正在运行的 Open Distro for Elasticsearch 集群。我运行 esrally,使用 http_logs 跟踪来生成集群中的索引。我将为支付部门使用 logs-221998 ,为前端部门使用 logs-211998。


重要提示:您必须为您的角色、用户和租户提供不同的名称! 我使用附加 -role、-user 和 -tenant 的惯例来确保名称的唯一性。

设置角色

角色是 Open Distro for Elasticsearch 安全性插件进行访问控制的基础。您可以通过角色指定其用户可以执行的操作,以及这些用户可以访问的索引。


我将创建两个角色 — payments-role 和 frontend-role — 每个角色分别拥有相关索引的访问权限。要创建角色,请导航至 https://localhost:9200。使用拥有管理员权限的用户登录(我选择了默认的 admin 用户)。单击自行探索以关闭启动屏幕,然后单击 Kibana 左侧工具条中的安全性选项卡,然后单击角色按钮:



然后单击“+”按钮以添加新角色。



Open Distro for Elasticsearch 安全性插件,添加新角色窗格


在概述部分,将角色命名为 payments-role,然后单击页面顶部的索引权限选项卡。您还可以在集群权限选项卡中为角色设置集群级别的权限。在本博文中,我将限制为使用索引级别的访问控制。



Open Distro for Elasticsearch 安全性插件,索引访问权限设置窗格


在索引权限选项卡中,单击添加新索引和文档类型按钮。在结果页面中,从索引下拉列表中选择 logs-221998,然后单击保存。



Open Distro for Elasticsearch 安全性插件,将角色访问权限限制为特定的索引


单击保存将会显示权限:操作组下拉列表。选择全部(您可以选择读取等,为此用户设置更严格的权限,这将会仅允许只读访问)。这时不要单击保存角色定义,因为您还需要添加租户。选择租户选项卡,然后单击添加按钮。在 Tenant 字段填写 payments-tenant。您可以在此字段填写任何唯一的值;它仅仅是您为该租户选择的一个名称。


此角色的配置已经完成。单击保存角色定义。



重复此流程以创建 frontend-role 角色,为其设置对另一个索引的访问权限和不同的租户名称。我的集群中将使用 logs-211998 和 frontend-tenant。

设置用户

Open Distro for Elasticsearch 中的用户是通过了身份验证的实体。您可以将它们添加到角色,从而赋予相关角色允许的权限。Open Distro for Elasticsearch 安全性插件拥有一个内部用户数据库。如果您直接通过 Kibana 登录或基本的 HTTP 验证来完成身份验证,您将直接被分配给该用户。


您在下面的许多屏幕中还将看到“后端”一词。后端角色是指联合身份提供商提供的角色。后端角色区别于并且将映射到内部角色和用户。这似乎有些令人费解,但对于本博文,我们可以忽略后端角色。


我将创建两个用户 — payments-user 和 frontend-user。 单击 Kibana 左侧工具条中的安全性,然后单击内部用户数据库按钮。



单击“+”符号以添加新内部用户:



填写用户名、密码和再次输入密码字段。单击提交。



Open Distro for Elasticsearch 安全性插件,设置新用户的用户名和密码窗格


重复此流程创建 frontend-user 和 frontend-tenant。

将用户映射到角色

最后一步是将您创建的用户(及其租户)映射到您创建的角色。单击安全性选项卡,然后单击角色映射按钮。



然后单击“+”按钮以添加新角色映射。从角色下拉列表中选择 payments-role。单击 + 添加用户按钮,然后在文本框中键入 payments-user。最后单击提交。



为 frontend-role 角色和 frontend-user 用户重复此流程。


为确保您的用户能够使用 Kibana,您还需要将他们添加到 kibana_user 角色。从角色映射屏幕中,单击 kibana_user 的编辑铅笔图标。



在下一屏幕中,单击 添加用户并在文本框中键入 payments-user。再次单击添加用户以添加 frontend-user。单击提交以保存更改。


恭喜,您的设置已经完成!

测试租户

注意:如果您的浏览器在 Cookie 中缓存了您的身份,您可能会遇到问题。要在干净的环境中进行测试,在 Firefox 中请使用文件 > 新建隐私窗口,这时将打开一个不含保存的 Cookie 的窗口。在 Chrome 中请使用 文件 > 新建隐身窗口。


要测试您的租户和访问控制,您将创建一个可视化项目作为 payments-user 并设置 payments-tenant,然后验证您在以 frontend-user 身份登录时将无法访问该可视化项目。在您的新窗口中,导航至 https://localhost:5601,然后作为 payments-user 用户登录。单击自行探索以关闭启动屏幕。在 Kibana 的左侧工具条中单击租户选项卡。



您可以看到当前已经选中 Private 租户。每个角色都拥有一个 Global 租户和一个 Private 租户。如果您选择 Global 租户,您所完成的工作将对所有其他用户/租户可见。如果您选择 Private 租户,则您完成的工作仅对登录用户可见(当前为 payments-user)。最后,您可能会看到 payments-tenant 租户。选中 payments-tenant 租户时,仅拥有该租户角色的用户可以看到可视化项目和控制面板。单击 payments-tenant 旁的选择,以选择 payments-tenant 租户。


现在您需要创建并保存一个可视化项目。首先要创建一个索引模式。单击管理选项卡,然后单击索引模式。在索引模式文本框中键入 logs-221998。单击下一步。在下一屏幕中,设置您的时间筛选条件字段名称。



在 Kibana 中创建索引模式,显示如何设置具体的索引


注意:正常情况下,您将为您的索引模式使用通配符。Esrally 在我的集群中创建了 6 个索引,全部采用 logs-XXXXXX 模式。当您设置角色时,您将为每个角色赋予对特定索引的访问权限。在此例中,payments-user 仅拥有 logs-221998 索引的访问权限。当您将某个可视化项目作为此用户创建时,Kibana 将拥有与您现在创建索引模式中的通配符匹配的所有索引的访问权限,包括被禁止的另外五个索引。Kibana 将会失败,并返回一条访问错误消息。为解决此问题,请键入准确的索引名称。为确保集中记录日志,请确保每个部门都为其索引使用唯一的前缀。然后,您的索引模式可以包含各个部门的通配符值。


在可视化选项卡中,使用流量计数创建一个简单的指标(注意,Rally 的 http_logs 数据时间戳为 1998 年。您需要设置时间选择器才能正确查看任何结果)。 将它保存为 payments-traffic。



退出登录,然后在新隐私窗口中以 frontend-user 身份重新登录。在租户选项卡中,您将看到您拥有 frontend-tenant,而不是 payments-tenant。



选择可视化选项卡,您将被提示创建索引模式。使用 logs-211998 索引。再次选择可视化选项卡。Kibana 将显示您没有可视化项目。

小结

在本博文中,您使用 Open Distro for Elasticsearch 安全性插件创建了两个用户,并通过您赋予的角色为它们提供了自己的 Kibana 租户。Open Distro for Elasticsearch 的租户模型可保持租户的相互隔离,从而确保您的支付部门的可视化项目和控制面板对前端部门的用户不可见。然后,您进一步限制了对底层索引的访问权限,从而确保前端部门的用户无法访问支付部门的索引中的数据。您创建了一个孤岛以方便您管理您的敏感数据!


立即加入 GitHub 以完善项目文档,添加示例,提交功能请求,以及提交漏洞报告。检查代码,构建插件,打开 Pull 请求 — 我们非常乐意审核和分析集成步骤。欢迎您参与此项目。如果您有任何问题,请通过社区开发论坛提出。


作者介绍:


Jon Handler


Jon Handler (@_searchgeek) 是总部位于加利福尼亚州帕罗奥图市的 Amazon Web Services 的首席解决方案架构师。Jon 与 CloudSearch 和 Elasticsearch 团队密切合作,为想要将搜索工作负载迁移到 AWS 云的广大客户提供帮助和指导。在加入 AWS 之前,Jon 作为一名软件开发人员,曾为某个大型电子商务搜索引擎编写代码长达四年。Jon 拥有宾夕法尼亚大学的文学学士学位,以及西北大学计算机科学和人工智能理学硕士和博士学位。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/multi-tenant-kibana-open-distro-for-elasticsearch/


2019-09-27 16:551228
用户头像

发布了 1804 篇内容, 共 87.6 次阅读, 收获喜欢 73 次。

关注

评论

发布
暂无评论
发现更多内容

单账户实时记账能力达2万笔每秒 蚂蚁启用新一代高性能记账引擎

DT极客

字节抖音iOS客户端实习 123hr面 面经

iOSer

ios 字节跳动 面试 抖音

定义结构体访问结构成员的三种方法

Emotion

Datadog 能成为最大的云监控厂商吗

睿象云

运维 运维平台 Datadog 云监控

区块链中药溯源--区块链为中医药溯源认证

13530558032

低代码是什么?低代码价值主要体现在哪?

优秀

低代码

力扣(LeetCode)刷题,简单题(第13期)

不脱发的程序猿

面试 LeetCode 28天写作 算法面经 3月日更

程序员去大公司面试,小程序FMP优化实录,已拿offer入职

欢喜学安卓

android 程序员 面试 移动开发

2021最新分享三面百度提前批(Java开发岗)面经 已拿Offer

比伯

Java 编程 架构 面试 程序人生

推荐 2 款必备的 Django 开发神器

星安果

Python django Web 后端

主数据建设的挑战与发展

EAWorld

困扰一周的奇葩bug:重复相似代码多,导致单片机程序跑飞

不脱发的程序猿

28天写作 硬件设计 嵌入式软件 单片机 3月日更

python编译器中出现了绿色波浪线,光标放上去出现的提示是什么意思?

Emotion

Worktile 前端工程化之路

PingCode研发中心

大前端

基于深度学习的两种信源信道联合编码

华为云开发者联盟

深度学习 通信 编码 信源编码 信道编码

阿里面试官:Android开发真等于废人?已拿offer附真题解析

欢喜学安卓

android 程序员 面试 移动开发

从解决Github TimeOut到经典面试题:从输入URL到浏览器显示页面发生了什么?

秦怀杂货店

GitHub TCP 网络 HTTP DNS

​Autonomous Dream Works的独创力杰作EGGNetwork EFTalk

币圈那点事

Golang号称最快的Json解析器速度可达5623ns/op

happlyfox

学习 3月日更 Go 语言

这个GItHub上的Java项目开源了,2021最全的Java架构面试复习指南

Java 程序员 面试

实现跨生态互联,区块链赋能智能家居新体验

旺链科技

区块链应用 智能家居

为什么python中程序的结果会一直输出,需要怎么解决

Emotion

为了跳槽刷完1000道Java面试真题,没想到老板直接给我升职了

Java 程序员 架构 面试

透过 3.0 Preview 看 Dubbo 的云原生变革

阿里巴巴云原生

容器 运维 云原生 dubbo 应用服务中间件

如何正确使用Python临时文件

华为云开发者联盟

Python 安全 临时文件 tempfile 库函数

被MySQL慢日志查询搞废了?3分钟教你快速定位慢查询问题!

观测云

云计算

LeetCode题解:92. 反转链表 II,迭代,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

OpenKruise 如何实现 K8s 社区首个规模化镜像预热能力

阿里巴巴云原生

Serverless 容器 云原生 k8s 调度

电子证照上链--助推智慧政务

13530558032

能源绿色管控:天然气站启动数字化转型,工业企业该如何突围?

一只数据鲸鱼

物联网 数据可视化 智慧城市 能源管理 天然气

可能是绝唱!阿里资深工程师深度解读Netty底层核心源码

Java架构追梦

Java 源码 架构 面试 Netty

在 Open Distro for Elasticsearch 中设置多租户 Kibana 访问权限_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章