前言
数字化转型大背景下,数据作为企业重要的战略资产,其安全的重要性不言而喻。
我们会通过系列文章,来看下大数据生态中安全框架的实现原理与最佳实践,系列文章一共两篇,包含以下章节:
- 大数据生态安全框架概述
- HDFS 认证详解
- HDFS 授权详解
- HIVE 认证详解
- HIVE 授权详解
- 金融行业大数据安全最佳实践
本片文章是上篇,包含上述前三个章节,希望大家喜欢。
1. 大数据生态安全框架概述
数据安全/网络安全领域,有个AAA框架,同样适用于大数据:
- Authentication 认证: 事中:who is trying to access
- Authorization 授权/鉴权: 事前和事中:what resources are allowed to access
- Accounting/Audit/ 审计: 事后:what is being accessed by whom at what time
1.1 Authentication 认证
认证是 AAA 中的第一步,是安全的基础,用户必须证明其身份: The system needs to make sure the person accessing a system is who they say they are. 常见的认证机制有:
- What They Know: 密码或安全问题(password, security questions);
- Who They Are: 指纹或其他生物特征;
- What They Have: Access cards, token (jwt) 在实际应用中,上述认证方法经常被结合起来使用;
1.2 Authorization 授权/鉴权
- Authorization 授权/鉴权,包括事前的授权,事中的鉴权;
- 授权一般需要遵循最小化原则;
- 鉴权确保用户没有访问该用户没有被授权访问的资源;
- 经常使用基于角色的授权与鉴权机制 Role-Based Access Control (RBAC)
1.3 Accounting/Audit 审计
- Accounting/Audit: 审计:记录什么用户在什么时间对什么资源进行了什么访问 (what is being accessed by whom at what time for how long)
- 审计是事后的安全监督措施,可以辅助判断当前的 authenticating 和 authorization 策略是否恰当,是否需要调整,从而形成安全闭环;
- HDFS 在 Audit 上,默认通过log4j在/var/log/Hadoop-hdfs目录下打印了audit日志;
1.4 Encryption 加密
数据安全/网络安全领域,还涉及到 Encryption 加解密,经常接触到到 https, ssh 都用到了加解密算法。
- 加解密的算法,包括对称加密算法和非对称加密算法:DES, AES, RSA(ssh)
- Ssh 底层使用的 RSA加密算法是非对称加密算法;
- 大数据集群中,出于运维方便,经常需要配置 Ssh 免密码登录,此时拷贝给其它机器的是自己的公钥/root/.ssh/id_rsa.pub, /root/.ssh/authorized_keys;
- 加解密包括对静态数据的加解密,和对传输过程中的数据的加解密:data at rest, data in motion/in transit
- 常见的术语有:FDE: full disk encryption, file encryption, End-to-End (e2e) encryption
- HDFS 在 Encryption上,实现了 end-to-end Transparent Encryption, 包含了 at-rest encryption 和 in-transit encryption ,底层通过 KMS(Key Management Server) 服务支持了多个encryption zone;
1.5 总结
- AAA + Encryption 的安全框架,同样适用于大数据。
- 本次分享,我们侧重于Authentication 和 authorization, 不会过多讲述 audit 和 encryption;
- 本此分享,我们侧重于大数据存储框架的安全,主要是 HDFS 和 HIVE;
- 大数据生态中的 authentication 认证,事实上的标准是使用 Kerberos 协议, 我们后文会有详细讲述;
- 大数据生态中的各种存储系统,如HDFS/hive/hbase/zookeeper/kafka等,都支持开启Kerberos安全认证;
- 当大数据集群中的存储系统如HDFS/hive/hbase/zookeeper/kafka等开启了kerberos安全认证后,访问这些存储系统的客户端,包含各种计算引擎如 hive/hbase/spark/flink 的系统服务,和用户编写的各种应用如 spark/hive/flink等,都需要经过 kerberos 认证后才能访问对应的服务(当然还需要 authentication 鉴权!)
2. HDFS 认证详解
HDFS在认证上,支持两种方式,通过参数 hadoop.security.authentication 来进行控制,可选的参数有: simple (no authentication) 和 kerberos,该参数是服务端参数,不能在客户端覆盖!
2.1 HDFS认证详解-hadoop.security.authentication = simple
- 此时用户身份由环境变量或系统参数 HADOOP_USER_NAME 决定,当该环境变量/系统参数不存在时,由当前LINUX登录用户身份决定;
- 所以在没有开启KERBEROS时,我们可以切换到业务用户身份下提交命令,或通过以下方式指定登录用户:
- System.setProperty(UserGroupInformation.HADOOP_USER_NAME, "randomUser");
- Export HADOOP_USER_NAME = randomUser;
2.2 HDFS认证详解-hadoop.security.authentication=kerberos
- Kerberos 是一种计算机网络授权协议(network authentication protocol),用来在非安全网络中,对个人通信以安全的手段进行身份认证;
- Kerberos 协议常见的实现有 MIT kerberos (麻省理工学院开发),ApacheDS (embedded kerberos),freeIPA 等;
kerberos 常见运维操作有:
- 查看kdc服务状态与日志:systemctl status krb5kdc/systemctl status kadmin/journalctl -u krb5kdc
- 查看kerberos配置:/etc/krb5.conf
- Kerberos 底层使用了 tcp与udp协议,主要包括88与749 端口;
- Kerberos 要求所有节点的时钟是同步的,以避免重放攻击 replay attack;
常用的 Kerberos 命令有:
- Klist/klist –kt xx
- Kinit/kinit –kt xxx
- Kdestroy
管理 principal与keytab, 经常使用 Kadmin.local:
- addprinc -randkey xx/delprinc xx/modprinc/getprinc/listprincs
- kadmin.local -q "getprinc liming@TEST.COM" | grep -i life
- xst -norandkey -k dap.keytab dap/uf30-1@CDH.COM
- Cpw/change_password,Ktadd/xst/ktremove
关于 Keytab 和 KRB5CCNAME/Ccache:
- KRB5CCNAME/Ccache: by default is /tmp/krb5cc_0 in linux;
- Kinit –R:you can use kinit -R to renew your tgt when the ticket has not expired and is still within the renewable life, after successful renew, the new KRB5CCNAME,, will be modified;