新建Elasticsearch用户并配置相应索引权限
本章节为您介绍如何在7.6.2版本Elasticsearch安全集群上使用RBAC模型。
背景信息
云搜索服务(Cloud Search Service,简称CSS)用opendistro_security安全插件对外提供安全集群能力,opendistro_security安全插件是基于RBAC(Role-Based Access Control)模型构建。RBAC包括三个重要核心概念:用户(User)、权限(Action)、角色(Role)。RBAC简化了用户和权限的关系,降低了权限管理的难度,方便权限扩展易于维护。三者之前的关系如下图所示:
![](https://support.huaweicloud.com/bestpractice-css/figure/zh-cn_image_0000001934179838.png)
除了RBAC模型之外,Elasticsearch还有一个重要的概念,叫做Tenant。RBAC能解决各个用户本身授权的问题,Tenant则能解决了不同租户之间的共享信息,通过配置Tenant空间,各个IAM用户(子用户)可以在Tenant空间中共享Dashboard、index_pattern等信息。
默认情况下,用户只能看见自己Private Tenant空间下的index_pattern、dashboard等信息。新建一个用户“test”,默认会有一个.kibana_xxx_test的索引创建,“test”的private空间的内容会存储在.kibana_xxx_test中。同理,admin账号的private tenant空间内容存储在.kibana_xxx_admin中,如果想要共享当前租户的index_pattern或者Dashboard其他租户,一个是可以创建在global tenant中,其他用户只需要切换到global tenant空间即可。
创建用户并配置相应权限
- 使用Kibana创建用户(User)。
- 登录云搜索服务控制台。
- 在集群管理列表,选择对应集群,单击操作列的“Kibana”。
- 账户名:admin(默认管理员账户名)
- 密码:创建安全模式的集群时,设置的管理员密码。
图2 登录页面 - 登录成功后,在Kibana操作界面,选择“Security”,进入对应页面。
图3 Security页面
- 在Security页面,选择“Authentication Backends”>“Internal Users Database”,进入创建用户页面。
图4 创建用户
- 在“Internal Users Database”页面,选择“+”进入添加用户信息页面。
- 在创建用户页面,输入“Username”和“Password”,单击“Submit”。本案例已用户名test为示例。
图5 添加用户信息
用户创建成功后,可以在列表中看到新创建的用户。
- 创建角色Role,并授予Role相应权限。
- 在“Security”中选择“Roles”,进入“Open Distro Security Roles”页面。
图6 Open Distro Security Roles页面
- 在Open Distro Security Roles页面,单击“+”添加角色权限。
- 在Overview页面设置角色名。
图7 Overview页面
- 在“Cluster Permissions”页面设置CSS集群权限。
图8 Cluster Permissions页面
- 在“Index Permissions”页面,单击“Add index permissions”设置索引权限。
图9 Index Permissions页面
- Index patterns:配置为需要设置权限的索引名称,例如,索引模板名称为my_store。
- Permissions: Action Groups根据需要开通的权限设置。例如,只读权限选择Search。
- 在“Tenant Permissions”页面设置角色权限。
- 在“Security”中选择“Roles”,进入“Open Distro Security Roles”页面。
- 角色用户映射,将Role和User绑定。
- 在“Security”中选择“Role Mappings”,进入Role Mappings页面。
图10 Role Mappings页面
- 在Role Mappings页面,单击“+”添加用户和角色映射。
图11 添加用户和角色映射
- 添加完成后,单击“Submit”。
- 配置完成后,可以在Kibana中进行验证是否生效。
- 在“Security”中选择“Role Mappings”,进入Role Mappings页面。
创建一个具有Kibana访问权限的用户
- 参考创建用户并配置相应权限中的使用Kibana创建用户(User),创建一个用户名为test的用户。
- 角色用户映射,将Role和User绑定。
- 在“Security”中选择“Role Mappings”,进入Role Mappings页面。
- 在Role Mappings页面,单击“kibana_user”角色名称。
图12 kibana_user角色
kibana_user角色具有.kibana*索引的权限,Kibana界面上面操作的Dashboards以及index_pattern都是保存到.kibana*里面的,将test用户和kibana_user相映射,意味着这个test用户具有了kibana的权限。
- 单击“+”添加用户和角色映射。
- 在“Users”区域,选择创建的test用户。
- 添加完成后,单击“Submit”。
给新建用户分配指定索引index*的权限
新创建的test用户可以访问Kibana,并且可以使用Kibana的index_pattern、Discover、Dashboards等权限,但是这并不意味着test用户能看到任意的.kibana。test用户默认只能看到private tenant和global tenant空间的数据,如果需要访问其他的tenant空间,还需要在role中定义其他的tenant权限。
- 在“Security”中选择“Roles”。
- 在“Open Distro Security Roles”页面,单击“+”添加角色权限。
- 在“Overview”页签,设置角色名Role1。
- 在“Index Permissions”页签,单击“Add index permissions”设置索引权限。
图13 设置权限
- “Index patterns”:输入index*。
- “Permissions: Action Groups”:选择对应的权限,如果想要查询,可以选择read。如果想要写入,可以选择write,具体的操作对应的最底层action,可以参考kibana界面的permission模块介绍,以read为例,选择indices:data/read* 和indices:admin/mappings/fields/get*权限。indices:data/read* 包含indices:data/read/下所有的权限,比如indices:data/read/get、indices:data/read/mget、indices:data/read/search等。
- 设置完成后,即可看到设置的角色Role1。
- 在Security中选择“Role Mappings”。
- 在“Role Mappings”页面,单击“+”添加用户test和角色Role1映射。
- 添加完成后,单击“Submit”。
配置完成后,test用户即可拥有index*的read权限。
给test用户共享admin账号的index_pattern,Dashboards等信息
一般情况下,新建用户本身并不具备创建index_pattern的权限或者由于业务关系不能够进行数据管理。此时,一般是由admin账号进行index_pattern创建并且管理dashboard等报表信息,然后再将这些信息共享给test用户。
您可以按照以下流程操作:
- 使用admin账户在Global Tenant中创建index_pattern和Dashboards。
- Global Tenant所有的租户都可以直接访问,但是如果部门过多,这种情况体验较差,可以使用以下方法优化:
- 在“Security”中选择“Tenants”。以admin账户建立以部门为粒度的Tenant,比如test_tenant。
图14 创建Tenants
- 切换到对应部门test_tenant。
图15 切换test_tenant
- 在test_tenant下创建本部门需要的index_pattern、Dashboards。
- 在“Security”中选择“Roles”。单击test用户对应的角色Role1,在Tenant Permissions页签分配test_tenant给Role1。
保存后切换到test用户,test即可访问test_tenant空间内容。
- 在“Security”中选择“Tenants”。以admin账户建立以部门为粒度的Tenant,比如test_tenant。