我正在尝试从节点调用 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);
});
密钥适用于 IAM 用户。用户附加了 AWSLambdaExecute
和 AWSLambdaBasicExecutionRole
策略。
我得到一个权限错误: 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?
原文由 Arjun Komath 发布,翻译遵循 CC BY-SA 4.0 许可协议
AWSLambdaExecute
和AWSLambdaBasicExecutionRole
不提供错误中表示的权限。这两个托管策略都设计为附加到您的 Lambda 函数本身,因此 它使用这些策略运行。该错误表示运行 nodejs 程序的用户无权启动 Lambda 函数。
您需要授予 IAM 用户
lambda:InvokeFunction
权限:示例政策:
在这个策略中,我包含了调用 lambda 方法的两种方法。
更新:
现在还有一个名为
AWSLambdaRole
的 IAM 托管策略,您可以将其分配给您的 IAM 用户或 IAM 角色。这应该为您提供所需的权限。