SearchGuard权限配置

主要配置文件

searchguard 主要有5个配置文件,在plugins/search-guard-2/sgconfig 下:
1、sg_config.yml:主配置文件不需要做改动。
2、sg_internal_users.yml:本地用户文件,定义用户密码以及对应的权限。
3、sg_roles.yml:权限配置文件
4、sg_roles_mapping.yml:定义用户的映射关系
5、sg_action_groups.yml:定义权限

使用sgadmin配置SearchGuard

Searchguard配置(包括用户、权限与角色)是存储在Elasticsearch集群的索引中的。这允许配置热加载,更新配置后不需要重启Elasticsearch节点,并且不需要在每个节点上放置配置文件。
使用sgadmin工具将配置文件中的配置信息加载到searchguard配置索引中。sgadmin需要通过管理员证书来执行命令。管理员证书授予对集群的完全访问权限,包括更改Search Guard配置索引。
需要在elasticsearch.yml中配置管理员证书DN,如:

searchguard.authcz.admin_dn:
  - CN=kirk,OU=client,O=client,L=test, C=DE
  - CN=spock,OU=client,O=client,L=test, C=DE

注意:不要使用节点证书作为管理员证书,不然可能导致意外的结果。
使用命令如下:

./sgadmin.sh -ts <path/to/truststore> -tspass <truststore password>  \
  -ks <path/to/keystore> -kspass <keystore password>  \
  -cd ../sgconfig -icl -nhnv

这样将sgconfig目录中的所有配置信息推送到集群。由于生成密钥库和信任库具有默认密码changeit,所以我们可以省略-kspass并-tspass。
让配置立即生效
searchguard默认将通过身份认证的用户、角色及权限缓存一个小时,若更新配置后想立即生效,可使用如下命令:

./sgadmin.sh -rl -ts ... -tspass ... -ks ... -kspass ...

命令行详细参数请参考:http://floragunncom.github.io/search-guard-docs/sgadmin.html

配置认证和授权

searchguard配有可插拔的认证和授权模块。根据用例和基础架构,您可以使用一个或多个身份验证和授权模块,如:
Search Guard内部用户数据库
LDAP和Active Directory
Kerberos
JSON Web令牌
代理验证
认证和授权模块的主要配置文件是sg_config.yml。详细配置请参考:http://floragunncom.github.io/search-guard-docs/configuration_auth.html

配置内部用户与角色

searchguard配置有内部用户数据库。如果我们没有任何外部认证系统(如LDAP或Active Directory),则可以使用此用户数据库。用户、密码hash和角色等存储在集群内部searchguard配置索引中。内部用户配置文件为:sg_internal_users.yml
语法如下:

<username>:
  hash: <hashed password>
  roles:
    - <rolename>
    - <rolename>

如:

admin:
  hash: $2a$12$xZOcnwYPYQ3zIadnlQIJ0eNhX1ngwMkTN.oMwkKxoGvDVPn4/6XtO
  roles:
    - readall
    - writeall

analyst:
  hash: $2a$12$ae4ycwzwvLtZxwZ82RmiEunBbIPiAmGZduBAjKN0TXdwQFtCwARz2
  roles:
    - readall

请注意,用户名不能包含“.”,如果需要带“.”的用户名,请使用如下username属性:

<username>:
  username: username.with.dots
  hash: ...

使用plugins/search-guard-5/tools/hash.sh生成密码hash值,格式如下:

./hash.sh -p passwd

实例:

[root@localhost tools]$ ./hash.sh -p 123456
$2a$12$BUflGkOD5bpHePu1uTTTh.wXYJ8fLRku05zFqDHdglNgqekNWITK2

详细参考:http://floragunncom.github.io/search-guard-docs/configuration_internalusers.html

将用户、后端角色与主机映射到searchguard角色

根据配置,可以使用以下数据将请求分配给一个或多个searchguard角色:
username
已验证用户的名称
backend roles
由授权后端(如LDAP,JWT或内部用户数据库)获取的角色
hostname / IP
请求源自的主机名或IP
Common name
发送的客户端证书DN
配置文件为sg_roles_mapping.yml,配置格式如下:

<Search Guard role name>:
  users:
    - <username>
    - ...
  backendroles:
    - <rolename>
    - ...
  hosts:
    - <hostname>
    - ...

