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

如何通过AWS API Gateway + Cognito + IAM限制外部用户访问API特定端点的指定方法

如何通过AWS API Gateway + Cognito + IAM限制外部用户访问API特定端点的指定方法

看起来你已经搭好核心的基础组件了,剩下的就是把这些环节彻底打通,我来一步步给你梳理清楚具体操作:

1. 确认API Gateway目标方法的授权类型

进入AWS API Gateway控制台,找到你要保护的那个端点的POST/PUT/DELETE方法,把它们的「授权类型」修改为IAM。如果你的GET方法允许外部用户访问,要么保持原有授权(比如Cognito用户池授权),要么也设置为IAM并给外部角色配置对应权限。

2. 细化IAM角色的权限策略

针对外部用户的IAM角色,修改其权限策略,明确只允许对目标端点执行GET操作,同时拒绝POST/PUT/DELETE的调用权限。示例策略如下:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:你的区域:你的账号ID:API ID/阶段/GET/端点路径"
    },
    {
      "Effect": "Deny",
      "Action": ["execute-api:Invoke"],
      "Resource": [
        "arn:aws:execute-api:你的区域:你的账号ID:API ID/阶段/POST/端点路径",
        "arn:aws:execute-api:你的区域:你的账号ID:API ID/阶段/PUT/端点路径",
        "arn:aws:execute-api:你的区域:你的账号ID:API ID/阶段/DELETE/端点路径"
      ]
    }
  ]
}

而内部用户的IAM角色,直接配置允许所有方法的execute-api:Invoke权限即可,不需要添加Deny规则。

3. 配置Cognito用户组与IAM角色的映射

  • 如果你还没关联身份池,先创建一个Cognito身份池并关联你的用户池;
  • 进入身份池的「认证提供商」设置,选择Cognito后找到「角色映射」选项;
  • 开启「使用自定义角色映射」,然后设置规则:当用户属于internal组时,分配内部IAM角色;属于external组时,分配外部IAM角色。这里的匹配条件可以用cognito:groups字段,对应组名即可。

4. 确保API Gateway正确传递身份信息

如果你的API用的是Lambda代理集成,身份信息会自动传递到后端;如果是其他集成方式,需要在「集成请求」的请求模板里,确保Cognito的用户组或身份ID被正确传递——不过核心是让IAM能识别用户对应的角色,这一步只要角色映射配置正确,一般不会有问题。

5. 测试验证

  • 用外部组的用户账号生成Cognito访问令牌,调用POST/PUT/DELETE方法,应该会收到403 Forbidden响应;
  • 调用GET方法则应该正常返回数据;
  • 切换到内部组用户测试,所有方法都能正常执行。

备注:内容来源于stack exchange,提问作者Devin Gardner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 15:53:15