更新时间:2022-05-19 09:53:51
【更新:随着RAM 2.0的上线,阿里云官网提供了对SAML Federation的官方技术文档,读者可以参考:https://help.aliyun.com/document_detail/93684.html ,同时推荐用户使用RAM控制台进行配置,原企业控制台(公测)将逐步下线】
在阿里云的产品体系中,提供了免费的访问控制(RAM:Resource Access Management)服务来满足企业的合规与安全需求。正如本博客的所有文章都提到的一样,我们希望和鼓励广大阿里云客户充分使用访问控制服务提供的功能,完善企业云上IT设施的安全管理。
在本文中,我们将介绍如何通过阿里云RAM服务的身份管理能力,集成企业自己的身份系统,从而实现对员工身份在云上和云下的统一管理。
阿里云采用了SAML这一行业标准来实现身份系统的互通。关于SAML协议,本文在附录中对其基本术语进行了简要介绍,帮助理解身份联盟中的基本角色与功能。
在阿里云跟企业身份系统的集成场景中,阿里云是服务提供商(SP),而企业自有的身份服务则是身份提供商(IdP)。下图描述了在这一架构下,企业员工通过企业自有身份服务登陆到阿里云控制台的流程
在阿里云配置企业自有IdP之后,企业员工登陆阿里云控制台的流程如下,有两种方式
方式一 (SP发起的单点登录):
方式二(IdP发起的单点登录):
这一方式和SP发起的单点登录的区别只在于第一步和第二步,在这一方式中
接下来流程则对应SP发起单点登录流程中的第3步到第7步。
为了配置云账号下的子账号采用外部SAML IdP登陆,需要提供外部SAML IdP的SAML元数据。常见的SAML IdP都提供了特定的地址下载SAML元数据。元数据包含了IdP的地址,用于验证签名的公钥以及断言格式等信息。
在准备好SAML元数据XML文件之后,按照下面的步骤将元数据文件配置到阿里云目录。
人员管理
模块人员目录
>目录设置
>SSO设置
,点击编辑SSO设置
编辑SSO设置
对话框中,上传外部SAML IdP元数据文件,并打开SSO功能。在外部IdP中配置阿里云为可信SAML SP主要包括以下任务
从阿里云获取您的云账号的 SAML 服务提供方元数据 URL。
IdP和SP需要对SAML断言的语义达成一致,从而使SAML断言的生产者和消费者能够一致理解对用户身份的表达。阿里云通过User Principal Name (UPN)来定位用户,因此要求外部IdP生成的SAML回应里包含用户的UPN。
阿里云解析SAML断言中的NameID节点,在阿里云目录中匹配用户的UPN从而实现SSO用户的认证。
因此在外部IdP里创建的阿里云SP中,需要将对应于阿里云子用户UPN的字段映射为SAML断言中的NameID。
用户配置可以通过以下几种方式来实现,分别适用于不同的场景
接下来的文章会以Microsoft AD为例,对在AD中配置阿里云为SAML SP,从而实现AD用户登陆到阿里云进行Walkthrough。
为了理解方便,简要介绍几个术语
IdP
: Identity Provider, 身份提供商,是指提供身份管理的服务。常见的企业自有IdP有AD FS,Shibboleth等,Cloud IdP有Azure AD,Okta,OneLogin等。SP
: Service Provider,服务提供商,是指利用IdP的身份管理功能,为用户提供具体服务的应用。SP会消费IdP提供的用户信息。在一些非SAML协议的身份系统(比如OIDC)里,也把Service Provider称作Relying Party,也就是IdP的依赖方。SAML
: Security Assertion Markup Language,是一个实现企业级用户身份认证的标准协议。是SP和IdP之间实现沟通的技术实现方式之一。是目前企业身份联盟的的事实标准(SAML 2.0)。SAML Assertion
: 简称Assertion
,SAML断言,是SAML协议中用来描述认证请求(Request)和认证响应(Response)的核心元素。例如用户的具体属性就包含在认证响应的断言里面。Trust
: 信赖,是指建立在SP和IdP之间的互信机制,通常由公私钥来实现。SP通过可信的方式获取IdP的的身份联盟元数据,元数据中包括了IdP用来给SAML Assertion签名的私钥的对应公钥,SP则可以使用公钥来验证Assertion的完整性(Integrity)。