很多企业都会使用AD来做企业内部身份管理。客户上云之后,希望能够打通其企业内部的AD数据跟云上RAM用户做到联合登录。本文会围绕ADFS跟阿里云SSO展开介绍一下基于AD/ADFS及相关自动化功能实现。
本文大纲
分4个章节:
介绍AD/ADFS/LDAP基本概念
快速搭建AD/ADFS环境
同步企业AD数据到阿里云
配置与阿里云联合登录
AD/ADFS/LDAP基本概念
为了简化理解,我们可以把LDAP类比成SQL。它只是一个标准的协议,并不是具体产品。都是用来存储数据的,都只是一种规范形式。如同RDMS有Mysql、Oracle、PG等实现,LDAP具体到不同的厂商产品实现会在某些细节上表现出差异,如OpenLDAP Server和Window Active Directory。
LDAP
定义:一个轻量级的目录访问协议,用来访问目录服务(Directory Service)。
LDAP是要访问目录服务,肯定是需要查询和操作数据,那这个Server中的数据是什么样的?如下所示,一个树形组织数据信息:
连接和认证
每个协议都会存在自己的连接方式和端口,LDAP也不例外,我们可以通过LDAP协议连接到Server,对应的端口和Http(Https)一样,支持两个389和636(默认端口),分别是LDAP和LDAPs;
在此,推荐一款好用的工具:Ldap Admin Tool。可以直接连接AD服务器。下图是我连接到远端的一台AD服务器
ps: 一般企业会通过配置多个OU来对用户进行分组管理。这个DEMO尽可能还原企业客户现状。
LDAP的查询操作
一个Search操作通过指定查询条件来查询对应条目的部分或者全部信息。一个标准LDAP search request包含的元素有多个,详细信息参考LDAP Search Operation,我们主要关注如下四个元素:
Search Base DN:前面提到,整个LDAP Server存储的是一棵树,我们要查询符合条件的数据,可以从Root DSE 根节点进行检索,也可以通过DN指定到某个节点,只查询对接节点所代表的子树,缩小查询目标大小,提高检索性能。
Search Scope:检索范围(我更想表达为检索方式,Base DN + Search Scope圈定了对应Search Request的目标查询对象),有四种检索范围: a. baseObject(base):只查询Base DN这个单个节点,看下这单个节点是否满足查询条件; b. singleLevel(one):查询Base DN的一级子节点,不包含Base DN,也不包含一级子节点下的其它子孙节点; c. wholeSubTree(sub):查询Base DN代表的整颗子树,包含Base DN和所有的子孙节点; d. subordinateSubtree(subordinates):查询Base DN代表的整颗子树,但是不包含Base DN,只包含子孙节点;
Search Filter:查询的过滤条件,用来确定在指定的查询范围(Base DN + Scope)中的目标Entry。具体的Filter表达式语法可以参考这篇文档。
Required Attributes:顾名思义,这个是描述了要求Server应该返回的Entry属性集合,比如说cn、objectClass等属性。除了显式指定要求属性外,LDAP还定义了属性要求的两个特殊字符,"" 和 "+",分别代表要求所有的user attributes和operational attributes。如果一个Search Request指定的Required Attributes 集合为空,那么Server应该把对应的取值当成""处理,返回所有的user attributes。
Active Directory(简称AD)
目录是存储有关网络上对象的信息的层次结构。 目录服务(例如 Active Directory 域服务 (AD DS) )提供了存储目录数据以及使此数据可供网络用户和管理员使用的方法。 例如,AD DS 存储有关用户帐户的信息,如名称、密码、电话号码等,并使同一网络上的其他授权用户可以访问此信息。
讲到AD,相关的概念就非常多了。如:域、域名系统(DNS)、林等等。可以查阅微软官方文档了解更多。
Active DirectoryFederation Services(简称ADFS)
ADFS 是微软的本地 SSO 解决方案,支持对 Active Directory(AD)和集成 Windows 身份验证(IWA)不兼容的应用进行用户认证。2000年掀起了软件即服务的热潮,而微软在这一年发布 ADFS 就是为了帮助企业更好地利用 SaaS。
本质上,ADFS 允许企业通过互联网创建一种“信任关系”,将本地设置中的身份扩展到基于云的环境从而对 AD 进行补充,其运行方式与使用安全断言标记语言(SAML)协议的基于 Web 应用的 SSO 服务基本一致。此外,ADFS 还可以使用 cookie 和 JSON Web 令牌 (JWT)等其他令牌标准来提供身份验证服务,但仅限于本地,无法在云上使用。基于SAML的ADFS联合身份验证方案,集成方案示意图:
小结
通过以上简单介绍,企业身份系统要跟阿里云身份做集成用到两个技术点:
基于LDAP协议,查询AD里面的员工身份数据,同步到阿里云。
基于ADFS + SAML协议跟阿里云实现联合登录。
快速搭建AD/ADFS环境
网上有很多教程写关于如何搭建AD/ADFS环境。但步骤还是比较多,很容易配错。为了简化环境搭建过程,借助ECS自定义镜像 + Terraform的能力,实现一键搭建AD/ADFS环境。
自动化搭建基础设施带来的好处,想必通过看这个部署视频就能够直观看到了。如果是在控制台配置的话,需要配置VPC、Vswitch、安全组,再去ECS购买页一步步点击配置,非常麻烦而且易出错。而通过Terraform,一键部署你想要的环境,一边喝着咖啡一边环境就部署起来了。是不是很爽^_^。
原本需要小时级别的搭建工作,秒变成只需要1~2分钟就搞定。另外当你不需要这个环境时,删除也是极速。相比于在控制台上面操作,通过自动化来管理基础设施,效率提升不只一倍。
同步企业AD数据到阿里云
企业将员工数据同步到云上,能够简化企业管理员工作。云上很多产品如DMS、DataWorks之类的产品都需要做授权,而授权主体其实就是企业内部员工。所以很多企业用到阿里云的SAAS产品,都希望能够把数据打通。
通过LDAP协议查询企业AD的数据,再调用阿里云OpenApi把用户数据同步到阿里云。提供了一个轻量级小工具,能够帮助企业客户更快完成数据同步。演示视频:
视频操作讲解:
1、先在AD里面创建一个新用户。(模拟企业新入职员工)
2、通过这个同步工具,能够直观看到有一条新记录。(新入职员工)
3、点击同步,就实现将新员工账号同步到阿里云,是不是非常方便 ^_^。
配置与阿里云联合登录
本节介绍基于AD/ADFS环境,如何跟阿里云实现RAM USER SSO,介绍搭建过程。
架构图
通过“快速搭建AD/ADFS环境”,采用自定义镜像的方式,完成了AD/ADFS基础环境的配置。接下来就是配置阿里云SSO的过程。
自定义镜像注意事项
1、主机名及主机域。主机名::dc 完整的主机域账号名称::ad.landingzone.cc
2、本机如果要访问域服务器。需要绑定hosts。
获取AD DC元数据xml文件
1、本地访问:https://dc.landingzone.cc/federationmetadata/2007-06/federationmetadata.xml下载XML配置文件。
更新SSO登录设置
将上一步下载的xml配置文件配置上去。另外辅助域名可以设置成企业自身的域名,比如本文可以设置成:landingzone.cc
同时复制保存SAML服务提供商元数据URL备用。
ADFS-添加阿里云为可信SAML SP添加信赖方信赖按照步骤一步一步完成配置。其中有一步:这个就是在上面复制过来的值。
ADFS-为阿里云SP配置SAML断言属性
选择规则类型
配置转换声明规则
上面配置阿里云SSO的时候指定了辅助域名,所以这一步这样配置就行了。如果没有配置辅助域名,那这里配置就需要配置电子邮件后缀。这里要稍微注意下!
效果演示
接上一个视频,已经把用户u102@landingzone.cc 同步到RAM用户中了。接下来就可以实现SSO登录控制台,演示视频
通过SSO给企业管理带来非常直观的好处:
不需要再云上单独创建一套新的用户体系了。员工直接使用域账号 + 密码登录阿里云控制台。
当员工离职之后,在企业内部的AD中数据会被清理,自然也就无法再登录云控制台。
本文小结
通过本文的介绍,希望能够帮助大家更好地理解AD/ADFS/LDAP协议,以及如何跟阿里云进行身份集成。对文中提到的相关自动化代码、对云上企业IT治理(企业客户在云上的 人 / 财 / 物 / 权 / 法及基础设施自动化)有兴趣可以找我交流。