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

Lambda无cognito-idp:AdminCreateUser权限,求正确serverless.yml配置

问题原因

你之前的配置错误将Cognito操作权限放在了AssumeRolePolicyDocument节点下,该节点仅用于声明允许哪些服务扮演对应IAM角色,实际的资源操作权限需要定义在IAM角色的Policies节点内。

正确配置方案

方案1:使用Serverless Framework内置IAM配置(推荐,更简洁)

不需要手动定义完整IAM角色,直接在provider节点下添加权限声明即可:

service: your-service-name # 替换为你自己的服务名
provider:
  name: aws
  runtime: nodejs18.x # 替换为你实际使用的运行时
  region: ap-southeast-1 # 替换为你实际的区域
  # 新增IAM权限声明
  iamRoleStatements:
    - Effect: Allow
      Action: cognito-idp:AdminCreateUser
      # 替换为你实际的Cognito用户池ARN,生产环境不建议直接使用*通配符
      Resource: arn:aws:cognito-idp:<aws-region>:<aws-account-id>:userpool/<userpool-id>
    # 保留Lambda默认执行权限,用于输出日志
    - Effect: Allow
      Action:
        - logs:CreateLogGroup
        - logs:CreateLogStream
        - logs:PutLogEvents
      Resource: arn:aws:logs:*:*:*

functions:
  orderSubmission:
    handler: api/order.create
    events:
      - http:
          path: /orders
          method: post

方案2:自定义IAM角色的正确写法

如果你需要完全自定义IAM角色,正确配置如下:

service: your-service-name # 替换为你自己的服务名
provider:
  name: aws
  runtime: nodejs18.x # 替换为你实际使用的运行时
  region: ap-southeast-1 # 替换为你实际的区域

functions:
  orderSubmission:
    role: myCustRole0
    handler: api/order.create
    events:
      - http:
          path: /orders
          method: post

resources:
  Resources:
    myCustRole0:
      Type: AWS::IAM::Role
      Properties:
        RoleName: MyCustRole0
        # AssumeRolePolicyDocument仅定义允许扮演角色的主体
        AssumeRolePolicyDocument:
          Version: "2012-10-17"
          Statement:
            - Effect: Allow
              Principal:
                Service:
                  - lambda.amazonaws.com
              Action: sts:AssumeRole
        # 实际操作权限定义在Policies节点下
        Policies:
          - PolicyName: CognitoCreateUserPolicy
            PolicyDocument:
              Version: "2012-10-17"
              Statement:
                # Cognito用户创建权限
                - Effect: Allow
                  Action: cognito-idp:AdminCreateUser
                  Resource: arn:aws:cognito-idp:<aws-region>:<aws-account-id>:userpool/<userpool-id>
                # Lambda基础日志权限
                - Effect: Allow
                  Action:
                    - logs:CreateLogGroup
                    - logs:CreateLogStream
                    - logs:PutLogEvents
                  Resource: arn:aws:logs:*:*:*
注意事项
  • 请将配置中的<aws-region>、<aws-account-id>、<userpool-id>替换为你实际的AWS区域、账号ID、Cognito用户池ID
  • 生产环境建议避免使用*通配符作为Resource值,尽量按最小权限原则限制权限范围
  • 必须保留Lambda的日志相关权限,否则函数执行日志无法正常上报到CloudWatch,不利于问题排查

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:18:03