借助Amazon EMR与外部KDC进行身份认证,有效集成业务场景
前言
安全始终是亚马逊云科技的头号工作,也是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 = 88kdc_tcp_ports = 88[realms]EXTKDC.COM = {#master_key_type = aes256-ctsacl_file = /var/kerberos/krb5kdc/kadm5.acldict_file = /usr/share/dict/wordsadmin_keytab = /var/kerberos/krb5kdc/kadm5.keytabsupported_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.logkdc = FILE:/var/log/krb5kdc.logadmin_server = FILE:/var/log/kadmind.log[libdefaults]dns_lookup_realm = falseticket_lifetime = 24hrenew_lifetime = 7dforwardable = truerdns = falsepkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
default_realm = EXTKDC.COMdefault_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 -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/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 = kldapldap_servers = <ldap server的private IP>ldap_kerberos_container_dn = cn=test,dc=extkdc,dc=comldap_kdc_dn = cn=app,dc=extkdc,dc=comldap_kadmind_dn = cn=app,dc=extkdc,dc=comldap_service_password_file = /etc/krb5.ldapldap_conns_per_server = 5
}
*左右滑动查看更多
创建EMR并集成外部KDC
1. 在Amazon EMR服务的安全配置中心中创建名为extkdctest的安全配置,并设置外部kdc的地址。
2. 通过高级配置创建Amazon EMR集群,本文选择3.0版本,其他配置保持默认。
3. 在硬件配置中的网络配置中,选择和外部KDC可以联通的子网,并确定KDC server所在Amazon EC2的安全组中允许该网络访问。
4. 在安全性页面中,除了设置Amazon EC2键对外,在安全设置中选项刚才设置的安全配置,输入域名并输入我们在外部KDC更改kadmin后的密码。其他默认选择,并进行集群创建。
总结
本文介绍了Amazon EMR集成外部KDC的原理以及说明了如何一步步操作集成外部KDC,包括在操作过程中的注意事项,对于第一次创建Amazon EMR并集成外部KDC的用户,可以清晰的了解集成过程,并快速实现原型搭建。
本篇作者
柏燕峥
亚马逊云科技解决方案架构师。
十余年企业软件架构和咨询经验,专注企业私有云、混合云、云管理平台、云安全、DevOps。著有大学教材中的大数据与人工智能技术丛书中的《云计算导论》。
唐清原
亚马逊云科技数据分析解决方案架构师
负责Amazon Data Analytic服务方案架构设计以及性能优化,迁移,治理等Deep Dive支持。10+数据领域研发及架构设计经验,历任Oracle 高级咨询顾问,咪咕文化数据集市高级架构师,澳新银行数据分析领域架构师职务。在大数据,数据湖,智能湖仓,及相关推荐系统/MLOps平台等项目有丰富实战经验。
借助Amazon EMR与外部KDC进行身份认证,有效集成业务场景相关推荐
- 使用 Amazon EMR 构建您的数据分析平台
?? 前言 众所周知,在现如今大数据时代,数据越来越重要.据Gartner最新趋势分析,数据分析将成为创新起源与企业核心能力.同时国际数据公司IDC和数据存储公司希捷的一份报告表示,我国产生的数据量将 ...
- 动态口令身份认证技术的应用与发展
内容提要:本文概要地论述了动态口令(动态口令)的基本概念.工作原理和基本技术.详细地介绍了动态口令在银行.证券.办公自动化等系统中的应用.重点说明了动态口令地几中新的应用方式和技术.本文对从事信息安全 ...
- Kerberos 身份认证原理
Kerberos 身份认证原理 Kerberos 是一种基于对称密钥技术的身份认证协议,它作为一个独立的第三方的身份认证服务,可以为其它服务提供身份认证功能,且支持 SSO (即客户端身份认证后,可以 ...
- 统一身份认证和授权--微服务架构
一.预备知识 本文讨论基于微服务架构下的身份认证和用户授权的技术方案,在阅读之前,最好先熟悉并理解以下几个知识点: 微服务架构相关概念:服务注册.服务发现.API 网关 身份认证和用户授权:SSO.C ...
- 服务架构:统一身份认证和授权技术解决方案
本文讨论的是基于微服务架构下的身份认证和用户授权的技术方案,从背景到微服务架构整套流程分解. 一.预备知识 本文讨论基于微服务架构下的身份认证和用户授权的技术方案,在阅读之前,最好先熟悉并理解以下几个 ...
- 字符串 hash 唯一数字_【数字课堂】酒妹带你了解“身份认证技术”
身份认证技术是在计算机网络中确认操作者身份的过程而产生的有效解决方法.计算机网络世界中一切信息包括用户的身份信息都是用一组特定的数据来表示的,计算机只能识别用户的数字身份,所有对用户的授权也是针对用户 ...
- Java调用支付宝身份认证接口
支付宝官方文档地址:https://opendocs.alipay.com/apis/api_2/alipay.user.certify.open.initialize <!-- https:/ ...
- android人脸身份认证,Android通过支付宝进行刷脸认证
Android通过支付宝进行刷脸认证 官方文档快速接入 一.简介 支付宝刷脸认证是通过支付宝人脸识别进行身份校验,主要包括三个模块身份认证初始化服务.开始认证.认证结果查询 二.应用场景 认证场景码 ...
- 身份认证技术基础知识
身份认证技术 身份认证技术是指计算机及网络系统确认操作者身份的过程所应用的技术手段. 计算机系统和计算机网络是一个虚拟的数字世界.在这个数字世界中,一切信息包括用户的身份信息都是用一组特定的数据来表示 ...
- android 身份认证技术,Android平台上基于人脸识别的身份认证系统的设计与实现
摘要: 随着移动互联网与人工智能技术的发展,基于个人特征的生物识别技术代替传统的身份验证方式已经是大势所趋.而人脸识别是生物识别技术的一个重要组成部分,拥有其他生物识别技术没有的独特优势.本文主要针对 ...
最新文章
- java基础小总结(2)
- TreeView控件节点重命名后没有进入beginEdit的解决方案
- 七步确定一个优化项目的难易度
- atom配置python环境_python与excel有段情之二:python的安装和环境配置
- Python 第三方模块之 beautifulsoup(bs4)- 解析 HTML
- Mybatis if 判断等于一个字符串
- 《51单片机应用开发从入门到精通》——2.8 用外部中断控制灯闪烁
- mysql几百万的表关联_mysql SQL优化,百万级2张表关联,从40分钟到3秒
- 头文件stdafx.h
- 不知道STAR法则还敢去面试?备受500强HR推崇的STAR法则详解
- 阿里云 EMAS Serverless 重磅发布
- 这些神奇 Bug,碰到真是让人目瞪狗呆!
- 物理层、数据链路层间的PHY、MAC、MII、RMII、SMII、GMII、RGMII以及I2S总线、SFP接口
- 阿里云免费SSL证书申请与安装使用-附Nginx,Apache,IIS 6,IIS 8配置SSL教程
- 仿微信悬浮通知栏/横幅通知
- FATE联邦学习初探(二)
- Shell(Bash) - PHP与Sheel交互
- 【Web系列二十】Django+Celery+Asgiref+Channels+协程锁实现Websocket异步并发
- AlexNet网络练习
- 【蓝桥杯】BASIC-3 字母图形
热门文章
- ESP32 LVGL8.1 ——event 事件 (event 17)
- 数据治理系列:数据血缘关系
- python因式分解算法_费马因式分解算法优化及素数判定
- 编译裁剪busybox
- 计算机专业对环境保护,计算机与环境保护
- java web简单线上游戏_手把手教你用Java实现一个简易联网坦克对战小游戏 !
- java 数字转英文_一个java的问题 讲输入的阿拉伯数字转换成英文
- Android仿自如客APP裸眼3D效果
- 小小总结之渗透测试面试题以及答案
- WPF基础篇 作者:IT168 静水流深 2008-01-02