文档首页> 云搜索服务 CSS> 最佳实践> 配置权限> 新建Elasticsearch用户并配置相应索引权限
更新时间:2024-02-23 GMT+08:00

新建Elasticsearch用户并配置相应索引权限

本章节为您介绍如何在7.6.2版本Elasticsearch安全集群上使用RBAC模型。

背景信息

云搜索服务(Cloud Search Service,简称CSS)用opendistro_security安全插件对外提供安全集群能力,opendistro_security安全插件是基于RBAC(Role-Based Access Control)模型构建。RBAC包括三个重要核心概念:用户(User)、权限(Action)、角色(Role)。RBAC简化了用户和权限的关系,降低了权限管理的难度,方便权限扩展易于维护。三者之前的关系如下图所示:

图1 用户、权限和角色

除了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空间即可。

创建用户并配置相应权限

  1. 使用Kibana创建用户(User)。

    1. 登录云搜索服务控制台。
    2. 在集群管理列表,选择对应集群,单击操作列的“Kibana”。

      输入管理员账户名和密码登录Kibana。

      • 账户名:admin(默认管理员账户名)
      • 密码:创建安全模式的集群时,设置的管理员密码。
      图2 登录页面
    3. 登录成功后,在Kibana操作界面,选择“Security”,进入对应页面。
      图3 Security页面
    4. 在Security页面,选择“Authentication Backends”>“Internal Users Database”,进入创建用户页面。
      图4 创建用户
    5. 在“Internal Users Database”页面,选择“+”进入添加用户信息页面。
    6. 在创建用户页面,输入“Username”和“Password”,单击“Submit”。本案例已用户名test为示例。
      图5 添加用户信息

      用户创建成功后,可以在列表中看到新创建的用户。

  2. 创建角色Role,并授予Role相应权限。

    1. 在“Security”中选择“Roles”,进入“Open Distro Security Roles”页面。
      图6 Open Distro Security Roles页面
    2. 在Open Distro Security Roles页面,单击“+”添加角色权限。
    3. 在Overview页面设置角色名。
      图7 Overview页面
    4. 在“Cluster Permissions”页面设置CSS集群权限。
      图8 Cluster Permissions页面
    5. 在“Index Permissions”页面,单击“Add index permissions”设置索引权限。
      图9 Index Permissions页面
      • Index patterns:配置为需要设置权限的索引名称,例如,索引模板名称为my_store。
      • Permissions: Action Groups根据需要开通的权限设置。例如,只读权限选择Search。
    6. 在“Tenant Permissions”页面设置角色权限。

      设置完成后,即可看到设置的角色。

  3. 角色用户映射,将Role和User绑定。

    1. 在“Security”中选择“Role Mappings”,进入Role Mappings页面。
      图10 Role Mappings页面
    2. 在Role Mappings页面,单击“+”添加用户和角色映射。
      图11 添加用户和角色映射
    3. 添加完成后,单击“Submit”。
    4. 配置完成后,可以在Kibana中进行验证是否生效。

创建一个具有Kibana访问权限的用户

  1. 参考创建用户并配置相应权限中的使用Kibana创建用户(User),创建一个用户名为test的用户。
  2. 角色用户映射,将Role和User绑定。

    1. 在“Security”中选择“Role Mappings”,进入Role Mappings页面。
    2. 在Role Mappings页面,单击“kibana_user”角色名称。
      图12 kibana_user角色

      kibana_user角色具有.kibana*索引的权限,Kibana界面上面操作的Dashboards以及index_pattern都是保存到.kibana*里面的,将test用户和kibana_user相映射,意味着这个test用户具有了kibana的权限。

    3. 单击“+”添加用户和角色映射。
    4. “Users”区域,选择创建的test用户。
    5. 添加完成后,单击“Submit”。

      配置完成后,切换test用户,进行权限验证是否生效。

给新建用户分配指定索引index*的权限

新创建的test用户可以访问Kibana,并且可以使用Kibana的index_pattern、Discover、Dashboards等权限,但是这并不意味着test用户能看到任意的.kibana。test用户默认只能看到private tenant和global tenant空间的数据,如果需要访问其他的tenant空间,还需要在role中定义其他的tenant权限。

  1. “Security”中选择“Roles”
  2. “Open Distro Security Roles”页面,单击“+”添加角色权限。
  3. “Overview”页签,设置角色名Role1。
  4. “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等。

  5. 设置完成后,即可看到设置的角色Role1。
  6. 在Security中选择“Role Mappings”
  7. “Role Mappings”页面,单击“+”添加用户test和角色Role1映射。
  8. 添加完成后,单击“Submit”

    配置完成后,test用户即可拥有index*的read权限。

给test用户共享admin账号的index_pattern,Dashboards等信息

一般情况下,新建用户本身并不具备创建index_pattern的权限或者由于业务关系不能够进行数据管理。此时,一般是由admin账号进行index_pattern创建并且管理dashboard等报表信息,然后再将这些信息共享给test用户。

您可以按照以下流程操作:

  1. 使用admin账户在Global Tenant中创建index_pattern和Dashboards。
  2. Global Tenant所有的租户都可以直接访问,但是如果部门过多,这种情况体验较差,可以使用以下方法优化:
    1. “Security”中选择“Tenants”。以admin账户建立以部门为粒度的Tenant,比如test_tenant。
      图14 创建Tenants
    2. 切换到对应部门test_tenant。
      图15 切换test_tenant
    3. 在test_tenant下创建本部门需要的index_pattern、Dashboards。
    4. “Security”中选择“Roles”。单击test用户对应的角色Role1,在Tenant Permissions页签分配test_tenant给Role1。

      保存后切换到test用户,test即可访问test_tenant空间内容。