创建Elasticsearch集群用户并授权使用
CSS服务会对开启安全模式的集群进行访问控制,只有通过身份认证的用户才能访问安全集群。在创建安全集群时,必须配置一个管理员账号。该管理员能够使用Kibana为集群添加新用户,并授予相应的安全集群使用权限。本文将以7.6.2版本的Kibana为例,指导如何使用Kibana为安全集群配置用户授权。
背景信息
云搜索服务用opendistro_security安全插件对外提供安全集群能力,opendistro_security安全插件是基于RBAC(Role-Based Access Control)模型构建。RBAC包括三个重要核心概念:用户(User)、权限(Action)、角色(Role)。RBAC简化了用户和权限的关系,降低了权限管理的难度,方便权限扩展易于维护。三者之前的关系如图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版本作为示例。
创建用户并授权
- 登录云搜索服务控制台。
- 在集群管理列表,选择对应集群,单击操作列的“Kibana”。
- 使用管理员账号登录Kibana页面。
- 账户名:admin(默认管理员账户名)
- 密码:创建安全模式的集群时,设置的管理员密码。
- 登录成功后,在Kibana操作界面的左侧导航栏选择“Security”,进入“Security”页面。
- 给安全集群添加一个新用户“test”。
- 选择“Authentication Backends”>“Internal Users Database”,进入创建用户页面。
- 在“Internal Users Database”页面,单击“+”,进入添加用户信息页面。
图2 添加用户
- 在创建用户页面,输入“Username”、“Password”和“Repeatpassword”,单击“Submit”。
此处以用户名“test”为例。创建成功后,可以在列表中看到新创建的用户。
- 创建角色“role_test”,并为角色授权。
- 在“Security”中选择“Roles”,进入Open Distro Security Roles页面。
- 在Open Distro Security Roles页面,单击“+”添加角色权限。
- 在Overview页签设置角色名“Role name”,例如“role_test”。
图3 添加角色名称
- 在“Cluster Permissions”页签设置集群权限。根据业务需要选择相应的集群权限,不配置时表示角色不具有任何集群级别的权限。
- “Permissions: Action Groups”:单击“Add Action Group”,可以设置集群权限。例如,集群只读权限选择read,表示仅可查看集群状态、集群节点等信息。
- “Permissions: Single Permissions”:勾选Show Advanced后,单击“Add Single Permission”可以针对集群设置更精细的权限。例如设置为“indices:data/read”,表示仅指定索引的读取权限。
图4 Cluster Permissions页面
- 在“Index Permissions”页面设置索引权限。
- “Index patterns”:单击“Add index permissions”配置为需要设置权限的索引名称,例如,索引模板名称为“my_store”。
建议索引名称和创建的用户名不要相同。
- “Permissions: Action Groups”:单击“Add Action Group”,根据需要开通的权限设置。例如,只读权限选择“Search”。
- “Index patterns”:单击“Add index permissions”配置为需要设置权限的索引名称,例如,索引模板名称为“my_store”。
- “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页面
- 单击“Save Role Definition”,保存角色设置,即可看到设置的角色。
- 将角色映射到用户,使用户具有角色的权限。
- 在“Security”中选择“Role Mappings”,进入Role Mappings页面,进行角色映射。
- 在Role Mappings页面,单击“+”,选择角色“Role”,添加用户“Users”。
- “Role”:选择待映射的角色名称,例如“role_test”。
- “Users”:单击“Add User”,选择被映射角色的用户名称,例如“test”。
图6 用户和角色映射
- 添加完成后,单击“Submit”。
- 配置完成后,可以使用“test”用户登录Kibana,验证用户权限是否生效。
典型示例:通过管理员账户给用户分配Kibana的访问权限
- 使用管理员账户admin登录安全集群。
- 在“Security”中选择“Roles”,进入Open Distro Security Roles页面。
- 在“Open Distro Security Roles”页面,单击“+”添加角色权限。
- 在“Overview”页签,设置角色名。例如“kibana_user”。
- 在“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页面
- 单击“Save Role Definition”,保存角色设置,即可看到设置的角色“kibana_user”。
- 在Security中选择“Role Mappings”,进入Role Mappings页面。
- 在“Role Mappings”页面,单击“+”添加用户“test”和角色“kibana_user”映射。
- 添加完成后,单击“Submit”。
配置完成后,“test”用户即可拥有Kibana的读写权限。
典型示例:通过管理员账户给用户分配指定索引“index*”的Read权限
- 使用管理员账户admin登录安全集群。
- 在“Security”中选择“Roles”,进入Open Distro Security Roles页面。
- 在“Open Distro Security Roles”页面,单击“+”添加角色权限。
- 在“Overview”页签,设置角色名。例如“Role1”。
- 在“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”等。
- 单击“Save Role Definition”,保存角色设置,即可看到设置的角色“Role1”。
- 在Security中选择“Role Mappings”,进入Role Mappings页面。
- 在“Role Mappings”页面,单击“+”添加用户“test”和角色“Role1”映射。
- 添加完成后,单击“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等信息的访问权限。
- 使用管理员账户admin在集群的Global Tenant中创建index_pattern和Dashboards。
- 在“Security”中选择“Tenants”。单击“+”建立以部门为粒度的Tenant,例如“test_tenant”。
图9 创建Tenants
- 在“test_tenant”下创建本部门支持访问的index_pattern、Dashboards信息。
- 在“Security”中选择“Roles”,单击test用户对应的角色“Role1”,在“Tenant Permissions”页签,给“Role1”分配“test_tenant”。
- 保存后使用test用户访问集群,确认能否访问test_tenant空间内容。
创建用户
给安全集群添加一个新用户“test”。
- 登录成功后,在Kibana操作界面的左侧导航栏选择“Security”,进入“Security”页面。
图10 进入Security页面
- 选择“Authentication Backends”>“Internal Users Database”,进入创建用户页面。
- 在“Internal Users Database”页面,单击“+”,进入添加用户信息页面。
图11 添加用户(2)
- 在创建用户页面,输入“Username”、“Password”和“Repeatpassword”,单击“Submit”。
此处以用户名“test”为例。创建成功后,可以在列表中看到新创建的用户。