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

本地运行Lex机器人报错:调用Lambda函数遭权限拒绝,请排查策略

解决AWS Lex调用Lambda时的权限拒绝问题

嘿,我来帮你排查这个Lex调用Lambda的权限错误~咱们一步步来:

1. 先修复角色信任关系的语法bug

你给的信任关系JSON有个明显的语法问题:里面重复写了"Service"字段,还留了个空的"Service" : ,这会让AWS没法正确解析这个策略,先把这个问题修好。

修正后的信任关系JSON(我保留了你需要的Cognito和Lex主体,删掉了无效的空条目):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "cognito-identity.amazonaws.com",
        "Service": "lex.amazonaws.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "cognito-identity.amazonaws.com:aud": "us-east-1:*****-*****-*****"
        },
        "ForAnyValue:StringLike": {
          "cognito-identity.amazonaws.com:amr": "unauthenticated"
        }
      }
    }
  ]
}

另外,如果这个角色是Lambda的执行角色(也就是Lambda运行时用的角色),那你还得把lambda.amazonaws.com加到Principal的Service列表里,因为Lambda本身需要扮演这个角色才能执行函数,修改后是这样:

"Service": ["lex.amazonaws.com", "lambda.amazonaws.com"]

2. 给Lambda配置允许Lex调用的资源策略(这是关键!)

错误提示的核心是Lex没有权限调用你的Lambda函数,这可不是角色信任关系的问题,而是Lambda函数本身的资源策略没开权限。咱们得给Lambda加个权限,允许Lex服务触发它:

用AWS CLI的方式

运行下面的命令,记得把占位符换成你自己的信息:

aws lambda add-permission \
  --function-name dataCodeHook \
  --statement-id lex-access \
  --action lambda:InvokeFunction \
  --principal lex.amazonaws.com \
  --source-arn arn:aws:lex:us-east-1:***********:intent:DataProcess:4

用AWS控制台的方式

  1. 打开Lambda控制台,找到你的dataCodeHook函数
  2. 切到配置标签,选权限
  3. 在资源策略那块,点添加权限
  4. 受信实体类型选AWS服务,然后选Lex作为服务
  5. 来源ARN里填你的Intent ARN:arn:aws:lex:us-east-1:***********:intent:DataProcess:4
  6. 操作选lambda:InvokeFunction,给这个权限起个ID(比如lex-intent-access),最后保存就行

3. 最后确认Lambda执行角色的权限

确保你的Lambda执行角色有函数运行需要的所有权限(比如如果函数要访问S3或者DynamoDB,得给对应权限),不过这不是当前报错的直接原因,但也得检查下避免后续问题。

做完这些步骤后,再测试你的Lex机器人,应该就能解决这个访问被拒绝的问题啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:12:17