资讯专栏INFORMATION COLUMN

剖析zookeeper中间件的安全机制

IT那活儿 / 2235人阅读
剖析zookeeper中间件的安全机制

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

zookeeper简介

zookeeper是一个基于paxos算法实现的高可用的的分布式数据管理与系统协调服务。

常用于数据发布和订阅、负载均衡、分布式协调、集群管理与Master选举、分布式锁、分布式队列等场景中,保证分布式应用场景中数据的强一致性。

什么情况下使用zookeeper认证机制呢

zookeeper作为分布式架构中的一个重要中间件,通常会在其上面以节点的方式存储数据,默认情况下,所有应用都可以在zk读写任何节点,在复杂且对数据敏感性的应用中,这显然不安全,所以此时我们可以对zk做一些安全策略设置,可以使用以下几种手段。

  • 修改zk 默认端口,使用其它端口服务;
  • 限制访问来源地址;
  • 添加访问控制;
  • 不要将 zk 暴露在外网;
  • 设置 zk 用户认证和 ACL。

如何使用zookeeper安全机制

1. 对zk做一些初始安全配置
通常部署完zk服务后,我们可以做一些初始化安全加固配置。
1.1 修改zk的默认端口2181为其它服务端口,减少随意的网络端口扫描;只配置必要的参数项。
1.2 其次限制访问zk的客户端访问源,通过配置主机防火墙策略,只允许指定的客户来源IP访问来zk的端口服务,其它网络连接一律拒绝。
Redhat/Centos 6/7:
iptables -I INPUT 1 -p tcp -m iprange --src-range 135.50.xxx13-135.50.xxx.16 --dport 2181 -j ACCEPT
iptables -I INPUT 2 -p tcp -s 135.10.xxx.155 --dport 2181 -j ACCEPT
iptables -I INPUT 3 -p tcp -s 192.168.xxx.112 --dport 2181 -j ACCEPT
iptables -I INPUT 4 -p tcp -s 192.168.xxx.113 --dport 2181 -j ACCEPT
iptables -I INPUT 5 -p tcp -s 192.168.xxx.114 --dport 2181 -j ACCEPT
iptables -I INPUT 6 -p tcp -s 127.0.0.1 --dport 2181 -j ACCEPT
iptables -I INPUT 7 -p tcp --dport 2181 -j DROP
1.3 避免将zk服务端口暴露在外网,避免公网恶意的频繁连接。
2. zk设置访问指定IP访问数据节点
这种方式又称IP权限模式,设置指定的ip访问zk。
2.1 登录zk
zkCli.sh -server 192.168.XXX.112:2181
2.2 查看权限
[zk: 192.168.XXX.114:2181(CONNECTED) 0] getAcl /
world,anyone #表示任何人都可以访问
: cdrwa
2.3 添加可访问IP
注意:
添加本机的ip地址,以便进行修改,这里遇到一个坑:
添加一个ip地址后会覆盖之前添加的ip地址,结果把我的本即的ip覆盖了,修改可访问ip后我自己再次修改的时候无法修改认证失败!只能重装了。
[zk: 192.168.XXX.114:2181(CONNECTED) 1] setAcl / 
ip:192.168.XXX.112:cdrwa,ip:192.168.XXX.114:cdrwa,ip:192.168.XXX.115:cdrwa
2.4 查看是否正常添加
getAcl /
此时如果使用localhost登录zk,虽然未授权也可以连接,但是查看节点时会报错KeeperErrorCode = NoAuth for /,所以此时要从已添加的可访问IP才能正常的访问zk。
3. 配置zk访问控制列表
3.1 zk ACL访问控制规则原理

zk可以使用ACL访问控制列表来对节点的权限进行控制, 它与UNIX 文件访问权限非常相似,zk的节点类比文件,客户端可以删除节点、创建节点、修改节点:它使用权限位来允许/禁止对节点的各种操作以及这些位适用的范围。

ACL 指定一组 id 和与这些 id 关联的权限。acl权限控制使用scheme/id/permission来标志,主要包括三个方面

  • ·scheme     #权限模式
  • ·id:       #权限对象
  • ·permission   #权限类型
zk ACL访问控制流程图:

zookeeper acl的特性:

  • zookeeper的权限控制是基于znode节点的,需要对每个节点设置权限。
  • 每个znode支持设置多种权限控制方案和多个权限。
  • 子节点不会继承父节点的权限。客户端无法访问某个节点,但是可以访问他的子节点
常用的授权acl规则的命令:

命令

用法

描述

getAcl

getAcl path

读取节点的ACL

setAcl

setAcl path acl

设置节点的ACL

create

create path data acl

创建节点时设置acl

addAuth

addAuth scheme auth

添加认证用户,类似于登录操作


3.2 使用zk ACL访问控制规则

