更新时间:2024-10-25 GMT+08:00

创建Elasticsearch集群用户并授权使用

CSS服务会对开启安全模式的集群进行访问控制,只有通过身份认证的用户才能访问安全集群。在创建安全集群时,必须配置一个管理员账号。该管理员能够使用Kibana为集群添加新用户,并授予相应的安全集群使用权限。本文将以7.6.2版本的Kibana为例,指导如何使用Kibana为安全集群配置用户授权。

背景信息

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

图1 用户、权限和角色
表1 概念介绍

参数

描述

User

用户:可以向Elasticsearch集群发出操作请求。用户具有凭证(例如,用户名和密码)、零个或多个后端角色以及零个或多个自定义属性。

Role

角色:定义为权限或操作组的组合,包括对集群,索引,文档或字段的操作权限。

Permission

权限:单个动作,例如创建索引(例如indices:admin/create)。

Role mapping

角色映射:用户在成功进行身份验证后会担任角色。角色映射,就是将角色映射到用户(或后端角色)。例如,kibana_user(角色)到jdoe(用户)的映射意味着John Doe在获得kibana_user身份验证后获得了所有权限。同样,all_access(角色)到admin(后端角色)的映射意味着具有后端角色admin(来自LDAP / Active Directory服务器)的任何用户都获得了all_access身份验证后的所有权限。您可以将每个角色映射到许多用户和/或后端角色。

Action group

操作组:一组权限。例如,预定义的SEARCH操作组授权角色使用_search和_msearchAPI。

除了RBAC模型,Elasticsearch还有Tenant概念。RBAC用于解决用户级别的授权问题,而Tenant则处理不同租户间的信息共享问题。通过配置Tenant空间,租户能够在该空间内共享Dashboard、index_pattern等信息。

默认情况下,用户仅能查看其Private Tenant空间中的index_pattern、dashboard等信息。当添加新用户“test”时,系统会自动生成一个名为“.kibana_xxx_test”的索引,该用户Private空间的内容将存储于此。同理,管理员账号的Private Tenant空间内容则存储在“.kibana_xxx_admin”索引中。当需要与其他租户共享index_pattern或Dashboard信息时,可以选择在Global Tenant空间中创建它们,其他用户只需切换至Global Tenant,即可访问共享信息。

在Kibana界面的Security菜单中,您可以控制用户在Elasticsearch集群中的权限,实现集群、索引、文档和字段四个级别的细粒度访问权限控制。

支持添加或删除集群的用户,并能够将用户映射到角色,实现用户关联角色权限。

角色映射功能允许配置角色的成员,通过用户名、后端角色和主机名将用户分配给相应的角色。支持为每种角色配置集群访问权限、索引和文档的访问权限,以及Kibana的使用权限。

有关安全集群的更多安全配置信息以及详细的操作指导,可以参考Elasticsearch的安全模式官方介绍

约束限制

  • Kibana中可以自定义用户名、角色名、租户名等,但不支持中文字符。
  • 不同版本的Kibana界面可能有所差异,请以实际操作环境为准。本文以Kibana 7.6.2版本作为示例。

创建用户并授权

  1. 登录云搜索服务控制台。
  2. 在集群管理列表,选择对应集群,单击操作列的“Kibana”。
  3. 使用管理员账号登录Kibana页面。
    • 账户名:admin(默认管理员账户名)
    • 密码:创建安全模式的集群时,设置的管理员密码。
  4. 登录成功后,在Kibana操作界面的左侧导航栏选择“Security”,进入“Security”页面。
  5. 给安全集群添加一个新用户“test”。
    1. 选择“Authentication Backends”>“Internal Users Database”,进入创建用户页面。
    2. “Internal Users Database”页面,单击“+”,进入添加用户信息页面。
      图2 添加用户
    3. 在创建用户页面,输入“Username”“Password”“Repeatpassword”,单击“Submit”

      此处以用户名“test”为例。创建成功后,可以在列表中看到新创建的用户。

  6. 创建角色“role_test”,并为角色授权。
    1. “Security”中选择“Roles”,进入Open Distro Security Roles页面。
    2. 在Open Distro Security Roles页面,单击“+”添加角色权限。
    3. 在Overview页签设置角色名“Role name”,例如“role_test”。
      图3 添加角色名称
    4. “Cluster Permissions”页签设置集群权限。根据业务需要选择相应的集群权限,不配置时表示角色不具有任何集群级别的权限。
      • “Permissions: Action Groups”:单击“Add Action Group”,可以设置集群权限。例如,集群只读权限选择read,表示仅可查看集群状态、集群节点等信息。
      • “Permissions: Single Permissions”:勾选Show Advanced后,单击“Add Single Permission”可以针对集群设置更精细的权限。例如设置为“indices:data/read”,表示仅指定索引的读取权限。
      图4 Cluster Permissions页面
    5. “Index Permissions”页面设置索引权限。
      • “Index patterns”:单击“Add index permissions”配置为需要设置权限的索引名称,例如,索引模板名称为“my_store”

        建议索引名称和创建的用户名不要相同。

      • “Permissions: Action Groups”:单击“Add Action Group”,根据需要开通的权限设置。例如,只读权限选择“Search”
    6. “Tenant Permissions”页面设置租户权限。
      • “Global permissions”:单击“Add Field”,设置角色的kibana读写权限,例如“kibana_all_read”“kibana_all_write”权限。
      • “Tenant permissions”:单击“Add tenant pattern”,自行添加租户模式,并且为新增的租户模式设置“kibana_all_read”“kibana_all_write”权限。
      图5 Tenant Permissions页面
    7. 单击“Save Role Definition”,保存角色设置,即可看到设置的角色。
  7. 将角色映射到用户,使用户具有角色的权限。
    1. “Security”中选择“Role Mappings”,进入Role Mappings页面,进行角色映射。
    2. 在Role Mappings页面,单击“+”,选择角色“Role”,添加用户“Users”
      • “Role”:选择待映射的角色名称,例如“role_test”。
      • “Users”:单击“Add User”,选择被映射角色的用户名称,例如“test”。
      图6 用户和角色映射
    3. 添加完成后,单击“Submit”
  8. 配置完成后,可以使用“test”用户登录Kibana,验证用户权限是否生效。