实例:

sg_read_write:
  users:
    - janedoe
    - johndoe
  backendroles:
    - management
    - operations
    - 'cn=ldaprole,ou=groups,dc=example,dc=com'
  hosts:
    - "*.devops.company.com"

一个请求可以分配给一个或多个Search Guard角色。如果一个请求被映射到多个角色,这些角色的权限被组合。

角色与权限

searchguard角色与权限在sg_roles.xml文件中定义。我们可以根据需要定义角色,并将权限与其关联,格式如下:

<sg_role_name>:
  cluster:
    - '<action group or single permission>'
    - ...
  indices:
    '<indexname or alias>':
      '<document type>':  
        - '<action group or single permission>'
        - ...
      '<document type>':  
        - '<action group or single permission>'
        - ...
      _dls_: '<Document level security query>'
      _fls_:
        - '<field level security fiels>'
        - ...
    tenants:
      <tenantname>: <RW|RO>
      <tenantname>: <RW|RO>   

dlsfls用于配置文档和字段级别权限,详情参考:http://floragunncom.github.io/search-guard-docs/dlsfls.html
tenants用于配置Kibana多租户模式,详情参考:http://floragunncom.github.io/search-guard-docs/multitenancy.html
集群级权限
cluster用于定义集群级权限。集群级权限用于允许/不允许影响整个集群的操作,例如查询集群运行状况或节点统计信息。它也可以用来允许/禁用影响多个索引的操作,如mget、msearch、bulk请求。
实例:

sg_finance:
  cluster:
    - CLUSTER_COMPOSITE_OPS_RO
  indices:
    ...

索引级权限
indices项用于设置允许/不允许单个索引的操作。也可以分别为索引中的每个文档类型定义权限。
配置索引名称与文档类型名称时都支持通配符的形式:

  1. 星号(*)将匹配任意字符序列,包括空序列,如:logstash-*将匹配logstash-20170822、logstash-等
  2. 问号(?)将匹配任何单个字符(但不是空字符),如:?kibana将匹配.kibana
  3. 正则表达式,格式'/<java regex>/',如:'/ \ S * /'将匹配任何非空格字符
    注意:索引名称不能包含点。而是使用?通配符,如同?kibana。
    实例:
sg_kibana:
  cluster:
    - CLUSTER_COMPOSITE_OPS_RO    
  indices:
    '?kibana':
      '*':
        - INDICES_ALL

用户名替换
对于索引名及别名<indexname or alias>允许引用用户名${user_name},用户名为已认证用户用户名。实例:

sg_own_index:
  cluster:
    - CLUSTER_COMPOSITE_OPS
  indices:
    '${user_name}':
      '*':
        - INDICES_ALL

使用权限组分配权限
searchguard具有权限组的功能,且为给角色分配权限的首选方式。searchguard预定义了一批权限组,覆盖了绝大部分用例。实例:

myrole:
  cluster:
    - CLUSTER_COMPOSITE_OPS_RO    
  indices:
    'index1':
      '*':
        - SEARCH
    'index2':
      '*':
        - CRUD

使用单一权限
如果您需要应用更细粒度的权限模式,searchguard还支持为角色分配单个权限。
单一权限以cluster:或indices:开始,后跟REST风格的路径,进一步定义权限授权访问的确切操作。
例如,此权限将授予在索引上执行搜索的权限:

indices:data/read/search

如下限授予写入索引的权限:

indices:data/write/index

如下在集群上授予显示集群运行状况的权限:

cluster:monitor/health

单一权限也支持通配符,如下授予索引上所有管理操作权限:

indices:admin/*

Elasticsearch详细权限定义请参考:https://www.elastic.co/guide/en/shield/2.1/reference.html#ref-actions-list
预定义角色请参考:http://floragunncom.github.io/search-guard-docs/configuration_roles_permissions.html

使用与定义权限组

一个权限组是一个具有明确命名的权限集合,在文件sg_action_group.xml中定义。权限组可以嵌套定义。格式如下:

<action group name>:
    - '<permission or action groups>'
    - '<permission or action group>'
    - ...

预定义权限组请参考:http://floragunncom.github.io/search-guard-docs/configuration_action_groups.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容