1)world权限模式
world权限模式只有一种设置模式。就是 setAcl world:anyone:[r][w][c][d][a]
其中id:为固定的anyone,表示任何用户。
示例:
设置所有人对节点具有读写删除及创建子节点的权限:
[zk: localhost:2181(CONNECTED) 1] setAcl /chg1 world:anyone:rwdc
2)IP模式
该模式使用的acl方式是 ip:192.168.XXX.12:[a][d][c][w][r]
示例:
设置只有ip为192.168.XXX.112/114/115的客户端连接才能进行adc操作,其他ip啥操作都做不了。因为图中设置ACL的客户端不是这个ip,所以设置了后,他就失去对该节点的权限了,所以getAcl命令会没有权限。
[zk: localhost:2181(CONNECTED) 0] setAcl / ip:192.168.XXX.112:cdrwa,ip:192.168.XXX.114:cdrwa,ip:192.168.XXX.115:cdrwa
设置以后尝试读取/node1节点将是没有权限 Authentication is not valid,需使用192.168.XXX.112/114/115登录查看。
[root@master2 ~]# zkCli.sh  -server 192.168.XXX.112:2181
3)设置auth方式的身份认证机制
  • 增加一个授权认证用户
[zk: 192.168.XXX.112:2181(CONNECTED) 11] addauth digest chg2:123456
  • 设置权限
[zk: 192.168.XXX.112:2181(CONNECTED) 11] setAcl /chg2 auth:chg2:cdrwa
kEX71…是账号chg2 和密码123456 经过sha1和base64加密后的密文密码。
把客户端quit退出重新连接后:
失去了对该节点的权限。需要使用addauth命令添加授权才行。类似登录之后才能对该节点有权限。
[zk: 192.168.XXX.112:2181(CONNECTED) 0] addauth digest chg2:123456
总 结
生产环境中为zk配置安全策略可有效的保证数据的安全性,为指定的节点指定访问访问IP以及配置身份验证机制可防止误删数据的可能性,保障某些敏感数据的私密性,但是需要客户端程序更改代码,增加开发的复杂度。


本文作者:陈洪刚(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129131.html

相关文章

  • Elasticsearch分布式一致性原理剖析(一)-节点篇

    摘要:摘要目前是最流行的开源分布式搜索引擎系统,其使用作为单机存储引擎并提供强大的搜索查询能力。前言分布式一致性原理剖析系列将会对的分布式一致性原理进行详细的剖析,介绍其实现方式原理以及其存在的问题等基于版本。相当于一次正常情况的新节点加入。 摘要: ES目前是最流行的开源分布式搜索引擎系统,其使用Lucene作为单机存储引擎并提供强大的搜索查询能力。学习其搜索原理,则必须了解Lucene,...

    genedna 评论0 收藏0
  • Elasticsearch分布式一致性原理剖析(一)-节点篇

    摘要:摘要目前是最流行的开源分布式搜索引擎系统,其使用作为单机存储引擎并提供强大的搜索查询能力。前言分布式一致性原理剖析系列将会对的分布式一致性原理进行详细的剖析,介绍其实现方式原理以及其存在的问题等基于版本。相当于一次正常情况的新节点加入。 摘要: ES目前是最流行的开源分布式搜索引擎系统,其使用Lucene作为单机存储引擎并提供强大的搜索查询能力。学习其搜索原理,则必须了解Lucene,...

    lindroid 评论0 收藏0
  • 高并发

    摘要:表示的是两个,当其中任意一个计算完并发编程之是线程安全并且高效的,在并发编程中经常可见它的使用,在开始分析它的高并发实现机制前,先讲讲废话,看看它是如何被引入的。电商秒杀和抢购,是两个比较典型的互联网高并发场景。 干货:深度剖析分布式搜索引擎设计 分布式,高可用,和机器学习一样,最近几年被提及得最多的名词,听名字多牛逼,来,我们一步一步来击破前两个名词,今天我们首先来说说分布式。 探究...

    supernavy 评论0 收藏0
  • 高并发

    摘要:表示的是两个,当其中任意一个计算完并发编程之是线程安全并且高效的,在并发编程中经常可见它的使用,在开始分析它的高并发实现机制前,先讲讲废话,看看它是如何被引入的。电商秒杀和抢购,是两个比较典型的互联网高并发场景。 干货:深度剖析分布式搜索引擎设计 分布式,高可用,和机器学习一样,最近几年被提及得最多的名词,听名字多牛逼,来,我们一步一步来击破前两个名词,今天我们首先来说说分布式。 探究...

    ddongjian0000 评论0 收藏0
  • 高并发

    摘要:表示的是两个,当其中任意一个计算完并发编程之是线程安全并且高效的,在并发编程中经常可见它的使用,在开始分析它的高并发实现机制前,先讲讲废话,看看它是如何被引入的。电商秒杀和抢购,是两个比较典型的互联网高并发场景。 干货:深度剖析分布式搜索引擎设计 分布式,高可用,和机器学习一样,最近几年被提及得最多的名词,听名字多牛逼,来,我们一步一步来击破前两个名词,今天我们首先来说说分布式。 探究...

    wangdai 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<