作者 | 李智源 阿里云开放平台高级技术专家,主要负责阿里云企业级身份管理,致力于提供云上集中式、易集成、安全、合规的企业级身份认证和管理服务。
1.场景是什么
在云平台上管理使用云资源的时候,企业管理者对于账号的管理有以下几个场景和做法:
管理单一云平台主账号:管理一个独立的开发者或工作室的账号。主要业务可能是运营一个资讯类站点或开发一个APP。需要的云资源较少,研发和运维可能就一个人或几个人,大家共享账号管控和使用云资源。因此只要管理好这一个账号密码就好。
管理单一云平台主账号,少量子账号:管理一家中小型企业,信息系统和业务系统的规模不大,企业有技术运维团队来管理企业在云上的信息系统和业务系统。但管理要求不高,企业自己的员工身份系统建设并不十分完善。技术运维团队独立管理云上账号的使用,可能在云上使用一个或多个云账号,按照使用场景分配RAM用户,每个RAM用户分配对应的权限,独享或共用RAM用户。因此用户名、密码、MFA密钥共享,且和企业本地员工系统割裂。
管理多云平台主账号,多个子账号:管理一家中大型或者超大型的跨国企业,信息系统和业务系统庞大且本地、云上均有资源。员工可能在全球各个地方使用各种设备访问企业的信息系统或管控云资源。企业管理要求严格,强合规需求,强监管需求。且技术运维团队分工细致且有管控使用强隔离的场景。本地员工系统建设完善,期望能在一个地方集中管理员工的身份认证信息,并且和单个云或多个云的控制台打通,这样可以方便的对企业云上资源的管理按照公司的组织架构进行隔离和审计。
2.痛点是什么
对于一家中型、大型和跨国企业来说,云上资源的管控需要多个岗位的员工共同参与协作,例如开发、运维、财务和审计等角色。同时企业有强合规,强监管的需求。
在云上,为了解决管理隔离,数据泄漏,审计和合规的问题,企业的身份管理员为参与协作的每个员工创建一个RAM账号,并授予相应的权限。员工使用独立的用户名、密码和多因素认证访问云服务的控制台。
看起来现状已经很美好,但是随着员工的入职、离职,且相对应在云上的的账号需要随之调整。企业规模扩大,使用了多个云平台的服务,需要完整的在多个云平台上管理员工账号,企业和员工的账号管理成本也不断的升高。
图1 本地和多云管理多套用户身份
为了降低管理的成本,企业可能借助于云平台提供的身份API,自行开发管理平台来管理本地员工和云上账号的关系,维护云平台账号的密码。这样需要额外的团队来维护系统,且每当接入一个新平台,需要参考对应的API再做一次性开发,并不是一个标准的通用方案。当然也有CMP也为企业提供了解决此类问题的方案。
那么,有没有一个通用的协议或者标准能够解决企业集中化身份控制的需求,且能方便的和云平台账号的登录打通?
当然有!继续往下看。
3.SAML 协议
SAML is an XML-based markup language for security assertions (statements that service providers use to make access-control decisions).SAML is also:
A set of XML-based protocol messages;A set of protocol message bindings;A set of profiles (utilizing all of the above).
Security Assertion Markup Language - Wikipedia
SAML协议最重要的场景是用于SSO,目前常用的是SAML 2.0协议。SAML协议的内容不再赘述,如果想进一步了解可以参考具体协议内容。本文仅简单介绍下SAML SSO的基本过程。
SAML SSO的过程重要的两方参与者「IdP」和「SP」:
身份提供商(IdP)
一个提供身份管理服务的实体,例如:
企业本地IdP:Microsoft Active Directory Federation Service (AD FS)、Shibboleth等。
Cloud IdP:Azure AD、Google G Suite、Okta、OneLogin等。
服务提供商(SP)
利用IdP的身份管理功能,为用户提供具体服务的应用,SP会使用IdP提供的用户信息。一些非SAML协议的身份系统(例如:OpenID Connect),也把服务提供商称作IdP的信赖方。
IDP和SP需要先建立「信赖」,并通过传输的「SAML断言」进行认证:
SAML断言(SAML assertion)
SAML协议中用来描述认证请求和认证响应的核心元素,例如:用户的具体属性就包含在认证响应的断言里。
<saml2p:Response>
<saml2p:Status>...</saml2p:Status>
<saml2:Assertion>
<saml2:Issuer>IdP.entityId</saml2:Issuer>
<ds:Signature>...</ds:Signature>
<saml2:Subject>
<saml2:NameID>NameId</saml2:NameID>
<saml2:SubjectConfirmation>...</saml2:SubjectConfirmation>
</saml2:Subject>
<saml2:Conditions>...</saml2:Conditions>
<saml2:AuthnStatement >...</saml2:AuthnStatement>
<saml2:AttributeStatement>....</saml2:AttributeStatement>
</saml2:Assertion>
</saml2p:Response>
信赖(Trust)
建立在SP和IdP之间的互信机制,通常由公钥和私钥来实现。SP通过可信的方式获取IdP的SAML元数据,元数据中包含IdP签发SAML断言的签名验证公钥,SP则使用公钥来验证断言的完整性。
SAML SSO的基本流程如图2所示:
图2 SAML SSO 基本流程
- 用户在SP侧登录框输入用户名,从SP 侧触发SAML SSO;
- SP侧通过适配用户名对应的Trust配置,重定向客户端到IdP侧做认证,并向IdP侧发起SAML Request;
- 用户在IdP做认证完成后,IdP侧根据Trust的配置和SAML Request的Context内容,重定向用户到SP侧,并发送SAML Response;
- 客户端带着SAML Response跳转到SP侧;
- SP侧验证Response中的SAML Assertion,识别其中的身份字段,找到对应的云上的用户,建立Session;
- SP侧维护Session,重定向客户端到SAML Response中指定的页面。客户端持有云上的账号的Session,访问控制台。
阿里云平台提供了两种SAML SSO 方式:
- 基于RAM用户的SSO
- 基于RAM角色的SSO
图3 阿里云提供的SAML SSO的两种方式
4.实战
假设这样一个场景。一家跨国企业CompanyA使用了GCP云平台,并在其上构建了员工体系和信息系统体系。现在业务扩展到中国想使用阿里云,但是其员工账号想统一在GCP上管理认证,需要管理云资源的时候免登到阿里云。公司的用户管理员alice@CompanyA.com想实现这个功能,需要如何操作呢?
这个场景里,GCP作为IdP,阿里云作为SP。这里我们知道GCP的租户是CompanyA.com,假设阿里云的租户是companyA.onaliyun.com。
4.1 阿里云侧的配置
companyA.onaliyun.com租户账号或子用户登录RAM控制台。
选择左侧导航栏的SSO管理。在用户SSO标签下,可查看当前租户的SAML SSO 配置相关信息,可用于在IdP侧的配置。
图4 阿里云用户SAML SSO 配置控制台
SSO登录相关的设置,包括选择SSO功能状态、上传元数据文档和设置辅助域名。
1.SSO功能状态:
-默认关闭,此时RAM用户可以使用密码登录,SSO配置不生效;
-选择开启,此时RAM用户密码登录方式将会被关闭,统一跳转到企业IdP登录服务进行身份认证。
2.元数据文档,单击上传文件,上传从IdP侧获取的的元数据文档。见GCP侧配置第3步;
3.辅助域名(可选):开启辅助域名开关,可以设置一个辅助域名:
-如果设置了辅助域名,SAML断言中的NameID元素将可以使用此辅助域名作为后缀;
-如果没有设置辅助域名,SAML断言中的NameID元素将只能使用当前账号的默认域名或域别名作为后缀。
4.2 GCP侧的配置
- 账号登录Google Admin;
- 点击应用 -> SAML 应用,选择右下角的新建,并点击设置自己的自定义应用;
- 下载IdP元数据,用来作为阿里云侧的配置上传元数据文件;
- 填好自定义名称后,填入阿里云侧的ACS网址和EntityId。此数据可以通过阿里云侧的用户SSO元数据文档中获取。见阿里云侧配置第二步。配置如图5所示。
- 为用户自定义字段,字段为阿里云RAM用户的用户名:alice@CompanyA.onaliyun.com。作为SAML Assertion中的NameID字段。(如果在阿里侧配置了辅助域或域别名,此步骤可以忽略,直接选择GCP的Email)
- 配置完成后,分配给alice@CompanyA.com的用户有使用权限。当发起sso的时候。可以选择配置的SAML应用。点击右上角的启动,即可发起免登到阿里云控制台。
图5 GCP配置用户SAML SSO到阿里云配置
配置完成后,用户可以在阿里云侧的登录框输入用户名发起SP侧的SSO(SP initiated User SSO),这也是最通用的场景。也可以直接在IdP侧直接启动应用,发起免登到SP(IdP initiated User SSO)。
总结
企业管理员可以通过简单的配置,就可以方便、快捷、安全、合规的打通企业和阿里云平台间的控制台登录。降低了企业人员的管理和研发成本的同时,也保持了安全和合规的特性。下一篇文章,将介绍企业身份管理SSO的另一种方式--基于RAM角色的SAML SSO,敬请期待。