共计 5283 个字符,预计需要花费 14 分钟才能阅读完成。
前言
平安始终是亚马逊云科技的头等工作,也是 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 well
includedir /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.crt
default_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 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)。
vi /usr/local/etc/openldap/rootdn.ldif
dn: dc=extkdc,dc=com
objectclass: dcObject
objectclass: organization
o: test
dc: test
dn: cn=app,dc=extkdc,dc=com
objectclass: organizationalRole
cn: app
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 的相干配置。
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
- 在 Amazon EMR 服务的平安配置核心中创立名为 extkdctest 的平安配置,并设置内部 kdc 的地址。
- 通过高级配置创立 Amazon EMR 集群,本文抉择 3.0 版本,其余配置放弃默认。
- 在硬件配置中的网络配置中,抉择和内部 KDC 能够联通的子网,并确定 KDC server 所在 Amazon EC2 的平安组中容许该网络拜访。
- 在安全性页面中,除了设置 Amazon EC2 键对外,在平安设置中选项方才设置的平安配置,输出域名并输出咱们在内部 KDC 更改 kadmin 后的明码。其余默认抉择,并进行集群创立。
总结
本文介绍了 Amazon EMR 集成内部 KDC 的原理以及阐明了如何一步步操作集成内部 KDC,包含在操作过程中的注意事项,对于第一次创立 Amazon EMR 并集成内部 KDC 的用户,能够清晰的理解集成过程,并疾速实现原型搭建。
本篇作者
柏燕峥
亚马逊云科技解决方案架构师。
十余年企业软件架构和征询教训,专一企业公有云、混合云、云治理平台、云平安、DevOps。著有大学教材中的大数据与人工智能技术丛书中的《云计算导论》。
唐清原
亚马逊云科技数据分析解决方案架构师
负责 Amazon Data Analytic 服务计划架构设计以及性能优化,迁徙,治理等 Deep Dive 反对。10+ 数据畛域研发及架构设计教训,历任 Oracle 高级征询参谋,咪咕文化数据集市高级架构师,澳新银行数据分析畛域架构师职务。在大数据,数据湖,智能湖仓,及相干举荐零碎 /MLOps 平台等我的项目有丰盛实战经验。