基于函数计算实现从IdP到IDaaS的人员定时同步方案

更新时间:

方案概述

企业想要实现员工从IdPIDaaS的同步,做完首次初始同步后,每次新增员工后,如果必须手动到IDaaS触发同步,或IDaaS默认的同步周期无法满足企业要求时,可以采用此方案实现自动化定时同步。本文档介绍了一种通过函数计算定时调用IDaaS同步的OpenAPI,实现按照自定义周期进行人员自动从IdPIDaaS同步的方法。

方案优势

本方案能够实现企业在从IdPIDaaS同步过程中,对自动化、个性化、安全的多方位需求。

IDaaS自动同步

通过函数计算调用云身份服务(IDaaS EIAM)的OpenAPI接口(RunSynchronizationJob),并通过配置定时触发器,实现从企业IdPIDaaS的自动同步功能。

同步周期自定义

通过对函数定时触发器的时间间隔配置,实现同步周期的自定义,满足企业的个性化需求。

提高安全性

通过FC函数角色和RAM角色关联,使用STS Token访问云资源,避免了将访问密钥硬编码在代码中,从而消除AK泄露的风险。临时凭证(STS Token)的使用有效解决了永久凭证(AK/SK)可能带来的安全风险问题。

精细化管理权限

通过为不同FC函数赋予具有特定授权策略的RAM角色,确保函数仅能访问其所需的资源,实现权限最小化。

客户场景

IdPIDaaS的自定义周期同步

场景描述

企业在从IdPIDaaS的同步过程中,出于对成本和权限管理的考量,只想对部分人员进行同步,同时在日常维护过程中,想要对人员进行增删操作,但不想手动到云身份服务控制台触发同步。

适用客户

  • 部分人员需要同步到IDaaS的企业客户。

  • 对云上资源访问安全性要求高的企业客户。

  • 对成本有把控要求的企业客户。

  • IDaaS同步时间间隔有个性化需求的企业客户。

  • 对运维过程自动化要求高的企业客户。

方案架构

本方案通过函数计算实现自定义周期的从IdPIDaaS的同步。该流程通过调用触发IDaaS同步的OpenAPI接口,实现从IdPIDaaS的同步,通过将接口调用部署在函数计算中,实现该过程的自动化。通过临时授予访问权限,避免了AK暴露的风险,提高了系统的安全性。

在管理员账号下创建RAM角色,并授信给函数计算服务(图中1)。管理员创建只拥有调用IDaaS触发同步API的权限策略,为函数角色授予该自定义权限,并将该角色配置到对应的函数上,使函数与角色关联(图中2)。函数计算内根据上下文Context获取STS Token(图中3)。该函数调用IDaaS触发同步API,将企业IdP中的用户增删同步至IDaaS(图中4)。

产品费用及名词

产品费用

产品名称

产品说明

产品费用

云身份服务IDaaS

云身份服务 IDaaS(英文名:Alibaba Cloud IDentity as a Service,简称 IDaaS)是阿里云为企业用户提供的云原生的、经济的、便捷的、标准的身份、权限管理体系。

分为免费版和企业收费版,详情参见产品计费

函数计算

函数计算(Function Compute)函数计算是事件驱动的全托管计算服务。使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码。函数计算为您准备好计算资源,弹性地、可靠地运行任务,并提供日志查询、性能监控和报警等功能。

收费,详情参见产品计费

RAM

访问控制(RAM)是阿里云提供的一项管理用户身份与资源访问权限的服务。使用RAM,您可以创建、管理RAM角色(例如员工、系统或应用程序),并可以控制这些RAM角色对资源的操作权限。

免费,详情参见产品定价

名词解释

名称

说明

IdP

Identity Provider,身份提供方。源自于 SAML 协议中定义,IdP 为进行用户认证、鉴权,并返回 SAML Response 结果信息给 SP 的身份提供方,后通用化指统一身份管理平台。

企业管理主账号

在企业拥有多个阿里云账号时,特指拥有管理其他账号资源权限的管理员账号。用于管理多账号,统一配置多账号身份权限,统一查看各云账号账单,统一配置审计规则并下发到各成员账号。

