4

我最近创建了一个 AWS Lex 机器人并添加了一个意图。然后我上传了一个简单的 AWS Lambda,它具有管理员访问权限(我稍后会降低它,不用担心),然后还添加了一些受信任的实体:

受信任的实体

  • 身份提供者 apigateway.amazonaws.com
  • 身份提供者 lambda.amazonaws.com
  • 身份提供者 events.amazonaws.com
  • 身份提供者 lex.amazonaws.com

然后我将 lambda 函数添​​加到意图并构建机器人,开始测试它。它工作得很好。下一步是(在 10 分钟内)更新 lambda 函数(测试新功能)。我添加了一个新版本并返回 AWS Lex 并开始编写消息,然后出现以下错误消息:

发生错误:从 arn:aws:lex:us-east-1:888888888:intent:test:3 调用 lambda 函数 arn:aws:lambda:us-east-1:99999999999:function:lex-test 时访问被拒绝. 请查看有关此功能的政策。

首先,我认为这是我的错误,并开始调查问题,但随后,我注意到AWSServiceRoleForLexBots角色的策略不正确。

{
    "Version": "2012-10-17",
        "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "polly:SynthesizeSpeech"
            ],
            "Resource": [
                "*"
            ]
        }
        ]
}

我无法更改它,因为“无法在 IAM 中修改此服务相关角色。您可以从依赖于此角色的 AWS 服务修改此角色。” 如果我再次单击每个意图并删除 lambda 函数,然后再次添加它,然后构建并发布它,它将一直工作到下一次更新。

然而,这是一场噩梦。你知道我该如何解决这个问题吗?

谢谢。

4

1 回答 1

2

使用 AWS CLI 试试这个:

aws lambda add-permission --function-name lex-test --statement-id chatbot-fulfillment --action "lambda:InvokeFunction" --principal "lex.amazonaws.com"

并看一看:为 AWS Lambda 使用基于资源的策略(Lambda 函数策略)

于 2017-06-07T10:54:23.323 回答