amazon-web-services - 重新部署 lambda 后,AWS Lex 访问被拒绝。错误的默认 IAM 角色

标签 amazon-web-services aws-lambda chatbot amazon-lex

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

可信实体

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

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

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

    首先,我认为这是我的错误,并开始调查问题,但后来,我注意到 AWSServiceRoleForLexBots 角色的策略不对。
    {
        "Version": "2012-10-17",
            "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "polly:SynthesizeSpeech"
                ],
                "Resource": [
                    "*"
                ]
            }
            ]
    }
    

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

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

    谢谢。

    最佳答案

    使用 AWS CLI 试试这个:

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

    看看:Using Resource-Based Policies for AWS Lambda (Lambda Function Policies)

    关于amazon-web-services - 重新部署 lambda 后,AWS Lex 访问被拒绝。错误的默认 IAM 角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43549478/

    相关文章:

    php - 如何使用 PHP AWS SDK 获取实例元数据?

    python - AWS Translate 使用 Python 的大型 HTML

    java - 无法解析符号 DynamoDBMapper

    amazon-web-services - AWS 应用程序负载均衡器监听器规则路径

    html - Amazon Lambdas HTML 发布表单提交

    amazon-s3 - 如何从 AWS lambda java 中的类路径加载属性文件

    javascript - 使用嵌入式网络聊天发送事件和了解用户操作

    chatbot - 将参数值从一个意图发送到另一个意图并将其分配给参数

    amazon-web-services - 是否可以从 AWS lambda 直接调用 docker run

    python - 在 Flask 中创建 Python 类的多个实例