node.js - 访问拒绝异常 : User is not authorized to perform: lambda:InvokeFunction

标签 node.js amazon-web-services aws-lambda amazon-iam

我正在尝试从 Node 调用 lambda 函数。

var aws = require('aws-sdk');
var lambda = new aws.Lambda({
    accessKeyId: 'id',
    secretAccessKey: 'key',
    region: 'us-west-2'
});

lambda.invoke({
    FunctionName: 'test1',
    Payload: JSON.stringify({
        key1: 'Arjun',
        key2: 'kom',
        key3: 'ath'
    })
}, function(err, data) {
    if (err) console.log(err, err.stack);
    else     console.log(data);
});

key 适用于 IAM 用户。用户有AWSLambdaExecuteAWSLambdaBasicExecutionRole附政策。

我收到权限错误: AccessDeniedException: User: arn:aws:iam::1221321312:user/cli is not authorized to perform: lambda:InvokeFunction on resource: arn:aws:lambda:us-west-2:1221321312:function:test1

我阅读了文档和几个博客,但我无法授权该用户调用 lambda 函数。如何让该用户调用 lambda?

最佳答案

更新(TL;DR)

现在还有一个名为 AWSLambdaRole 的 IAM 托管策略,您可以将其分配给您的 IAM 用户或 IAM 角色。这应该会为您提供所需的权限。

<小时/>

原始答案

AWSLambdaExecuteAWSLambdaBasicExecutionRole 不提供错误中所表达的权限。这两个托管策略都旨在附加到您的 Lambda 函数本身,因此它会使用这些策略运行

错误提示运行nodejs程序的用户没有启动Lambda函数的权限。

您需要向您的 IAM 用户授予 lambda:InvokeFunction 权限:

  1. 在 IAM 管理控制台中找到您的用户并点击它。
  2. 在“权限”选项卡上,展开“内联策略”部分,然后点击“单击此处”链接添加策略。
  3. 选择“自定义政策”。
  4. 为您的政策命名。它可以是任何东西。
  5. 将此政策放入“政策文档”字段中。

政策示例:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1464440182000",
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeAsync",
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

在此策略中,我包含了两种调用 lambda 方法的方法。

关于node.js - 访问拒绝异常 : User is not authorized to perform: lambda:InvokeFunction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37498124/

相关文章:

javascript - 如何在 Visual Studio 代码中与文件一起导入扩展名?

javascript - Node.js:从 POST 请求中获取响应主体

javascript - 在 node-cron 中获取下一个 cron 作业时间

javascript - Mongodb 查找 - 或运算符?

amazon-web-services - Amazon Route 53 域 - 找不到服务器 IP 地址

amazon-web-services - AWS Cloudwatch 事件 putTargets 未添加 Lambda 事件源

node.js - 使用 AWS Lambda 上传到 AWS S3

amazon-web-services - AWS SSL 证书未在整个站点传播

amazon-web-services - CloudFormation lambda函数给出本地代码

node.js - 仅当主排序键不同时 NodeJS lambda dynamoDB putItem