You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lambda执行角色vs AWS IAM:Cognito联合用户权限配置疑问

关于Cognito联合角色与Lambda执行角色的权限困惑解答

嘿,这个问题其实是很多刚接触Cognito+Lambda+API Gateway架构的开发者都会踩的坑,我来帮你把这两个角色的职责掰扯清楚——完全不需要两个权限相同的角色,它们干的是完全不同的活儿!

Lambda执行角色:Lambda函数的"身份卡"

这个角色是给Lambda函数本身用的,说白了就是Lambda运行时的"身份凭证"。不管你的请求是来自Cognito用户、其他服务还是手动触发,Lambda要访问任何AWS资源(比如读DynamoDB、写S3、调用另一个Lambda),都得靠这个角色的权限。

举个例子:如果你的Lambda需要从DynamoDB里取用户数据,那Lambda执行角色必须要有dynamodb:GetItem的权限,哪怕调用API的用户是超级管理员,只要Lambda执行角色没这个权限,照样会报错。

Cognito联合角色:控制用户能不能调用你的API

这个角色是给客户端用户用的!当用户通过Cognito完成认证后,客户端会拿到这个角色对应的临时AWS凭证,然后用这些凭证去调用你的API Gateway(因为你用了AWS_IAM授权,API Gateway会先校验这些凭证的权限)。

它的核心意义是做API访问的细粒度控制:比如你可以给普通用户组的Cognito角色只开放/user/*路径的API权限,给管理员组开放/admin/*的权限,这样不同用户能调用的API就不一样了。它管的是"用户能不能发起请求",而不是"请求到了Lambda之后能做什么"。

正确的权限配置姿势

1. Cognito角色的权限配置

只需要给它配置允许调用目标API Gateway的权限就行,不用管后端资源。比如:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:us-east-1:123456789012:abc123/*/*/*"
    }
  ]
}

你还可以根据API的路径、HTTP方法进一步缩小范围,比如只允许调用/user/profile的GET请求,实现更精准的控制。

2. Lambda执行角色的权限配置

只需要配置Lambda运行时需要访问的后端资源权限,比如读取DynamoDB、发送SNS通知等,完全不需要包含API Gateway的调用权限。

为啥你会觉得需要相同权限?

应该是混淆了两个独立的权限校验环节:

  • 第一关:API Gateway会校验用户的Cognito角色权限,确认这个用户有没有资格调用这个API;
  • 第二关:Lambda运行时会用自己的执行角色去访问后端资源,确认Lambda有没有权限做这些操作。
    这俩环节互不干扰,各司其职,所以根本不需要权限一致。

内容的提问来源于stack exchange,提问作者Kamil.H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:20:00