背景
随着企业上云的进一步深入,越来越多的业务逐步迁移至云端,云上资源的需求也随着业务增加而越来越多,这种增长使得单账号的资源、项目、人员、权限管理变得极其复杂,多账号上云模式逐渐成为多业务上云的重要选择,然而随着云账号的增加,多账号管理中的人员和权限问题也随着浮现,给运维工作带来了新的挑战,基于这些挑战,我们开始研究如何在多账号环境下高效的管理人员与权限,如何在多账号场景下实现统一认证。
痛点
单账号场景下,阿里云RAM子账号基本满足人员管理,权限管理的需求,但是在多账号场景下,所有账号都采用RAM账号方式进行人员权限管理就显得有些吃力,会面临以下的一些问题
- 某些人员账号会存在多个账号内,管理不便。
- 多账号的权限分配冗余且每个账号都要重复操作。
- 人员离职需要在每一个账号内检查并清理。
- 多账号下每次切换账号都需要重新输入用户及密码,效率较低。
解决方案
- RAM SSO :配置繁琐,需配合企业 IdP 使用,权限层面管理需要在企业 IdP 和阿里云上同时操作,只在用户管理层面会有点优势,并不能解决目前面临的所有问题。
- 阿里云云SSO :配置简单,可以与企业 IdP 配合使用,也可以不接入企业 IdP 独立使用,用户管理,权限管理集中在一处。
通过一些调研和对比,阿里云云SSO(下文简称云SSO) 基本符合我们的需要。
阿里云云SSO
阿里云云SSO是基于阿里云资源目录(RD的统一身份与访问控制产品,基于阿里云云SSO,我们可以统一企业在多账号下的阿里云用户,对用户在多账号下的权限进行统一管理,实现多账号下的单点登录。
云SSO架构
云SSO配置解释
- 企业 IdP :企业身份提供商(Identity Provider),如 AD 、 LDAP 、 Kerberos 等存储和管理用户身份的服务。
- SP:服务提供商(Service Provider)。
- 云SSO用户:云SSO有自己的用户目录,基于此实现用户统一管理,通过给云SSO用户分配对应账号的访问配置来实现权限管理。
- 访问配置:权限集合,每个访问配置可以添加多个权限(与 RAM 权限类似,内置权限和自定义权限)。
- 资源目录管理账号/资源目录成员:云SSO是基于阿里云资源目录的多账号统一身份管理与访问控制,各个业务阿里云账号都会加入资源目录管理账号中,加入后,之前分散的账号会成为资源目录的的成员,资源目录的管理账号可以进行统一管控。
- RAM用户同步:云SSO默认是通过角色方式去访问子账号(资源目录成员)的,但是有些阿里云产品可能对角色的支持并不是那么完善,这个时候就可以用使用RAM用户同步来切换成RAM用户形式去访问云资源。
- RAM角色:体现为访问控制(RAM)中的一个角色,云SSO用户登录时会扮演这个角色来访问子账号里的云资源。
- RAM用户:与传统的RAM用户一致。
云SSO功能列表:
- 统一阿里云用户 云SSO为您提供一个原生的身份目录,可以将所有需要访问阿里云的用户在该目录中维护。
- 统一的权限配置 借助与RD的深度集成,在云SSO中可以统一配置用户或用户组对整个RD内的任意成员账号的访问权限。云SSO管理员可以根据RD的组织结构,选择不同成员账号为其分配可访问的身份(用户或用户组)以及具体的访问权限,且该权限可以随时修改和删除。
- 统一的用户门户 企业员工只需要登录门户站点,即可在门户站点上看到所有有权限的账号列表,可以在门户页面在多账号之间轻松切换。
- 企业身份集成,单点登录 云SSO也可以与企业身份系统进行集成实现单点登录。
云SSO用法
因云SSO需要配合资源目录使用,资源目录账号对目录下的阿里云账号有管理权限,因此最好是一个独立的阿里云账号,此阿里云账号不涉及到任何资源。
1.开通资源目录(搜索资源目录点击开通即可)
2.在资源目录邀请要纳入管理的阿里云账号
3.登录被邀请的阿里云账号的资源目录中接受邀请
a.登录资源管理控制台
b.左侧导航栏,选择资源目录 > 概览
c.查看邀请
d.点击处理邀请 → 接受邀请
4.开通云SSO(登录云SSO控制台开通即可)
5.在云SSO人员管理中添加用户
6.添加访问配置(权限配置)
7.在多账号管理里面选择指定的账号推送访问配置(推送权限)推送时需要关联指定的用户或用户组
8.通过SSO门户登录地址登录SSO门户(参考用户名密码登录流程)
用户名密码登录流程
1.获取登录地址
2.复制URL到浏览器,输入用户名密码
3.访问RD账号资源
4.选择对应的权限登录
到此,云SSO访问配置以及登录配置基本结束,所有用户相关操作都集中在云SSO控制台上执行即可,不在需要在各个子账号中去操作,实现了用户及权限的统一管理,登录操作也只需要在SSO门户站点上登录一次即可,登录后可以很方便的在各个子账号中进行切换,基本上解决了我们当初在面临多账号管理上的一些问题。
KeyCloak + 云SSO
上文还提过,云SSO是支持企业IdP的,接下来我们将介绍如何通过开源产品KeyCloak实现通过企业身份(活动目录,Active Directory)登录阿里云。
此方案中,KeyCloak将作为IdP,阿里云云SSO作为SP,通过SAML协议进行身份认证。
KeyCloak介绍
KeyCloak是适用于 Web 应用和 RESTful Web 服务的单点登录方案。KeyCloak 的目标是简化安全性,以便应用程序开发人员可以轻松的保护他们在组织中部署的应用程序和服务。KeyCloak为开发人员提供开箱即用的安全功能,并且可以轻松根据组织的个性化需求进行定制。KeyCloak为登录、注册、账号管理提供了可自定义的用户界面。还可以将KeyCloak作为集成平台,将其与现有的 LDAP 和 Active Directory 服务器连接起来。还可以将身份验证委托给第三方身份供应商,如 Facebook 和 Google。
基于KeyCloak + AD + 云SSO的登录流程
配置流程
1.部署KeyCloak(部署过程较为繁琐,可以参考官方文档) KeyCloak 支持多种部署方式,Kubernetes、Docker、Podman、裸机部署等… 高可用架构
2.在KeyCloak管理后台中添加 AD 配置(添加 LDAP 供应商) 在后台添加用户联合,协议选择 LDAP
3.在云SSO获取SP元数据文档
4.在KeyCloak中新建客户端,导入SP元数据文档
导入后协议类型选择 SAML 其他选项如图
保存后即可
5.KeyCloak开启OTP验证(如无需要也可以不开启)
6.阿里云启用SSO登录(启用后将无法通过云SSO用户管理里面设置的用户名密码登录)
7.云SSO登录测试(登录URL与用户密码登录流程中用到的URL一致) 开启SSO登录后将无法通过账号密码登录
KeyCloak SSO登录页面
第一次登录会提示让绑定OTP(开启OTP情况下,如果没开启认证成功后会直接跳转至云SSO门户)
整体配置基本完成,此方案使用KeyCloak实现了阿里云与企业账号的打通,因账号安全策略控制在企业侧,也能更好的保护用户密钥安全,并且阿里云SSO认证与KeyCloak Server之间不存在服务端层面的交互,因此KeyCloak完全可以部署在内网,可以更好的保护账号安全,而且阿里云账号的生命周期也会跟企业账号的生命周期保持一致,避免了一些因人员离职后的未知访问。
注意事项
- 最好不要在KeyCloak上开启注册以及同步用户修改,添加用户身份供应商时(如 AD )读写默认配置为只读。
- 为了账号安全,最好在KeyCloak侧开启OTP验证(上述有截图)。
- KeyCloak只负责用户身份验证,权限等操作还是需要在云SSO控制台进行统一管理。
- 没有开启云SSO的 SCIM 用户同步时,如果需要给企业人员添加账号,需要在云SSO用户管理中添加对应用户(无需额外设置密码)并配置权限,之后用户才可以通过KeyCloak用企业账号登录阿里云,否则阿里云侧会提示无法找到用户。
KeyCloak SSO在无影电脑上的应用
通过云SSO的实践,我们通过KeyCloak实现了一套SSO认证的体系,KeyCloak除了SAML协议,还支持OpenID Connect协议,其他应用可以轻松使用标准协议接入SSO系统进行身份验证。我们也将正在使用的无影云电脑应用接入了KeyCloak进行登录认证,提高了大家使用云电脑的便捷性,并且因为是同一套SSO,也不用额外记录一套用户密码,OTP二次验证等都可以复用。
配置简介
1.在KeyCloak上获取 IdP 元数据信息
2.添加企业身份源,上传 IdP 元数据信息
3.点击编辑 → 下载元数据信息
4.在KeyCloak导入客户端(参考上文)
5.在无影云电脑通用配置中关闭便捷账号登录
6.云电脑客户端登录时会自动跳转KeyCloak SSO认证(与云SSO类似)
未来规划
当前并没有开启SCIM用户同步,因此流程上还有些手动部分,未来可以考虑将手动部分通过程序或脚本自动化,接入OA之类的系统,联动企业内部流程,提高运维效率。
作者简介
Yulong,系统运维专家
招聘信息
拍码场