AWS API Gateway搭配Cognito用户池授权器:启用Lambda调用者凭证选项
解决API Gateway用Cognito授权器时「调用者凭证执行」选项禁用的问题
为啥控制台的选项点不了
当API Gateway用Cognito用户池做授权器时,控制台里的「Invoke with caller credentials」(调用者凭证执行)复选框会被禁用——这是因为这种场景下需要通过IAM角色来传递调用者的身份凭证,控制台没做直接配置的入口,得用CLI或者CloudFormation这类工具来搞定。
具体操作步骤
1. 先建个符合要求的IAM角色
得先搞个IAM角色,满足两个核心要求:
- 信任API Gateway服务(允许API Gateway扮演该角色)
- 拥有调用目标Lambda函数的权限
信任策略示例(JSON格式):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
权限策略示例(授予调用Lambda的权限):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:你的区域:你的账号ID:function:你的Lambda函数名" } ] }
2. 用CLI更新API Gateway的集成配置
运行下面的AWS CLI命令,把集成的credentials参数设成刚才创建的IAM角色ARN:
aws apigateway update-integration \ --rest-api-id 你的API ID \ --resource-id 目标资源ID \ --http-method 你的HTTP方法(比如GET/POST) \ --patch-operations op=replace,path=/credentials,value=你的IAM角色ARN
参数说明:
- 你的API ID:在API Gateway控制台首页就能找到
- 目标资源ID:控制台资源列表中对应资源的ID
- 你的IAM角色ARN:刚才创建的角色的ARN,可在IAM控制台角色详情页获取
3. 重新部署API
修改集成配置后,必须重新部署API才能让设置生效:
aws apigateway create-deployment \ --rest-api-id 你的API ID \ --stage-name 你的部署阶段名(比如prod/dev)
验证是否生效
部署完成后,调用API时,Lambda会通过你创建的IAM角色,使用Cognito授权后的用户凭证执行。你可以查看Lambda的执行日志,找到aws:userid等Cognito相关的上下文参数,确认身份凭证是否正确传递。
内容的提问来源于stack exchange,提问作者Basa
相关产品推荐
相关产品推荐

