如何通过SAM配置Cognito Pre Token Generation Lambda触发器
如何通过AWS SAM配置Cognito Pre Token Generation Lambda触发器
Cognito Pre Token Generation触发器支持在身份令牌生成前自定义令牌内容,目前已经可以通过SAM完成配置,不需要等待路线图中的待开发功能,具体配置方法如下:
方案1:使用SAM原生Cognito事件源映射(推荐)
当前版本SAM已经原生支持Cognito用户池触发器的事件配置,你模板中Events段的???位置可以直接替换为以下配置:
Events: PreTokenGenTrigger: Type: Cognito Properties: UserPool: !Ref 你模板中定义的Cognito用户池资源逻辑ID Trigger: PreTokenGeneration
该配置方式会自动完成两项配置:
- 建立Lambda和Cognito用户池的触发器关联
- 自动给Lambda添加资源策略,允许Cognito服务调用该函数,不需要手动配置权限
方案2:旧版本SAM兼容配置
如果你使用的SAM CLI版本较旧,不支持上述原生Cognito事件类型,可以不在Lambda的Events块做配置,直接在Cognito用户池资源上关联触发器:
- 首先在Cognito用户池资源的配置中指定PreTokenGeneration对应的Lambda:
AuthUserPool: Type: AWS::Cognito::UserPool Properties: # 其余用户池常规配置(密码策略、属性配置等)保持不变 LambdaConfig: PreTokenGeneration: !GetAtt ApiJWTAddCustomClaimFunction.Arn
- 补充Lambda调用权限资源,否则Cognito将没有权限触发该函数:
LambdaInvokePermissionForCognito: Type: AWS::Lambda::Permission Properties: Action: lambda:InvokeFunction FunctionName: !Ref ApiJWTAddCustomClaimFunction Principal: cognito-idp.amazonaws.com SourceArn: !GetAtt AuthUserPool.Arn
配置注意事项
- 你当前模板中给函数配置的
cognito-idp:*全权限范围过大,生产环境建议根据实际业务需求收缩到最小权限集,降低安全风险 - 模板修改完成后可以先执行
sam validate做语法校验,确认无问题后再执行部署 - 部署完成后可以在Cognito控制台的用户池「触发器」页面,确认Pre Token Generation触发器已经正确关联到目标Lambda函数
内容的提问来源于stack exchange,提问作者Thet Naing
相关产品推荐
相关产品推荐

