前言

平安始终是亚马逊云科技的头等工作,也是Amazon EMR这项托管Hadoop服务的首要准则。很多客户越来越意识到平安的重要性,尤其数据安全的重要性,在客户进行全球化业务扩大的时候,面对各国家区域的合规要求,更多采纳Kerberos在EMR上进行身份验证。然而很多hadoop用户第一次尝试集成Amazon EMR和Kerberos时,尤其面对平安审计部门要求而首次应用Amazon EMR与内部Kerberos进行集成时,往往因为对Kerberos自身不相熟,对Amazon EMR不相熟,导致配置谬误而无奈集成,本文提供了步骤指南,帮忙用户在亚马逊云上从头构建的关键步骤包含,创立Kerberos并集成Amazon EMR和LDAP。

在《Amazon EMR迁徙指南》中更多的是对Amazon EMR上可配置Kerberos集成形式的选项及配置后各个组件与KDC的交互认证流程的阐明,本博客是针对Amazon EMR与内部KDC(非Amazon EMR自带KDC或单向信赖的KDC)集成业务场景的具体实现,这部分在亚马逊云科技官网的文档里没有具体的阐明,且自建内部KDC须要合乎特定的条件及账号标准,否则其配置集成的Amazon EMR无奈胜利创立和启动。

Kerberos简介

Amazon EMR发行版 5.10.0 及更高版本反对Kerberos。Kerberos是Amazon EMR可反对的最平安的身份验证和受权机制。Kerberos会要求用户提供本人的凭据,并从地方身份验证服务器获取证实用户身份的票证,随后该票证即可用于为集群中的资源分配拜访。这是麻省理工学院 (MIT) 创立的一种网络身份验证协定。Kerberos应用公有密钥加密来提供弱小的身份验证,以便不会通过网络以未加密的格局发送明码或其余凭证。

在Kerberos中,须要进行身份验证的服务和用户称为委托人(principals.)。委托人存在于 Kerberos畛域(realm)中。在该畛域中,被称为密钥散发核心 (KDC) 的Kerberos服务器为委托人提供身份验证办法。KDC通过颁发用于身份验证的票证来执行此操作。KDC保护一个蕴含其畛域中的委托人、它们的明码及其他无关每个委托人的治理信息的数据库。KDC还能够承受来自其余畛域中的委托人的身份验证凭证,这称为跨畛域信赖。此外,Amazon EMR集群能够应用内部KDC对委托人进行身份验证。

Amazon EMR与Kerberos集成形式

应用程序之间的身份验证举荐应用Kerberos形式。在应用Kerberos身份验证时,应用程序会向密钥散发核心(KDC)验证本身身份以及连贯到本人的其余应用程序。为Amazon  EMR集群应用Kerberos时有三个选项:集群专用KDC、跨畛域信赖以及内部KDC。每种选项的差别请参阅多种架构抉择,本文将在Amazon EC2上创立一个内部麻省理工学院KDC(MIT KDC),同时创立一个Amazon EMR集群并应用MIT KDC服务器中定义和保护的委托人进行配置

在Amazon EC2上搭建内部KDC

在Amazon EC2上搭建内部KDC

