[Amazon Connect](https://aws.amazon.com/cn/connect/?trk=cndc-detail) 是 Amazon 开发的全渠道云联络中心解决方案,能够提供 60 多个国家和地区的电话号码,所有基础设施都由 Amazon 维护,能根据客户的使用量需求动态扩容,无需签约购买许可、按照使用量计费的方式,能够让客户随时灵活调整坐席人数。
[Amazon Connect](https://aws.amazon.com/cn/connect/?trk=cndc-detail) 实例可以设置基于 SAML 2.0 的身份验证,企业用户可以基于 SAML 协议构建 SSO 模块,实现 CRM 与 Connect 的无缝权限对接。不同于直接通过 Connect CCP(Contact Control Panel)登陆(图1), SSO 用户首先向 IdP 进行身份验证。IdP 生成 SAML 断言(assertion),该断言将通过 Browser 发送给 IdP 信任的应用程序(SP),SP 读取用户 attributes 并将其映射到自己存储的用户 attributes。在 Connect 中,SP 限定的 SSO 认证 attributes 为用户登陆名(login)。联合认证通过后,前端跳转到 CCP 的中继链接,就可以访问 Connect 对应的服务(图2)。
![image.png](https://dev-media.amazoncloud.cn/21d82d37561049d8a06ff41d74f3b619_image.png "image.png")
图1: CCP 登陆 [Amazon Connect](https://aws.amazon.com/cn/connect/?trk=cndc-detail)
![image.png](https://dev-media.amazoncloud.cn/e647166d5db34a14bf8a350af47ad3ea_image.png "image.png")
图2: SSO 登陆 [Amazon Connect](https://aws.amazon.com/cn/connect/?trk=cndc-detail)
![image.png](https://dev-media.amazoncloud.cn/9e61a57fa3ab4d48aa030aa4561171b0_image.png "image.png")
图3: [Amazon Connect](https://aws.amazon.com/cn/connect/?trk=cndc-detail) 用户名 attribute 与 Amazon IAM RoleSessionName 匹配,最终与 IdP 用户名 attributes 一致。
由于 IdP 认证通过后可以发送多个 SAML assertion,因此用户可以单次登录多个应用程序(SP)。搭建 SSO 模块后,用户可以非常方便地集成其他应用模块,SSO 也是亚马逊云科技的权限安全的最佳实践。
启动身份验证流的主要方式有2种:
1.IdP 启动流程:用户首先访问 IdP,然后提示用户进行身份验证, IdP 使用 agent 生成 SAML 断言,该断言发送给单个或者多个 SP,SP 验证断言将其映射到本地用户,然后会话可以跳转到 SP 服务界面。多个 SP 模块可以以这种方式同时预热,agent 通过中继链接可以快速跳转多个 SP 服务页面。
![image.png](https://dev-media.amazoncloud.cn/c8e733a0d6c844b0981c9bfaea300ac2_image.png "image.png")
图4: IdP 启动流程
2.SP 启动流程,用户访问 SP,SP 返回用户未验证,Agent 随即请求 IdP,IdP 生成 SAML 断言,通过 agent 发送到 SP,启动会话。这种方式无需用户主动登陆 IdP,用户访问对应 SP 即可自动触发 IdP 验证流程。
![image.png](https://dev-media.amazoncloud.cn/cff29302cbbc47fd9793b14fde4bdc4c_image.png "image.png")
图5: SP 启动流程
在以下范例中我们展示第二种流程,使用 Mujina 作为 IdP 实现基于 SAML Federation 登陆 Connect CCP 的流程。Mujina 是基于 OpenSAML 的联合认证(IdP & SP)。开源 mock 解决方案(https://github.com/OpenConext/Mujina),优点是可以通过 REST API 动态增加与修改 attribute, 基于其开箱即用、易于调试的特性被广泛使用在各类联合认证的测试场景中。在生产场景,我们建议使用托管服务 Amazon SSO 以及亚马逊云科技的成熟合作伙伴解决方案。
首先,我们开启一台 EC2,安装并启动 IdP。这里我们使用 amazon linux corretto11-java-11镜像,并安装 mvn 版本3.8.4,amzn-lnx2-hvm-corretto11-java-11镜像是亚马逊官方托管的 amazon linux 2系统环境下开放 Java 开发工具包(OpenJDK)的免费、多平台、生产就绪型分发版。Corretto 提供长期支持,其中包括性能增强和安全修复。Corretto 经认证与 Java SE 标准兼容,并在 Amazon 内部用于许多生产服务。按照 Run the IdP 命令运行,配置消息Handler,源文件和yml:
```
mvn clean install
cd mujina-idp
mvn spring-boot:run
```
完成后,看到命令行返回:
![image.png](https://dev-media.amazoncloud.cn/2cbc62a3b80c4b69bf6a6b74674eab56_image.png "image.png")
表明 IdP 模块已经初始化。在实例的安全组 inbound 开放默认 IdP 8080端口,浏览器输入 http://:8080 可以看到登陆界面。
![image.png](https://dev-media.amazoncloud.cn/aa1e479b8f7947238e0e41e704b29fe5_image.png "image.png")
图6: IdP 登陆参考界面,version 8.0.0
在 SP(Amazon)和 IdP 之间建立信任关系,通过 IAM 赋予 IdP 联合授权用户对应权限。信任规则由.xml 元数据文件确定。元数据文件格式如下图所示,其中:
entityID:IdP 在 SSO 中的唯一标识。
Location:IdP 服务器的 public ip,Mujina 默认 IdP 端口为8080。
![image.png](https://dev-media.amazoncloud.cn/0dccd9d200de401fac519b5a0b659f7e_image.png "image.png")
7: xml 原数据格式范例
在 IAM 服务中,建立新的 Identity providers,上传 xml 文件,IAM 接受后,在 Summary 中显示 Issuer URL, Valid until, Service location,确认信息正确无误后,进行 IAM 赋权。
![image.png](https://dev-media.amazoncloud.cn/0368dee9543d4a789f47b5509f18a127_image.png "image.png")
图8: 建立新的 Identity providers
然后新建对应角色,给予 connect:GetFederationToken 权限的 policy,修改 trust relationship 给上一步的 Identity providers。
![image.png](https://dev-media.amazoncloud.cn/963581d007da4e399c0854527d12ace1_image.png "image.png")
图9: 新建对应角色
这时候,当我们再次登陆 IdP,再打开 Amazon 控制台,可以看到右上角用户名已经改为对应 role_name@account_id。说明已经在 SP(Amazon)和 IdP 之间建立信任关系。
Log out 这个临时用户,在拥有 Amazon AmazonConnect_FullAccess 或者 adminAccess 权限的用户下启动 connect 实例,选择 SAML 2.0-based authentication。
![image.png](https://dev-media.amazoncloud.cn/20455b913d09485a8b703ce19a325343_image.png "image.png")
图10: 启动 connect 实例
进入对应 connect 实例,在 user management 下新建相同 Login 的用户,或者通过 csv 批量上传与 IdP 用户列表一致的用户。
![image.png](https://dev-media.amazoncloud.cn/f1c540b1472b49878fcd42e0eb3b1508_image.png "image.png")
图11: 新建 Connect 用户
参考 https://docs.aws.amazon.com/connect/latest/adminguide/configure-saml.html#destination-relay 配置中继链接,前端页面跳转。当看到如下界面时,说明 SSO 成功。
![image.png](https://dev-media.amazoncloud.cn/92c52f676168486baaaee86663f49f79_image.png "image.png")
图12: 中继链接跳转
开发者模式可以看到,用户访问中继链接(RelayState)后,跳转 SAML 通过 SigV4 进行 Amazon 联合授权,最后跳转到 ccp-v2 外呼界面。
在这篇 blog 中,我们探讨企业级用户如何通过 SSO 进行联合认证登陆指定 Connect 实例 CCP。同时,亚马逊有托管 SSO 服务与第三方 SSO 合作伙伴提供企业级 SSO 解决方案对接云呼叫中心 Connect。如有需要,欢迎联系亚马逊云科技。
**本篇作者**
![image.png](https://dev-media.amazoncloud.cn/8da6ebe40a71465384c1dd4608ee1d0b_image.png "image.png")
**赵安蓓**
*亚马逊云科技解决方案架构师,负责基于亚马逊云科技云平台的解决方案咨询和设计,[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail) TFC 成员。在数据处理与建模领域有着丰富的实践经验,特别关注医疗领域的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)工程化与运用。*