RAM管理员

RAM管理员具备账号下RAM资源的管理权限。RAM管理员可以是阿里云账号(主账号),也可以是主账号下拥有AliyunRAMFullAccess权限的RAM用户,强烈推荐您使用RAM用户充当RAM管理员。

访问密钥(AccessKey)

访问密钥AccessKey(简称AK)是阿里云提供给用户的永久访问凭据,一组由AccessKey IDAccessKey Secret组成的密钥对。发起的请求会携带AccessKey IDAccessKey Secret加密请求内容生成的签名,进行身份验证及请求合法性校验。

RAM角色(RAM role)

RAM角色是一种虚拟用户,可以被授予一组权限策略。与RAM用户不同,RAM角色没有永久身份凭证(登录密码或访问密钥),需要被一个可信实体扮演。扮演成功后,可信实体将获得RAM角色的临时身份凭证,即安全令牌(STS Token),使用该安全令牌就能以RAM角色身份访问被授权的资源。

函数RAM角色

函数通过函数RAM角色获得该角色拥有的权限,可以基于临时访问凭据STS(Security Token Service)访问指定云服务的API和操作指定的云资源,安全性更高。

安全性

IDaaS

IDaaS采用“默认安全”的产品设计,在“可用性”和“安全性”难以两全的场景中,IDaaS 会优先保障“安全性”,在此基础上,尽可能追求“易用性”,详情参见IDaaS默认安全设计

传输

  • 传输协议:方案中相关产品使用业界标准的LDAP协议及SCIM协议保障数据安全传递,详情参见LDAPSCIM

  • 传输加密:IDaaS支持LDAP连接开启StartTLS,建议AD中配置证书并在数据同步时开启StartTLS提升传输安全性,详情参见AD安全性配置

  • 数据权限:需要准备AD管理员账户及密码,至少拥有只读权限,用于从AD同步身份数据。

  • 公网访问:目前企业IdP(如AD)需要公网可访问才能使用IDaaS免费版及企业版进行数据同步,建议在企业环境中开启针对AD的公网访问限制,并将IDaaS地址添加到白名单中。

函数计算服务关联角色

在某些场景下,函数计算为了完成自身的某个功能,需要获取其他云服务的访问权限,因此,函数计算创建了与云服务关联的角色,即服务关联角色(AliyunServiceRoleForFC)。函数计算3.0支持AliyunServiceRoleForFCFaaS函数的绑定,实现最小授权范围内授予函数访问其他云服务的权限。

关于服务关联角色的更多信息,请参见服务关联角色

函数计算安全性

阿里云函数计算是事件驱动的全托管计算服务。通过函数计算,用户无需管理服务器等基础设施,只需编写代码并上传。函数计算会为用户准备好计算资源,以弹性、可靠的方式运行用户的代码,并提供日志查询、性能监控和报警等功能。对于数据层面,在与用户通信时,函数计算使用TLS 1.2及以上协议加密传输调用请求及回包,内部通信使用私有协议防止信息泄露及篡改。对于管控层面,您可以通过阿里云访问控制(RAM)进行权限控制等等。关于函数计算安全性的详细信息,请参见安全合规

注意事项

临时密钥有效期

函数计算根据函数配置的角色,通过AssumeRole获取一个临时密钥(STS Token)。该临时密钥的有效期为36小时,且不支持修改。函数的最大执行时间为24小时,因此,执行函数过程中,临时密钥不会过期。

支持STS的云服务

支持临时安全令牌(STS)的阿里云服务查询,请参见支持STS的云服务。函数计算在支持STS的云服务中,因此可以应用无AK方案。

自定义权限策略

为了收敛权限,确保函数仅能访问其所需的资源,创建的RAM角色只具有所需的特定策略的权限,因此需要自定义权限策略。

实施步骤

本方案实施步骤以钉钉为例,企业如果使用其他IdP,IDaaS绑定入方向身份提供方步骤可参考基于IDaaS实现IdP用户同步至云SSO

实施准备

