open distro for elasticsearch 是由亚马逊AWS支持的基于Apache License,Version 2.0协议的100%开源的Elasticsearch发行版。与Elastic公司官方的Elasticsearch版本最大的区别是:剔除了基于elastic协议发布的xpack插件,增加了开源插件。新增插件功能包括安全、告警、索引生命周期管理、性能分析、SQL等企业级功能。简单理解就是集成了开源版xpack插件的elasticsearch。
在通过用户认证后,open_distro_security插件需要一系列机制进行用户授权,来验证用户可以执行哪些操作,不允许执行哪些操作。open_distro_security也提供了RBAC(基于角色的访问控制),简单来说就是:先创建角色,角色拥有一系列权限,再把角色赋予用户,最后计算得出某个用户具体拥有哪些权限。关于用户角色映射(map users to roles)的理解:一般情况下,创建用户后,给用户赋予角色。但是在open_distro_security插件中这个过程是相反的,是创建角色后,把角色和用户关联映射起来。
概念
被保护资源
被保护的资源分为两个类:集群和索引,被保护(访问控制的对象)可以是某个索引的数据,也可以是某个API。
权限(permission)
可以在某个被保护资源上执行的操作,详细权限列表参见文档
通常情况下,不建议直接给用户赋予权限,而应该给用户添加动作组。
动作组(Action Group)
单个权限的控制粒度太细了,一组相关权限的组合就称为“动作组”。创建新组的最佳实践是:在已有的组上,赋予新的权限,而不是创建一个全新的组。默认的动作组有:
角色(Role)
在角色中需定义名称、集群权限(集群动作组)、要保护的索引、索引权限(索引动作组)、文档级控制权限、字段级控制权限。插件默认有一些初始化好的角色,如:
all_access
readall
kibana_server
在open_distro security的安全插件中可以通过三种方式打到授权的目的:
通过配置文件管理
在$ES_HOME/plugins/opendistro_security/securityconfig 目录中的roles.yml和roles_mapping.yml,并用/plugins/opendistro_security/tools/securityadmin.sh 完成初始化。
通过kibana图形化界面
使用opendistroforelasticsearch 版本的kibana 管理工具,Security模块进行Users、Roles、RoleMapping的管理工作
通过Restful API接口
配置文件的方式适合系统第一次安装后的初始化场景,kibana图形化界面适用临时运维管理。只有Restful API接口适合软件研发过程中的管理工作,且能以脚本的形式归档和统一分发执行。所以详细介绍一下通过API命令
创建角色
PUT _opendistro/_security/api/roles/test_role2
{
"cluster_permissions":["cluster_composite_ops","indices_monitor"],
"index_permissions":[
{
"index_patterns":["test*"],
"allowed_actions":[
"read","write"
]
}
],
"tenant_permissions":[]
}
删除角色
DELETE _opendistro/_security/api/roles/test_role2
获取角色
GET _opendistro/_security/api/roles/