亚马逊AWS官方博客
EMR与外部KDC集成进行身份认证
前言
安全始终是亚马逊云科技的头号工作,也是Aamzon EMR这项托管Hadoop服务的首要原则。很多客户越来越意识到安全的重要性,尤其数据安全的重要性,在客户进行全球化业务扩展的时候,面对各国家区域的合规要求,更多采用Kerberos在EMR上进行身份验证。但是很多hadoop用户第一次尝试集成EMR和Kerberos时,尤其面对安全审计部门要求而初次使用EMR与外部Kerberos进行集成时,往往由于对Kerberos本身不熟悉,对EMR不熟悉,导致配置错误而无法集成,本文提供了步骤指南,帮助用户在亚马逊云上从头构建的关键步骤包括,创建Kerberos并集成EMR和LDAP。
在《Amazon EMR迁移指南》中更多的是对EMR上可配置Kerberos集成方式的选项及配置后各个组件与KDC的交互认证流程的说明,本博客是针对EMR与外部KDC(非EMR自带KDC或单向信任的KDC)集成业务场景的具体实现,这部分在AWS官方的文档里没有具体的说明,且自建外部KDC需要符合特定的条件及账号规范,否则其配置集成的EMR无法成功创建和启动
Kerberos简介
Amazon EMR 发行版 5.10.0 及更高版本支持 Kerberos。Kerberos 是 Amazon EMR 可支持的最安全的身份验证和授权机制。Kerberos 会要求用户提供自己的凭据,并从中央身份验证服务器获取证明用户身份的票证,随后该票证即可用于为集群中的资源分配访问。这是麻省理工学院 (MIT) 创建的一种网络身份验证协议。Kerberos 使用私有密钥加密来提供强大的身份验证,以便不会通过网络以未加密的格式发送密码或其他凭证。
在 Kerberos 中,需要进行身份验证的服务和用户称为委托人(principals.)。委托人存在于 Kerberos 领域(realm)中。在该领域中,被称为密钥分发中心 (KDC) 的 Kerberos服务器为委托人提供身份验证方法。KDC通过颁发用于身份验证的票证来执行此操作。KDC 维护一个包含其领域中的委托人、它们的密码及其他有关每个委托人的管理信息的数据库。KDC 还可以接受来自其他领域中的委托人的身份验证凭证,这称为跨领域信任。此外,EMR 集群可以使用外部 KDC 对委托人进行身份验证。
EMR与Kerberos集成方式
应用程序之间的身份验证推荐使用 Kerberos 方式。在使用 Kerberos 身份验证时,应用程序会向密钥分发中心(KDC)验证自身身份以及连接到自己的其他应用程序。为 EMR 集群使 用 Kerberos 时有三个选项:集群专用 KDC、跨领域信任以及外部 KDC。每种选项的差异请 参阅多种架构选择,本文将在EC2上创建一个外部麻省理工学院KDC(MIT KDC),同时创建一个EMR集群并使用MIT KDC服务器中定义和维护的委托人进行配置。
在EC2上搭建外部KDC
1:通过Amazon Linux 2 AMI 镜像,并按默认配置启动EC2,安装Kerberos安装包。注意该EC2所在子网可以与稍后创建的EMR集群网络互通。如果安装在私有子网,请确保有跳转机可以访问到该机器。
$ sudo yum install -y krb5-server krb5-libs krb5-auth-dialog
2:配置kdc.conf,将默认的EXAMPLE.COM更改为客户化域名(本文命名为EXTKDC.COM)。注意域名一定要大写
$ sudo cat /var/kerberos/krb5kdc/kdc.conf
3:修改krb5.conf,如以下配置,将default_realm以及[realms]中的默认注释去掉,同时修改为自己的KDC域名,并在[realms]中指定KDC服务器私有IP地址
$ sudo vi /etc/krb5.conf
4:创建/初始化Kerberos database
$ sudo /usr/sbin/kdb5_util create -s -r EXTKDC.COM4
:创建/初始化Kerberos database
检查数据库是否创建成功
ll /var/kerberos/krb5kdc
5:为database administrator设置ACL权限
$ sudo vi /var/kerberos/krb5kdc/kadm5.acl
的内容编辑为
*/admin@EXTKDC.COM *
以便允许所有远程kadmin/admin的管理员操作,否则EMR puppy安装Kerberos client的时候无法create各个组件的principal
6:添加database administrator
$ sudo /usr/sbin/kadmin.local -q "addprinc admin/admin"
$ sudo Kadmin.local
>listprincs
检查是否委托人创建成功
7:修改kadmin密码,该修改后的密码将用于EMR集群集成时使用
>cpw kadmin/admin
退出
注意该步骤中创建的admin账密需要与EMR安全策略中配置的admin密码一致
8:启动Kerberos daemons
systemctl start krb5kdc
systemctl start kadmin
【optional步骤】:LDAP集成
企业客户通常会将系统账号统一存储在LDAP中,该步骤为自建LDAP与Kerberos集成的方案
1:安装open LDAP
yum install libdb-cxx libdb-cxx-devel gcc-plugin-devel -y
yum install libtool-ltdl-devel -y
2:加载并启动LDAP服务
/usr/local/sbin/slapadd -n 0 -F /usr/local/etc/openldap -l /usr/local/etc/openldap/slapd.ldif
/usr/local/libexec/slapd -F /usr/local/etc/openldap
3:创建RootDN及BaseDN对象(该对象为Kerberos连接LDAP的根dn)
4:更改完毕重启slapd服务
ps -aux | grep slapd
kill -9 $PID
5:加载ldap schema,以便与Kerberos集成
/usr/local/libexec/slapd -F /usr/local/etc/openldap
ldapadd -x -D “cn=config” -w 123456 -f /root/ldap/cn=kerberos.ldif
6:更新Kerberos的server端配置,增加database_module及ldapconf的相关配置
创建EMR并集成外部KDC
- 在EMR服务的安全配置中心中创建名为extkdctest的安全配置,并设置外部kdc的地址
- 通过高级配置创建EMR集群,本文选择3.0版本,其他配置保持默认
- 在硬件配置中的网络配置中,选择和外部KDC可以联通的子网,并确定KDC server所在EC2的安全组中允许该网络访问
- 在安全性页面中,除了设置EC2键对外,在安全设置中选项刚才设置的安全配置,输入域名并输入我们在外部KDC更改kadmin后的密码。其他默认选择,并进行集群创建
总结
本文介绍了EMR集成外部KDC的原理以及说明了如何一步步操作集成外部KDC,包括在操作过程中的注意事项,对于第一次创建EMR并集成外部KDC的用户,可以清晰的了解集成过程,并快速实现原型搭建。