1:通过Amazon Linux 2 AMI镜像,并按默认配置启动Amazon EC2,装置Kerberos安装包。留神该Amazon EC2所在子网能够与稍后创立的Amazon 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[kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88[realms] EXTKDC.COM = { #master_key_type = aes256-cts acl_file = /var/kerberos/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal }

*左右滑动查看更多

3:批改krb5.conf,如以下配置,将default_realm以及[realms]中的默认正文去掉,同时批改为本人的KDC域名,并在[realms]中指定KDC服务器公有IP地址。

$ sudo vi /etc/krb5.conf# Configuration snippets may be placed in this directory as wellincludedir /etc/krb5.conf.d/[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log[libdefaults] dns_lookup_realm = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crtdefault_realm = EXTKDC.COM default_ccache_name = KEYRING:persistent:%{uid}[realms] EXTKDC.COM = {  kdc = <KDC ip addr>  admin_server = <KDC ip addr> }[domain_realm]# .example.com = EXAMPLE.COM# example.com = EXAMPLE.COM

*左右滑动查看更多

4:创立/初始化Kerberos database。

$ sudo /usr/sbin/kdb5_util create -s -r EXTKDC.COM4

*左右滑动查看更多

查看数据库是否创立胜利。

ll /var/kerberos/krb5kdc

5:为database administrator设置ACL权限。

$ sudo vi /var/kerberos/krb5kdc/kadm5.acl的内容编辑为*/admin@EXTKDC.COM      *

*左右滑动查看更多

以便容许所有近程kadmin/admin的管理员操作,否则Amazon EMR puppy装置Kerberos client的时候无奈create各个组件的principal。

6:增加database administrator。

$ sudo /usr/sbin/kadmin.local -q "addprinc admin/admin"$ sudo Kadmin.local>listprincs

*左右滑动查看更多

查看是否委托人创立胜利。

7:批改kadmin明码,该批改后的明码将用于Amazon EMR集群集成时应用。

>cpw kadmin/admin

退出。

留神该步骤中创立的admin账密须要与Amazon EMR安全策略中配置的admin明码统一。

8:启动Kerberos daemons。

systemctl start krb5kdcsystemctl start kadmin

【optional步骤】:LDAP集成

企业客户通常会将零碎账号对立存储在LDAP中,该步骤为自建LDAP与Kerberos集成的计划

1:装置open LDAP。

yum install libdb-cxx libdb-cxx-devel gcc-plugin-devel -yyum 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)。

vi /usr/local/etc/openldap/rootdn.ldifdn: dc=extkdc,dc=comobjectclass: dcObjectobjectclass: organizationo: testdc: testdn: cn=app,dc=extkdc,dc=comobjectclass: organizationalRolecn: app

4:更改结束重启slapd服务。

`ps -aux | grep slapd
kill -9 $PID`

5:加载ldap schema,以便与Kerberos集成。

/usr/local/libexec/slapd -F /usr/local/etc/openldapldapadd -x -D “cn=config” -w 123456 -f /root/ldap/cn=kerberos.ldif

*左右滑动查看更多

6:更新Kerberos的server端配置,减少database_module及ldapconf的相干配置。

EXTKDC.COM = {……database_module = openldap_ldapconf}[dbdefaults]   ldap_kerberos_container_dn = cn=test,dc=extkdc,dc=com[dbmodules]   openldap_ldapconf = {       db_library = kldap       ldap_servers = <ldap server的private IP>       ldap_kerberos_container_dn =   cn=test,dc=extkdc,dc=com       ldap_kdc_dn =                cn=app,dc=extkdc,dc=com       ldap_kadmind_dn =            cn=app,dc=extkdc,dc=com       ldap_service_password_file = /etc/krb5.ldap       ldap_conns_per_server = 5}

*左右滑动查看更多

创立EMR并集成内部KDC

  1. 在Amazon EMR服务的平安配置核心中创立名为extkdctest的平安配置,并设置内部kdc的地址。

  1. 通过高级配置创立Amazon EMR集群,本文抉择3.0版本,其余配置放弃默认。
  2. 在硬件配置中的网络配置中,抉择和内部KDC能够联通的子网,并确定KDC server所在Amazon EC2的平安组中容许该网络拜访。
  3. 在安全性页面中,除了设置Amazon EC2键对外,在平安设置中选项方才设置的平安配置,输出域名并输出咱们在内部KDC更改kadmin后的明码。其余默认抉择,并进行集群创立。

总结

本文介绍了Amazon EMR集成内部KDC的原理以及阐明了如何一步步操作集成内部KDC,包含在操作过程中的注意事项,对于第一次创立Amazon EMR并集成内部KDC的用户,能够清晰的理解集成过程,并疾速实现原型搭建。

本篇作者


柏燕峥
亚马逊云科技解决方案架构师。
十余年企业软件架构和征询教训,专一企业公有云、混合云、云治理平台、云平安、DevOps。著有大学教材中的大数据与人工智能技术丛书中的《云计算导论》。


唐清原
亚马逊云科技数据分析解决方案架构师
负责Amazon Data Analytic服务计划架构设计以及性能优化,迁徙,治理等Deep Dive反对。10+数据畛域研发及架构设计教训,历任Oracle 高级征询参谋,咪咕文化数据集市高级架构师,澳新银行数据分析畛域架构师职务。在大数据,数据湖,智能湖仓,及相干举荐零碎/MLOps平台等我的项目有丰盛实战经验。