CDH提供了加密机制来保护持久保存在磁盘或其他存储介质上的数据(以及在网络上移动时的数据)。
保护静止数据通常意味着对存储在磁盘上的数据进行加密,并允许授权用户和进程在手头的应用程序或任务需要时解密数据。对于静态数据加密,必须分发和管理加密密钥,应定期旋转或更改密钥,并且许多其他因素使该过程复杂化。
Cloudera Navigator Key Trustee Server
使用的企业级密钥存储和管理系统,它将加密密钥与数据分离,从而确保即使未经授权的用户访问存储介质,数据也受到保护。它使您的集群能够满足最严格的数据安全规定。此外,Navigator密钥托管服务器可以与硬件安全模块(HSM)集成,为密钥提供最高级别的安全性。
Navigator HSM KMS backed by Thales HSM
Navigator HSM KMS backed by Luna HSM
(上面三个需要认证证书,我不用)
基于文件且受密码保护的 Java KeyStore
使用Java keytool库进行加密
!!!注意:这里特别说明一下
这部分最好使用ip,不要使用hostname,之前使用的是hostname,导致后面有一步认证过不去,注意一下。
输入密码:EXAMPLECOM
进入后输入
添加管理账号
查看账号
进入KDC
添加管理员账号
查看是否添加成功
进入主页 --> 管理 --> 安全
启用 Kerberos
对应修改配置 ---> 继续
开始配置亲,很高兴为您解答,
Hortonworks Hadoop区别于其他的Hadoop发行版(如Cloudera)的根本就在于,Hortonworks的产品均是百分之百开源。
Cloudera有免费版和企业版,企业版只有试用期。
apache hadoop则是原生的hadoop。
目前在中国流行的是apache hadoop,Cloudera CDH,当然Hortonworks也有用的
Apache Ambari是一个基于web的工具,用于配置、管理和监视Apache Hadoop集群,支持Hadoop HDFS,、Hadoop MapReduce、Hive、HCatalog,、HBase、ZooKeeper、Oozie、Pig和Sqoop。Ambari同样还提供了集群状况仪表盘,比如heatmaps和查看MapReduce、Pig、Hive应用程序的能力,以友好的用户界面对它们的性能特性进行诊断。希望能帮助到您,望采纳!后把hosts文件scp到其他节点scp/etc/hostsroot@big02beicaiedu:/etc/关闭防火墙和SELinux(所有节点)关闭防火墙:serviceiptablesstop(临时关闭)chkconfigiptablesoff(重启后生效)关闭SELINUX:setenforce0(临时生效)修改/etc/selinux/config下的SELINUX=disabled(重启后永久生效)Kafka是由LinkedIn设计的一个高吞吐量、分布式、基于发布订阅模式的消息系统,使用Scala编写,它以可水平扩展、可靠性、异步通信和高吞吐率等特性而被广泛使用。目前越来越多的开源分布式处理系统都支持与Kafka集成,其中Spark Streaming作为后端流引擎配合Kafka作为前端消息系统正成为当前流处理系统的主流架构之一。
然而,当下越来越多的安全漏洞、数据泄露等问题的爆发,安全正成为系统选型不得不考虑的问题,Kafka由于其安全机制的匮乏,也导致其在数据敏感行业的部署存在严重的安全隐患。本文将围绕Kafka,先介绍其整体架构和关键概念,再深入分析其架构之中存在的安全问题,最后分享下Transwarp在Kafka安全性上所做的工作及其使用方法。
Kafka架构与安全
首先,我们来了解下有关Kafka的几个基本概念:
Topic:Kafka把接收的消息按种类划分,每个种类都称之为Topic,由唯一的Topic Name标识。
Producer:向Topic发布消息的进程称为Producer。
Consumer:从Topic订阅消息的进程称为Consumer。
Broker:Kafka集群包含一个或多个服务器,这种服务器被称为Broker。
Kafka的整体架构如下图所示,典型的Kafka集群包含一组发布消息的Producer,一组管理Topic的Broker,和一组订阅消息的Consumer。Topic可以有多个分区,每个分区只存储于一个Broker。Producer可以按照一定的策略将消息划分给指定的分区,如简单的轮询各个分区或者按照特定字段的Hash值指定分区。Broker需要通过ZooKeeper记录集群的所有Broker、选举分区的Leader,记录Consumer的消费消息的偏移量,以及在Consumer Group发生变化时进行relalance Broker接收和发送消息是被动的:由Producer主动发送消息,Consumer主动拉取消息。
然而,分析Kafka框架,我们会发现以下严重的安全问题:
1网络中的任何一台主机,都可以通过启动Broker进程而加入Kafka集群,能够接收Producer的消息,能够篡改消息并发送给Consumer。
2网络中的任何一台主机,都可以启动恶意的Producer/Consumer连接到Broker,发送非法消息或拉取隐私消息数据。
3Broker不支持连接到启用Kerberos认证的ZooKeeper集群,没有对存放在ZooKeeper上的数据设置权限。任意用户都能够直接访问ZooKeeper集群,对这些数据进行修改或删除。
4Kafka中的Topic不支持设置访问控制列表,任意连接到Kafka集群的Consumer(或Producer)都能对任意Topic读取(或发送)消息。
随着Kafka应用场景越来越广泛,特别是一些数据隐私程度较高的领域(如道路交通的视频监控),上述安全问题的存在犹如一颗定时炸d,一旦内网被黑客入侵或者内部出现恶意用户,所有的隐私数据(如车辆出行记录)都能够轻易地被窃取,而无需攻破Broker所在的服务器。
Kafka安全设计
基于上述分析,Transwarp从以下两个方面增强Kafka的安全性:
身份认证(Authentication):设计并实现了基于Kerberos和基于IP的两种身份认证机制。前者为强身份认证,相比于后者具有更好的安全性,后者适用于IP地址可信的网络环境,相比于前者部署更为简便。
权限控制(Authorization):设计并实现了Topic级别的权限模型。Topic的权限分为READ(从Topic拉取数据)、WRITE(向Topic中生产数据)、CREATE(创建Topic)和DELETE(删除Topic)。
基于Kerberos的身份机制如下图所示:
Broker启动时,需要使用配置文件中的身份和密钥文件向KDC(Kerberos服务器)认证,认证通过则加入Kafka集群,否则报错退出。
Producer(或Consumer)启动后需要经过如下步骤与Broker建立安全的Socket连接:
1Producer向KDC认证身份,通过则得到TGT(票证请求票证),否则报错退出
2Producer使用TGT向KDC请求Kafka服务,KDC验证TGT并向Producer返回SessionKey(会话密钥)和ServiceTicket(服务票证)
3Producer使用SessionKey和ServiceTicket与Broker建立连接,Broker使用自身的密钥解密ServiceTicket,获得与Producer通信的SessionKey,然后使用SessionKey验证Producer的身份,通过则建立连接,否则拒绝连接。
ZooKeeper需要启用Kerberos认证模式,保证Broker或Consumer与其的连接是安全的。
Topic的访问控制列表(ACL)存储于ZooKeeper中,存储节点的路径为/acl/<topic>/<user>,节点数据为R(ead)、W(rite)、C(reate)、D(elete)权限的集合,如/acl/transaction/jack节点的数据为RW,则表示用户jack能够对transaction这个topic进行读和写。
另外,kafka为特权用户,只有kafka用户能够赋予/取消权限。因此,ACL相关的ZooKeeper节点权限为kafka具有所有权限,其他用户不具有任何权限。
构建安全的Kafka服务
首先,我们为Broker启用Kerberos认证模式,配置文件为/etc/kafka/conf/serverproperties,安全相关的参数如下所示:
其中,authentication参数表示认证模式,可选配置项为simple, kerberos和ipaddress,默认为simple。当认证模式为kerberos时,需要额外配置账户属性principal和对应的密钥文件路径keytab
认证模式为ipaddress时,Producer和Consumer创建时不需要做任何改变。而认证模式为kerberos时,需要预先创建好相应的principal和keytab,并使用API进行登录,样例代码如下所示:
public class SecureProducer extends Thread {
private final kafkajavaapiproducerProducer<Integer, String> producer;
private final String topic;
private final Properties props = new Properties();
public SecureProducer(String topic) {
AuthenticationManagersetAuthMethod(“kerberos”);
AuthenticationManagerlogin(“producer1″, “/etc/producer1keytab”);
propsput(“serializerclass”, “kafkaserializerStringEncoder”);
propsput(“metadatabrokerlist”,
“172161190:9092,172161192:9092,172161193:9092″);
// Use random partitioner Don’t need the key type Just set it to Integer
// The message is of type String
producer = new kafkajavaapiproducerProducer<Integer, String>(
new ProducerConfig(props));
thistopic = topic;华为fusioninsight FusionInsight是完全开放的大数据平台,可运行在任意标准的x86服务器上,无需任何专用的硬件或存储,并针对金融、运营商等数据密集型行业的运行维护、应用开发等需求打造了高可靠、高安全、易使用的运行维护系统和全量数据建
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)