典型示例:通过管理员账户给用户分配Kibana的访问权限

  1. 使用管理员账户admin登录安全集群。
  2. “Security”中选择“Roles”,进入Open Distro Security Roles页面。
  3. “Open Distro Security Roles”页面,单击“+”添加角色权限。
  4. “Overview”页签,设置角色名。例如“kibana_user”。
  5. “Tenant Permissions”页签设置租户权限。
    • “Global permissions”:单击“Add Field”,设置角色的kibana读写权限,例如“kibana_all_read”“kibana_all_write”权限。
    • “Tenant permissions”:单击“Add tenant pattern”,自行添加租户模式,并且为新增的租户模式设置“kibana_all_read”“kibana_all_write”权限。
      图7 Tenant Permissions页面
  6. 单击“Save Role Definition”,保存角色设置,即可看到设置的角色“kibana_user”。
  7. 在Security中选择“Role Mappings”,进入Role Mappings页面。
  8. “Role Mappings”页面,单击“+”添加用户“test”和角色“kibana_user”映射。
  9. 添加完成后,单击“Submit”

    配置完成后,“test”用户即可拥有Kibana的读写权限。

典型示例:通过管理员账户给用户分配指定索引“index*”的Read权限

  1. 使用管理员账户admin登录安全集群。
  2. “Security”中选择“Roles”,进入Open Distro Security Roles页面。
  3. “Open Distro Security Roles”页面,单击“+”添加角色权限。
  4. “Overview”页签,设置角色名。例如“Role1”。
  5. “Index Permissions”页签,单击“Add index permissions”设置索引权限。
    图8 设置权限
    • “Index patterns”:输入“index*”,表示需要为所有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”等。
  6. 单击“Save Role Definition”,保存角色设置,即可看到设置的角色“Role1”。
  7. 在Security中选择“Role Mappings”,进入Role Mappings页面。
  8. “Role Mappings”页面,单击“+”添加用户“test”和角色“Role1”映射。
  9. 添加完成后,单击“Submit”

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

典型示例:通过管理员账户给用户分配其他Tenant的访问权限

新添加的test用户可以访问Kibana,并且可以使用Kibana的index_pattern、Discover、Dashboards等权限,但是这并不意味着test用户能看到任意的“.kibana”信息。test用户默认只能看到Private Tenant和Global Tenant空间的数据,如果需要访问其他用户的Tenant空间,则需要通过管理员账户在test用户的Role中定义其他空间的index_pattern、dashboard等信息的访问权限。

  1. 使用管理员账户admin在集群的Global Tenant中创建index_pattern和Dashboards。

    Global Tenant是所有用户都可以直接访问的,当部门过多时,可以通过给用户分Tenant组进行管理。

  2. “Security”中选择“Tenants”。单击“+”建立以部门为粒度的Tenant,例如“test_tenant”。
    图9 创建Tenants
  3. 在“test_tenant”下创建本部门支持访问的index_pattern、Dashboards信息。
  4. “Security”中选择“Roles”,单击test用户对应的角色“Role1”,在“Tenant Permissions”页签,给“Role1”分配“test_tenant”。
  5. 保存后使用test用户访问集群,确认能否访问test_tenant空间内容。

创建用户

给安全集群添加一个新用户“test”。

  1. 登录成功后,在Kibana操作界面的左侧导航栏选择“Security”,进入“Security”页面。
    图10 进入Security页面
  2. 选择“Authentication Backends”>“Internal Users Database”,进入创建用户页面。
  3. “Internal Users Database”页面,单击“+”,进入添加用户信息页面。
    图11 添加用户(2)
  4. 在创建用户页面,输入“Username”“Password”“Repeatpassword”,单击“Submit”

    此处以用户名“test”为例。创建成功后,可以在列表中看到新创建的用户。