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

如何在AWS SAM部署中配置Cognito身份池IAM认证?

SAM部署中API Gateway AWS IAM授权配置问题解决

问题本质

你在SAM里设置DefaultAuthorizer: AWS_IAM后触发403,是因为SAM模板的API资源配置未正确匹配原API Gateway的IAM授权逻辑,并非授权器本身的问题。而尝试自定义授权器完全是多余操作——原API Gateway用的是AWS内置的IAM授权,根本不需要自定义Lambda授权器,报错“Invalid Authorizer URI”就是因为自定义授权器必须绑定Lambda函数,这一步对你的场景完全没必要。

正确配置方案

要复现原API Gateway的AWS IAM授权,只需在SAM模板里正确配置AWS::Serverless::Api资源,确保全局或方法级的授权规则生效:

示例SAM模板片段

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31

Resources:
  MyServerlessApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: prod
      # 全局默认启用AWS IAM授权
      DefaultAuthorizer: AWS_IAM
      Auth:
        # 避免OPTIONS预检请求被IAM授权拦截
        AddDefaultAuthorizerToCorsPreflight: false

  MyBackendFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ./src/
      Handler: main.handler
      Runtime: nodejs20.x
      Events:
        ApiRequest:
          Type: Api
          Properties:
            RestApiId: !Ref MyServerlessApi
            Path: /user/data
            Method: GET
            # 继承全局的AWS_IAM授权,无需额外配置

403错误排查清单

如果配置后还是返回403,逐一检查以下项:

  • 请求签名正确性:确保客户端用Cognito身份池返回的临时凭证(Access Key、Secret Key、Session Token),通过AWS SigV4算法对请求签名,别直接用Cognito的ID Token或Access Token。
  • Lambda角色权限:确认Lambda的执行角色允许API Gateway调用(SAM默认会生成这个权限,但若手动修改过角色,需检查是否存在execute-api:Invoke权限)。
  • API阶段配置:登录AWS控制台,查看API Gateway的对应阶段,确认“默认授权器”已设为“AWS_IAM”。
  • 是否存在覆盖规则:检查模板中是否有某个端点单独设置了Authorizer: NONE,会覆盖全局的AWS_IAM配置。

原API Gateway配置的等效逻辑

之前手动在API Gateway的“Method Request→Authorization”选择“AWS IAM”,本质是为单个方法启用内置IAM授权。SAM里的DefaultAuthorizer: AWS_IAM是全局配置,效果和手动给每个方法设置一致,只要模板里没有冲突的配置,就能完全复现原逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:37:53