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

AWS技术问题:如何限制Cognito授权用户仅访问特定Lambda函数

解决Cognito用户组权限无法控制Lambda调用的问题

我来帮你搞定这个权限控制的问题——你现在遇到的核心问题是Cognito授权器在API Gateway里只负责验证用户身份,不会自动应用用户组关联的IAM角色来限制Lambda调用权限。下面给你一步步拆解解决方法:

为什么当前设置不生效?

你现在的API Gateway用Cognito授权器只是做了身份校验:只要用户能提供有效的IdToken,就会通过授权,然后API Gateway会用自己的权限(而不是用户组的IAM角色)去调用Lambda。如果API Gateway本身被授予了调用所有Lambda的权限,那不管用户属于哪个组,都能触发所有函数。

正确的配置步骤

1. 调整API Gateway的集成方式,使用用户的Cognito角色调用Lambda

在API Gateway的每个路由集成请求里,需要开启**使用调用者的身份(Web Identity)**来调用Lambda,而不是用API Gateway默认的执行角色。具体操作:

  • 进入API Gateway控制台,打开对应的API和路由
  • 切换到「集成请求」标签
  • 在「权限」部分,选择「使用调用者的身份」
  • 填写「IAM角色ARN」为一个具备sts:AssumeRoleWithWebIdentity权限的IAM角色(这个角色需要允许API Gateway服务主体来调用这个STS操作)

2. 配置API Gateway的IAM角色权限

创建或修改API Gateway的执行角色,添加以下策略,允许它扮演用户组的角色:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Resource": [
        "arn:aws:iam::xxxxxx:role/User",
        "arn:aws:iam::xxxxxx:role/Admin"
      ]
    }
  ]
}

3. 移除API Gateway直接调用Lambda的权限

检查你的Lambda函数的资源策略,确保没有给apigateway.amazonaws.com服务主体直接的lambda:InvokeFunction权限。这样API Gateway就只能通过扮演用户组的角色来调用Lambda,从而受限于角色的权限策略。

4. 验证用户组角色的信任策略

确保User和Admin角色的信任策略允许Cognito用户池和API Gateway来扮演它们,比如User角色的信任策略应该包含:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "cognito-identity.amazonaws.com",
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "cognito-identity.amazonaws.com:aud": "你的Cognito用户池ID"
        }
      }
    }
  ]
}

测试验证

完成配置后,用User组的用户调用api-dev-getUsers路由,应该返回403 Forbidden;调用api-dev-getItems则正常返回结果。Admin组用户可以调用两个路由,这样就符合你的预期了。

内容的提问来源于stack exchange,提问作者Philipp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:41:28