实施时长

在实施准备工作完成的情况下,本方案实施预计时长:30分钟。

操作步骤

IDaaS身份提供方绑定钉钉

  1. IDaaS控制台中单击已创建的实例ID或者单击操作列中的访问控制台,进入云身份服务控制台。

  2. 在云身份服务控制台中,单击快速入门页面中的快速绑定钉钉,或者单击身份提供方页面中的快速绑定钉钉,然后单击入方向

  3. 在快速绑定钉钉详情页面的第一步绑定配置中,同步目标选择阿里云IDaaS,禁用增量同步,启用钉钉扫码登录。在更多设置中,不勾选触发一次全量同步。然后单击下一步。

  4. 在快速绑定钉钉详情页面的第二步中,使用企业钉钉管理员账户扫描屏幕上的二维码,开通IDaaS应用。开通后单击屏幕下方的下一步。

  5. 在移动端,单击立即开通,在开通页面选择应用的使用范围,即选择特定的可以登录IDaaS的人员。单击打开应用

  6. 在快速绑定钉钉详情页面的第三步中,在移动端单击扫码绑定后,扫描屏幕中的二维码。在PC端输入账户名和密码后单击登录,完成绑定。

  7. 绑定成功后,单击账户与组织,即可查看已经初始同步到IDaaS的人员

创建角色并授予自定义权限

  1. 登录RAM控制台,在左侧导航栏,单击权限策略,在权限策略页面中,单击创建权限策略

  2. 单击脚本编辑,将下方代码复制粘贴,完成后单击继续编辑基本信息

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "eiam:RunSynchronizationJob",
                "Resource": "*"
            }
        ]
    }
  3. 输入权限策略名称,单击确定

  4. 单击左侧导航栏中的角色,单击创建角色。

  5. 选择类型页面,单击阿里云服务,进入下一步。

  6. 在配置角色页面,单击普通服务角色,设置角色名称,并选择受信服务为函数计算。单击完成。

  7. 创建角色完成后,单击为角色授权

  8. 在选中的角色页面,单击新增授权

  9. 在新增授权页面,单击账号级别,使用默认授权主体,搜索刚刚创建的自定义权限,并勾选。

  10. 为了对函数计算触发器进行测试,增加日志服务触发器调用函数计算的权限策略。单击确认新增授权

创建函数并绑定角色

以函数计算3.0为例

  1. 登录函数计算控制台,在左侧导航栏,单击函数。进入函数详情页,单击创建函数

  2. 单击事件函数,输入函数名称

  3. 上传函数代码,代码详情参见代码仓库。本方案提供Python的代码示例,帮助快速完成函数计算部署。代码上传后单击创建。

  4. 单击刚刚创建的函数右侧的配置

  5. 在函数详情页面,单击权限

  6. 单击编辑

  7. 搜索刚刚创建的角色fc-sync-test,单击部署

  8. 在函数详情页,单击代码

  9. 设置环境变量,其中,实例ID、同步目标 ID和同步目标类型可参考OpenAPI-运行同步任务;IDaaS EIAM服务的Endpoint可参考OpenAPI-IDaaS EIAM

    实例ID可在EIAM云身份服务页面获取。

    同步目标 ID的获取方式:

    1. 需在云身份服务-身份提供方页面,单击触发同步

    2. 单击查看日志

    3. 单击管理操作

    4. 获取同步目标 ID同步目标类型identity_provider。

  10. 单击测试函数,屏幕会显示执行成功。

  11. 配置触发器。 函数详情页面,单击触发器,单击创建触发器

  12. 在触发器类型下拉框中选择定时触发器,触发方式选择时间间隔,时间间隔可按企业实际需求设置。

  13. 创建完成后,可在日志中查看函数调用时间和结果。

IDaaS查看同步结果

  1. 登录云身份服务控制台,单击已有实例。

  2. 单击查看日志

  3. 即可看到历史同步结果。

故障排除

函数无法运行?

  • 请检查函数计算版本是否为3.0

  • 请检查相关权限是否配置正确

  • 请检查依赖包版本是否正确