嵌入CCP的自定义Web应用:如何为Lambda调用添加认证保护
解决方案:为Connect Streams事件触发的Lambda调用添加认证保护
核心思路
你的CCP已经通过SAML和IAM身份提供商完成认证,可以复用这套已有的信任关系,确保只有经过认证的Connect用户触发的请求才能调用Lambda。下面是几种可落地的实现方式:
方式1:后端服务代理Lambda调用(推荐)
既然你是在服务端通过DOM事件监听触发调用,让后端做中间层校验是最稳妥的方案:
- 当
onConnected事件触发时,前端从CCP获取当前用户的Connect用户ID(通过connect.contact.getIdentity().userId),将这个标识传给你的后端服务。 - 后端服务调用Amazon Connect的
DescribeUserAPI,传入用户ID,确认该用户属于你的Connect实例且状态合法(后端需要配置IAM权限允许调用Connect的DescribeUser接口)。 - 验证通过后,后端服务再调用Lambda函数——后端用IAM角色授权调用Lambda,无需暴露Lambda的公网调用权限。
方式2:API Gateway + 自定义Lambda授权器
如果要直接让前端触发Lambda调用,可将Lambda挂载到API Gateway并配置自定义授权器:
- 前端在
onConnected事件中,从CCP获取用户的SAML断言或Connect用户ID,作为请求头参数传给API Gateway。 - 自定义授权器Lambda接收参数后,要么调用Connect的
DescribeUser验证用户合法性,要么用IAM身份提供商的公钥验证SAML断言的签名与有效期,返回授权决策。 - 只有授权通过的请求,API Gateway才会转发到目标Lambda。
方式3:直接为Lambda配置IAM资源级权限
如果你的后端服务已拥有合法IAM身份(比如ECS实例角色、EC2实例角色),可直接给该角色添加调用Lambda的权限:
- 编写IAM政策,允许该角色调用目标Lambda:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:你的区域:账号ID:function:你的Lambda函数名" } ] }
- 后端服务调用Lambda时会自动使用自身IAM身份认证,无需额外传递凭证,确保只有你的服务端能触发调用。
关键注意事项
- 绝对不要放开Lambda的公网调用权限,必须通过IAM或API Gateway的授权机制限制调用者。
- 前端传来的用户标识不能直接信任,必须通过Connect官方API或SAML验证流程确认合法性。
- 使用SAML断言时,要检查断言的有效期与签名有效性,避免使用过期或篡改的凭证。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

